linusyang92 / mipay-extract

Extract Mi Pay from MIUI China Rom
408 stars 143 forks source link

EU MIUI11的 Calendar 已经被混淆了 #54

Open niphor opened 4 years ago

niphor commented 4 years ago

首先感谢大佬辛苦付出 今天处理K20Pro的 MIUI11 11.2 20.3.27,发现日历无法打补丁,打开目录发现都是混淆后的名字

--> decompiling Calendar...
----> Ignore patch: "LocalizationUtils.smali" not found

不知有何其它方式处理

谢谢

MonwF commented 4 years ago

cleaner-fix中LocalizationUtils那一行替换成如下代码,可解决问题

sed -i '/0x7f0/{N;N;N;N;
a  const/4 p0, 0x1
}' $apkdir/smali/com/miui/calendar/util/A.smali
niphor commented 4 years ago

@MonwF 看到您的回复,不胜欣喜,遂尝试一番,但这个替换在Mac上会报

sed: 1: "system/priv-app/Calenda ...": unterminated substitute pattern

感叹于自己sed语法不是很熟悉,单独调试这个sed替换时,又报

extra characters at the end of n command

只好先手动了... 搜索了一下 0x7f04 ,可能您用的ROM版本是和我不一样,没有单独的0x7f04,而是有2个0x7f040003,0x7f040004的资源ID

.method public static c(Landroid/content/Context;)Z
    .registers 2

    invoke-virtual {p0}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;

    move-result-object p0

    const v0, 0x7f040003

    invoke-virtual {p0, v0}, Landroid/content/res/Resources;->getBoolean(I)Z

    move-result p0

    return p0
.end method

.method public static e(Landroid/content/Context;)Z
    .registers 2

    invoke-virtual {p0}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;

    move-result-object p0

    const v0, 0x7f040004

    invoke-virtual {p0, v0}, Landroid/content/res/Resources;->getBoolean(I)Z

    move-result p0

    return p0
.end method

虽能理解您的替换的意思,但直接替换后,如下,语法都不对了,

...
move-result-object p0

const v0, {N;N;N;N;
a  const/4 p0, 0x1
}0004

invoke-virtual {p0, v0}, Landroid/content/res/Resources;->getBoolean(I)Z
....

好在这个smail文件比较简单,遂手动改成这样了,应该是您这个替换的想表达意思吧?

.method public static c(Landroid/content/Context;)Z
    .registers 1

    const/4 p0, 0x1

    return p0
.end method

.method public static e(Landroid/content/Context;)Z
    .registers 1

    const/4 p0, 0x1

    return p0
.end method

刷入后 的确 节假日和农历都出来了,不过有点疑问的就是原先有 showsDayDiff,showsLunarDate,showsWidgetHoliday,-showsWorkFreeDay, -isMainlandChina,-isGreaterChina这6个方法体要改,现在就改这2个就行了么?

另外 尴尬的是,用户体验计划,就是推广广告也出来了...

希望您能不惜赐教,谢谢。

MonwF commented 4 years ago
  1. mac os 要用homebrew安装 gnu-sed,系统自带的sed非标准。那条命令是找到0x7f04,在其后面第4行加入const/4 p0, 0x1
  2. 以前这些方法最终也是调c和e,用来判断是不是大陆和大中华区。
  3. 用户体验计划可以在日历的设置里关闭
niphor commented 4 years ago

好的,我回去试试看

谢谢大佬耐心解释

mdws2001 commented 4 years ago
1. mac os 要用homebrew安装 `gnu-sed`,系统自带的sed非标准。那条命令是找到`0x7f04`,在其后面第4行加入`const/4 p0, 0x1`

2. 以前这些方法最终也是调c和e,用来判断是不是大陆和大中华区。

3. 用户体验计划可以在日历的设置里关闭

請問Windows版本需要怎樣修改? 把 if [[ "$app" == "Calendar" ]]; then $patchmethod $apkdir/smali/com/miui/calendar/util/LocalizationUtils.smali \ showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay \ -isMainlandChina -isGreaterChina || return 1 換成 if [[ "$app" == "Calendar" ]]; then sed -i '/0x7f04/{N;N;N;N; a const/4 p0, 0x1 }' $apkdir/smali/com/miui/calendar/util/A.smali \ showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay \ -isMainlandChina -isGreaterChina || return 1

不行哦。 系統會出現sed:unknown option --h,然後結束工作。

盼請指教,謝謝。

QSCFTHMKO commented 4 years ago
1. mac os 要用homebrew安装 `gnu-sed`,系统自带的sed非标准。那条命令是找到`0x7f04`,在其后面第4行加入`const/4 p0, 0x1`

2. 以前这些方法最终也是调c和e,用来判断是不是大陆和大中华区。

3. 用户体验计划可以在日历的设置里关闭

請問Windows版本需要怎樣修改? 把 if [[ "$app" == "Calendar" ]]; then $patchmethod $apkdir/smali/com/miui/calendar/util/LocalizationUtils.smali showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay -isMainlandChina -isGreaterChina || return 1 換成 if [[ "$app" == "Calendar" ]]; then sed -i '/0x7f04/{N;N;N;N; a const/4 p0, 0x1 }' $apkdir/smali/com/miui/calendar/util/A.smali showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay -isMainlandChina -isGreaterChina || return 1

不行哦。 系統會出現sed:unknown option --h,然後結束工作。

盼請指教,謝謝。

if [[ "$app" == "Calendar" ]]; then $patchmethod $apkdir/smali/com/miui/calendar/util/LocalizationUtils.smali \ showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay \ -isMainlandChina -isGreaterChina || return 1 fi -> if [[ "$app" == "Calendar" ]]; then sed -i '/0x7f0/{N;N;N;N; a const/4 p0, 0x1 }' $apkdir/smali/com/miui/calendar/util/A.smali fi works on K20pro premium

mdws2001 commented 4 years ago
1. mac os 要用homebrew安装 `gnu-sed`,系统自带的sed非标准。那条命令是找到`0x7f04`,在其后面第4行加入`const/4 p0, 0x1`

2. 以前这些方法最终也是调c和e,用来判断是不是大陆和大中华区。

3. 用户体验计划可以在日历的设置里关闭

請問Windows版本需要怎樣修改? 把 if [[ "$app" == "Calendar" ]]; then $patchmethod $apkdir/smali/com/miui/calendar/util/LocalizationUtils.smali showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay -isMainlandChina -isGreaterChina || return 1 換成 if [[ "$app" == "Calendar" ]]; then sed -i '/0x7f04/{N;N;N;N; a const/4 p0, 0x1 }' $apkdir/smali/com/miui/calendar/util/A.smali showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay -isMainlandChina -isGreaterChina || return 1 不行哦。 系統會出現sed:unknown option --h,然後結束工作。 盼請指教,謝謝。

if [[ "$app" == "Calendar" ]]; then $patchmethod $apkdir/smali/com/miui/calendar/util/LocalizationUtils.smali \ showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay \ -isMainlandChina -isGreaterChina || return 1 fi -> if [[ "$app" == "Calendar" ]]; then sed -i '/0x7f0/{N;N;N;N; a const/4 p0, 0x1 }' $apkdir/smali/com/miui/calendar/util/A.smali fi works on K20pro premium

Thanks for the help. It's OK for my Mi9 @11.0.9.0

Peyet commented 4 years ago

首先感谢大佬辛苦付出 今天处理K20Pro的 MIUI11 11.2 20.3.27,发现日历无法打补丁,打开目录发现都是混淆后的名字

--> decompiling Calendar...
----> Ignore patch: "LocalizationUtils.smali" not found

不知有何其它方式处理

谢谢

您好 , 我的miui欧洲版本和您的相同 , 遇到了一些问题 , 希望您可以解答一下 . 提前谢过 ~~ 在使用本项目的 mipay-extract-9.3.21 提取 mipay 的过程中没有提取成功 ( 可能我使用的国内miui版本不正确 , V11.0.2.0.QFKCNXM和 V11.0.7.0.QFKCNXM 均失败了) , 方便说一下您使用的那个国内版本吗? 期待您的回复 !

Peyet commented 4 years ago

首先感谢大佬辛苦付出 今天处理K20Pro的 MIUI11 11.2 20.3.27,发现日历无法打补丁,打开目录发现都是混淆后的名字

--> decompiling Calendar...
----> Ignore patch: "LocalizationUtils.smali" not found

不知有何其它方式处理 谢谢

您好 , 我的miui欧洲版本和您的相同 , 遇到了一些问题 , 希望您可以解答一下 . 提前谢过 ~~ 在使用本项目的 mipay-extract-9.3.21 提取 mipay 的过程中没有提取成功 ( 可能我使用的国内miui版本不正确 , V11.0.2.0.QFKCNXM和 V11.0.7.0.QFKCNXM 均失败了) , 方便说一下您使用的那个国内版本吗? 期待您的回复 !

问题已解决。原因是第一次提取生成flashable zip的时间较长,误以为已经完成提取,关闭了进程,第二次提取会报错缺失文件。遇到相似问题的请耐心等待。 提取的zip文件通过twrp安装会出现error:1 (MIUI11 )。我的解决办法是root后使用文件管理器将提取后的解压文件复制到system/app,重启手机即可完成安装。

MonwF commented 4 years ago

首先感谢大佬辛苦付出 今天处理K20Pro的 MIUI11 11.2 20.3.27,发现日历无法打补丁,打开目录发现都是混淆后的名字

--> decompiling Calendar...
----> Ignore patch: "LocalizationUtils.smali" not found

不知有何其它方式处理 谢谢

您好 , 我的miui欧洲版本和您的相同 , 遇到了一些问题 , 希望您可以解答一下 . 提前谢过 ~~ 在使用本项目的 mipay-extract-9.3.21 提取 mipay 的过程中没有提取成功 ( 可能我使用的国内miui版本不正确 , V11.0.2.0.QFKCNXM和 V11.0.7.0.QFKCNXM 均失败了) , 方便说一下您使用的那个国内版本吗? 期待您的回复 !

问题已解决。原因是第一次提取生成flashable zip的时间较长,误以为已经完成提取,关闭了进程,第二次提取会报错缺失文件。遇到相似问题的请耐心等待。 提取的zip文件通过twrp安装会出现error:1 (MIUI11 )。我的解决办法是root后使用文件管理器将提取后的解压文件复制到system/app,重启手机即可完成安装。

不需要解压复制 在twrp的挂载里挂载下system分区 再刷就行

mdws2001 commented 4 years ago
1. mac os 要用homebrew安装 `gnu-sed`,系统自带的sed非标准。那条命令是找到`0x7f04`,在其后面第4行加入`const/4 p0, 0x1`

2. 以前这些方法最终也是调c和e,用来判断是不是大陆和大中华区。

3. 用户体验计划可以在日历的设置里关闭

請問Windows版本需要怎樣修改? 把 if [[ "$app" == "Calendar" ]]; then $patchmethod $apkdir/smali/com/miui/calendar/util/LocalizationUtils.smali showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay -isMainlandChina -isGreaterChina || return 1 換成 if [[ "$app" == "Calendar" ]]; then sed -i '/0x7f04/{N;N;N;N; a const/4 p0, 0x1 }' $apkdir/smali/com/miui/calendar/util/A.smali showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay -isMainlandChina -isGreaterChina || return 1 不行哦。 系統會出現sed:unknown option --h,然後結束工作。 盼請指教,謝謝。

if [[ "$app" == "Calendar" ]]; then $patchmethod $apkdir/smali/com/miui/calendar/util/LocalizationUtils.smali \ showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay \ -isMainlandChina -isGreaterChina || return 1 fi -> if [[ "$app" == "Calendar" ]]; then sed -i '/0x7f0/{N;N;N;N; a const/4 p0, 0x1 }' $apkdir/smali/com/miui/calendar/util/A.smali fi works on K20pro premium

It's not work in MIUI12 again. 還有辦法修正嗎?謝謝。

QSCFTHMKO commented 4 years ago
1. mac os 要用homebrew安装 `gnu-sed`,系统自带的sed非标准。那条命令是找到`0x7f04`,在其后面第4行加入`const/4 p0, 0x1`

2. 以前这些方法最终也是调c和e,用来判断是不是大陆和大中华区。

3. 用户体验计划可以在日历的设置里关闭

請問Windows版本需要怎樣修改? 把 if [[ "$app" == "Calendar" ]]; then $patchmethod $apkdir/smali/com/miui/calendar/util/LocalizationUtils.smali showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay -isMainlandChina -isGreaterChina || return 1 換成 if [[ "$app" == "Calendar" ]]; then sed -i '/0x7f04/{N;N;N;N; a const/4 p0, 0x1 }' $apkdir/smali/com/miui/calendar/util/A.smali showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay -isMainlandChina -isGreaterChina || return 1 不行哦。 系統會出現sed:unknown option --h,然後結束工作。 盼請指教,謝謝。

if [[ "$app" == "Calendar" ]]; then $patchmethod $apkdir/smali/com/miui/calendar/util/LocalizationUtils.smali \ showsDayDiff showsLunarDate showsWidgetHoliday -showsWorkFreeDay \ -isMainlandChina -isGreaterChina || return 1 fi -> if [[ "$app" == "Calendar" ]]; then sed -i '/0x7f0/{N;N;N;N; a const/4 p0, 0x1 }' $apkdir/smali/com/miui/calendar/util/A.smali fi works on K20pro premium

It's not work in MIUI12 again. 還有辦法修正嗎?謝謝。

works in K20pro premium 07.16 version,not work in 08.13 我也不知道咋办了xD 召唤 @MonwF

MonwF commented 4 years ago
works in K20pro premium 07.16 version,not work in 08.13
我也不知道咋办了xD
召唤 @MonwF

@QSCFTHMKO 这次是smali/com/miui/calendar/util/A.smali的路径变了,下次不知道啥原因了。我现在是这样修改的,直接查找文件路径

lunarSmali=$(grep SIMPLIFIED_CHINESE -l $apkdir/smali/com/miui/calendar/util/*.smali)
sed -i '/0x7f0/{N;N;N;N;
    a const/4 p0, 0x1
}' $lunarSmali
xspeed1989 commented 4 years ago
works in K20pro premium 07.16 version,not work in 08.13
我也不知道咋办了xD
召唤 @MonwF

@QSCFTHMKO 这次是smali/com/miui/calendar/util/A.smali的路径变了,下次不知道啥原因了。我现在是这样修改的,直接查找文件路径

lunarSmali=$(grep SIMPLIFIED_CHINESE -l $apkdir/smali/com/miui/calendar/util/*.smali)
sed -i '/0x7f0/{N;N;N;N;
    a const/4 p0, 0x1
}' $lunarSmali

@MonwF 大佬 用这个有效 然后弱弱的问一句,负一屏那个点设置崩溃,有没啥解决办法

mdws2001 commented 4 years ago
works in K20pro premium 07.16 version,not work in 08.13
我也不知道咋办了xD
召唤 @MonwF

@QSCFTHMKO 这次是smali/com/miui/calendar/util/A.smali的路径变了,下次不知道啥原因了。我现在是这样修改的,直接查找文件路径

lunarSmali=$(grep SIMPLIFIED_CHINESE -l $apkdir/smali/com/miui/calendar/util/*.smali)
sed -i '/0x7f0/{N;N;N;N;
    a const/4 p0, 0x1
}' $lunarSmali

厲害,又可以繼續使用了。 十分感謝。

kooritea commented 4 years ago

从20.8.20开始LocalizationUtils.smali的混淆名称变成了B.smail

sed -i '/0x7f0/{N;N;N;N;
a  const/4 p0, 0x1
}' $apkdir/smali/com/miui/calendar/util/B.smali
MintMana commented 4 years ago

似乎日历是显示不了节假日调休情况的,各位都是这样么

MonwF commented 4 years ago

似乎日历是显示不了节假日调休情况的,各位都是这样么

可以正常显示调休 9se miui 12

MintMana commented 4 years ago

似乎日历是显示不了节假日调休情况的,各位都是这样么

可以正常显示调休 9se miui 12

感谢回复,看来确实是mix2s的特殊问题,其他型号应该大部分没有 已经找到workaround了,不过原理不明 https://github.com/linusyang92/mipay-extract/issues/66#issuecomment-699603489

kooritea commented 4 years ago

20.11.5资源id已改为0x7f05xxx,文件改为$apkdir/smali/com/miui/calendar/util/D.smali

sed -i '/0x7f05/{N;N;N;N;
a  const/4 p0, 0x1
}' $apkdir/smali/com/miui/calendar/util/D.smali