反反调试(IDA调试)
Step1 找崩点
在JNI_OnLoad下断点,单步调试到某崩点,分析一下。
Step2 patch byte code
方法1.单次运行时更改
附加so在运行的app上,此时代码在内存中,用IDA Hex View修改该处byte指令,然后"apply chages F2",即可在此次运行时改变其逻辑。[方便快捷;适用于单次调试或试水]
方法2.永久性更改
1. 修改获取dif文件 - 同上用用IDA Hex View修改该处byte指令,然后"apply chages F2", 再 File -> Produce file -> Create DIF file, 保存xxx.dif文件。它描述了哪里做了修改。此时so文件没有被修改。
2. 修改保存so文件 -```ida_patcher -i xxx.so -p xxx.dif```。这样就永久性保存了该修改获得没有反调试策略的so文件。
3. 重打包apk并重签名 - ```apktool -d xxx.apk```解压.apk包,替换so文件删除之前签名```META-INF```,再```apktool -b xxx/```重新打包,在xxx/dist/目录下, ```apksigner sign lcfan.jks xxx.apk```重新签名。
* 不要用apk->zip的解压方式,不然.xml会崩,adb install 时会爆出错误"Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: Failed to parse /data/app/xxxxx.tmp/base.apk: AndroidManifest.xml]"
* apktool -d 解压apk包后,有些apk的xml文件依然会崩,因为厂家做了加固。xml二进制文件可用 vim -b AndroidManifest.xml :%!xxd 查看,手工dump。
网友评论