说明:对加固APP进行分析和破解,对发现新版本提示关掉
1、先对APP窗口类行进HOOK,确定窗口提示用的是那个类。
android hooking watch class android.app.AlertDialog
2、发现一个非常明显的函数 setCancelable
objection -g com.hello.qqc explore -s "android.app.Dialog.setCancelable --dump-args --dump-backtrace --dump-return"
3、接着发现另外函数进行HOOK
objection -g com.hello.qqc explore -s "android hooking watch class_method cn.net.tokyo.ccg.ui.fragment.dialog.UpdateDialogFragment --dump-args --dump-backtrace --dump-return"
4、到此追的差不多地方了,要去反编译去看看源代码,由于是加固的APP先用Frida-dexdump进行脱壳
frida-dexdump -U -f com.fantua*********ujbk
5、在所有dex文件中搜索UpdateDialogFragment 内容 最后查出在dessess03.dex中
grep -ril "UpdateDialogFragment" ./*.dex
6、用 jadx 工具打开这个 dessess03.dex 文件,搜索这个UpdateDialogFragment 这个类
7、通过再次对接着 UpdateDialogFragment 类行进hook 重新启动弹出升级窗口发现下面函数
objection -g com.hello.qqc explore -s "android hooking watch class_method cn.net.tokyo.ccg.ui.fragment.dialog.UpdateDialogFragment.b --dump-args --dump-backtrace --dump-return"
8、再次跟踪 UpdateDialogFragment.a 函数发现这个函数 判断了版本就是这了
9、然后更改重新打包。
9.1、重新打包时应该使用脱壳后原始APP的dex替换掉原来的壳dex
解决:需要在使用 apktool 反编译时选择不反编译dex文件并删除壳的dex, apktool 的 -s 参数就提供了不反编译APK中的dex文件的功能。
apktool d com.xxxxsssaae.apk -s
在反编译完成后,删除原始的classes.dex并且将脱壳后的dex文件按照文件大小依次命名并存储到壳的dex所在的目录
9.2、APP在加固后的入口点变成了壳的入口点,因此在重新打包之后还需要修改 AndroidMainfest.xml的入口类
解决:修改APP的入口类,因此我们需要jadx重新打开包含关键函数的dex文件,并搜索 extends Application 的代码,最终排除第三方库和系统相关的代码,剩下cn.net.tokyo.ccg.base.App 类,在定位到后,将反编译结果目录下AndroidManifest.xml 清单文件内
然后使用jarsigner签名工具生成一个签名文件,并且使用生成的签名文件对打包好的app 进行签名。
keytool -genkey -alias abc.keystore -keyalg RSA -validity 2000 -keystore abc.keystore
jarsigner -verbose -keystore abc.keystore -signedjar zhibo_patch.apk zhibo.apk abc.keystore