检测调试器以及虚拟机方法汇总(不断更新,主要针对android)

第一类:环境监测类

1)监测设备温度

2)查看相应进程、文件

3)查看相应软件(virtualbox)

4)监测当前内存(内存过低),系统(版本过低),sim卡信息,cpu核数太少

5)当前电量(基本上不变)

6)虚拟机无法处理的一些特殊指令

7)查看环境(临时文件多不多)

8)延迟执行

9)检测原本的so是否包含write权限

第二类:监测调试行为

1)监测执行时间

2)查看父进程 tracepid是否为0以及名称是否为zygote

3)新建子进程,查看子进程tracepid是否为0

4)针对脱壳,监控mem函数等,(通过inotify函数来实现)

5)直接监控进程文件是否为调试状态,包括stat为t,tracepid为0

6)利用IDA缺陷:无法智能切换指令版本,如arm到thumb,无法识别动态生成的跳转

7)利用IDA特性:先截获信号

8)监控IDA的端口23946,以及进程名 android_server

9) 单步调试陷阱,自己设置断点并注册相应异常处理函数,直接运行没问题,但是调试器接管时出现问题

10)代码搜索:搜索某块代码是否存在断点,或者搜索某块代码的哈希是否被改变,或者搜索重要函数的开头,看是否被inline hook

11)ptrace监测:一个进程只能被一个进程调试,自己给自己ptrace看是否成功,失败则说明已经有一个调试了

12)类似windows的是否调试api,直接调用看结果

13)so监测:当直接调用某个so时,当前的fd数量,线程数量以及apk进程名通常都是不对的

14)通过/proc/net/tcp文件的本地套接字的反调试

15)检测调用栈

16)扫描GOT/PLT看偏移是否还在自身so中

发布了40 篇原创文章 · 获赞 22 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/liutianheng654/article/details/103988981
今日推荐