【学习记录】各种反调试手段总结

为了躲避杀软了检测,病毒会使用各种骚气的手段来隐藏自身

  • 反调试
  • 反虚拟机
    android java层

常见的Android native反调试方法有以下几种。
1、直接调用ptrace(PTRACE_TRACEME, 0, 0, 0),参考Android Native反调试。
2、根据上面说的/proc/$pid/status中TracerPid行显示调试程序的pid的原理, 可以写一个方法检查下这个值, 如果!=0 (看TracerPid 有没有进程附加在该进程上就退出程序)。参考Android Native反调试,用JNI实现APK的反调试。
3、检查代码执行的间隔时间,参考Android应用方法隐藏及反调试技术浅析的0×03反调试初探。
4、检测手机上的一些硬件信息,判断是否在调试器中,参考Android应用方法隐藏及反调试技术浅析的0×03反调试初探。

1.ptrace(PTRACE_TRACEME, 0, 0, 0);
但是这种方法, 用反编译打开, 很容易就找到调用ptrace的地方, 不知道修改下汇编指令(比如改为nilnil), 就跳过这个调用了
2.暗桩
这个就要一步一步跟踪然后拔桩。

对抗手段:
把TracerPid字段的值改成0
找到反调式的代码NOP之,可以修改为00 00 00 00,也可以修改为00 00 A0 E1。
或者修改R0寄存器的内容,跳过反调试检测

遇到的几种比较骚气的

  • 1.拿到设备信息,检测里面是否有某些软件,否则环境不运行
  • 2.它通过向远程地址发出某种认证请求,返回地址,ip等信息。如果检测到是特定的组织机构名称与以下JSON文件中的任何机构字符串匹配,恶意软件将发生异常并停止运行。当然,上述列表中的机构名称在代码中是经过混淆的:

http://bbs.pediy.com/showthread.php?t=119969
看雪泉哥总结检测虚拟机的技术:

  • 方法一:通过执行特权指令来检测虚拟机
  • 方法二:利用IDT基址检测虚拟机
  • 方法三:利用LDT和GDT的检测方法
  • 方法四:基于STR的检测方法
  • 方法五:基于注册表检测虚拟机
  • 方法六:基于时间差的检测方式
  • 方法七:利用虚拟硬件指纹检测虚拟机

国外SANS安全组织的研究人员总结出当前各种虚拟机检测手段不外乎以下四类:
● 搜索虚拟环境中的进程,文件系统,注册表;
● 搜索虚拟环境中的内存
● 搜索虚拟环境中的特定虚拟硬件
● 搜索虚拟环境中的特定处理器指令和功能
因为现代计算系统大多是由文件系统,内存,处理器及各种硬件组件构成的,上面提到的四种检测手段均包含了这些因素。纵观前面各种检测方法,也均在此四类当中。除此之外,也有人提出通过网络来检测虚拟机,比如搜索ICMP和TCP数据通讯的时间差异,IP ID数据包差异以及数据包中的异常头信息等等。随着技术研究的深入,相信会有更多的检测手段出现,与此同时,虚拟机厂商也会不断进化它们的产品,以增加anti-vmware的难度,这不也正是一场永无休止的无烟战争!

posted @ 2016-09-30 14:59  Tesi1a  阅读(253)  评论(0编辑  收藏  举报