1.查壳
打开app,弹出强制升级无法取消
用jadx打开apk
搜索包名,可以看到是加壳了
2.使用dexdump进行脱壳
先打开frida-server,打开objextion并加载dexdump插件,输入plugin dexdump dump命令进行脱壳,就把dex文件脱出来了
进入到dex文件的位置,使用grep -ril “MainActivity” * 命令搜索MainActivity再哪个dex,用jadx打开
3.定位到弹窗代码位置
https://www.jianshu.com/p/18e1f518c625
根据弹出框的实现方法进行搜索对应的类
打印出所有的类,然后输入cat .objection/objection.log |grep -i window
进行搜索
由于app启动的时候就把弹窗加载出来了,所以要在没加载前hook类
使用–startup-command可以重启app并进行hook
1 | objection -g com.hello.qqc explore --startup-command "android hooking watch class android.view.Window" |
出现很多的window,无法保证加载的类就是弹窗的
换一种方式 Dialog
搜索dialog有哪些类,出来两个比较可疑的
先对android.app.Dialog
进行hook,看有没有反应
查看文档发现setCancelable是不让返回,所以点后退一直没反应
)
hook这个类android.app.Dialog.setCancelable 查看调用
1 | android hooking watch class_method android.app.Dialog.setCancelable --dump-args --dump-backtrace --dump-return |
用jadx搜索观察cn.net.tokyo.ccg.ui.fragment.dialog.UpdateDialogFragment.onCreateDialog
加载wallbreaker
搜索该类实例
1 | plugin wallbreaker objectsearch cn.net.tokyo.ccg.ui.fragment.dialog.UpdateDialogFragment |
查看该对象的属性
1 | plugin wallbreaker objectdump --fullname 0x74e |
4.查找哪句代码控制弹窗
查看cn.net.tokyo.ccg.ui.fr agment.dialog.UpdateDialogFragment.b
的调用栈
1 | android hooking watch class_method cn.net.tokyo.ccg.ui.fragment.dialog.UpdateDialogFragment.b --dump-args --dump-backtrace --dump-return |
查看对应smail代码,把eqz改为nez
5.把壳脱掉重打包看能不能用
解包,保留dex文件apktool -s d qqc.apk
删除class.dex,把脱下来的dex替换进去
修改dex执行的入口vim AndroidManifest.xml
修改为cn.net.tokyo.ccg.base.App
打包,签名
生成签名,keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000
进行签名,jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar qqc.apk qqc.apk my_alias
安装,看有没有报错,能不能正常使用
6.修改smail文件重打包
找到对应的smail文件
tree -NCfhl |grep -i MainActivity
把 if -eqz改为if-nez
重打包