给大家介绍一下反调试汇总的原理及实现方式,以及各种反调试的扩展
反调试汇总:
针对于一些大型apk 反调试不一定是让你不能调试 -> 让你得到一个错误的结果
逆向某一个算法 传参 中间会根据一些数据运算 如果检测到反调试 计算错误
**1.IDA调试端口检测**
监测android_server文件端口信息 默认的23946(5D8A)
更改端口 31927 -> 过掉此反调试
**2.调试器进程名检测**
监测android_server gdbserver gdb等进程
通过ps命令来监测有没有相应的进程信息 android_server as
更改android_server文件名 -> 过掉反调试
**3.父进程名检测**
app应用的进程都是由zygote fork 而来 也包括系统应用
vs远程调试 用可执行文件加载so:父进程名为gdbserver
**4.自身进程名检测**
多用于单独调用so 包括 apk来调用so 可执行文件调用so
apk来调用so -> 包名与原apk的包名一致
LoadLibrary()函数加载so文件 仅有这种情况 除非它是自定义linker加载so文件(360壳)
**5.apk线程数量检测**
比如说:我们写了一个demo apk 来调用so文件(要调试的apk比较大 环境比较复杂 调试的时候容易跑蹦)
demo apk线程数量一般 不是很多,相较于原apk
找到检测点 nop掉
**6.apk进程fd文件检测**
类似于apk线程数量检测
/proc/pid/fd/文件个数差异
检测apk是否以debug模式启动 即使进行ida调试了 程序的大部分功能依然没有运行 所以fd文件较正常偏少
找到检测点 nop掉
**7.安卓系统自带调试检测函数**
android.os