Skip to content
This repository has been archived by the owner on Nov 26, 2020. It is now read-only.

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

Open
niphor opened this issue Apr 4, 2020 · 20 comments
Open

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

niphor opened this issue Apr 4, 2020 · 20 comments

Comments

@niphor
Copy link

niphor commented Apr 4, 2020

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

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

不知有何其它方式处理

谢谢

@MonwF
Copy link

MonwF commented Apr 13, 2020

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

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

@niphor
Copy link
Author

niphor commented Apr 14, 2020

@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
Copy link

MonwF commented Apr 14, 2020

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

@niphor
Copy link
Author

niphor commented Apr 14, 2020

好的,我回去试试看

谢谢大佬耐心解释

@mdws2001
Copy link

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
Copy link

QSCFTHMKO commented May 31, 2020

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
Copy link

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
Copy link

Peyet commented Jun 28, 2020

首先感谢大佬辛苦付出
今天处理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
Copy link

Peyet commented Jun 28, 2020

首先感谢大佬辛苦付出
今天处理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
Copy link

MonwF commented Jun 29, 2020

首先感谢大佬辛苦付出
今天处理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
Copy link

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
Copy link

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
Copy link

MonwF commented Aug 17, 2020

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
Copy link

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
Copy link

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
Copy link

从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
Copy link

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

@MonwF
Copy link

MonwF commented Sep 28, 2020

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

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

@MintMana
Copy link

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

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

感谢回复,看来确实是mix2s的特殊问题,其他型号应该大部分没有
已经找到workaround了,不过原理不明
#66 (comment)

@kooritea
Copy link

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants