0x00
为了避免我们的so文件被动态分析,我们通常在so中加入一些反调试代码,常见的Android native反调试方法有以下几种。
1、直接调用ptrace(PTRACE_TRACEME, 0, 0, 0),参考Android Native反调试。
2、根据上面说的/proc/$pid/status中TracerPid行显示调试程序的pid的原理, 可以写一个方法检查下这个值, 如果!=0就退出程序。参考Android Native反调试,用JNI实现APK的反调试。
3、检查代码执行的间隔时间,参考Android应用方法隐藏及反调试技术浅析的0×03反调试初探。
4、检测手机上的一些硬件信息,判断是否在调试器中,参考Android应用方法隐藏及反调试技术浅析的0×03反调试初探。
0x01
那么我们如何过掉这些反调试呢?
我们以阿里比赛第二题为例,参考安卓动态调试七种武器之孔雀翎 – Ida Pro。
我们讲解两种方式:
1、Ida Patch so
2、Ida动态修改内存数据和寄存器数值
我们首先讲解Ida Patch so,有几处都可以patch。我们从易到难依次讲解。
第一处:
我们在JNI_ONLOAD下断点,如下图:
依次单步执行到BLX R7