反调试技术

  • 静态反调试
  • 特点:在调试开始阻拦调试者
  • PEBBeginDebug:调试标记位
    Ldr:内存状态
    Heap(Flag,Force Flags):堆状态
    NtGlobalFlag:内核全局标记
    TEBStaticUnicodeString:静态缓冲区
    原始APINtQueryInformation()
    ProcessDebugPort(0x07):获取调试端口
    ProcessDebugObjectHandle(0x1E):获取调试句柄
    ProcessDebugFlag(0x1F):获取调试标记
    NtQuerySystemInformation()
    SystemKernelDebuggerInformation(0x23):获取系统调试状态(双机)
    NtQueryObject():遍历系统内核对象
    攻击调试器分离调试器
    NtSetInfomationThread()
    ThreadHideFromDebugger(0x11)
    打开进程检查SeDebugPrivilege:检查进程是否具有调试权限
    TLS回调函数坑爹
    普通API父进程检查
    窗口名检查
    进程名遍历
    文件名及文件路径检查
    注册表检查
  • 动态反调试
  • 特点:调试过程中阻拦调试者,在调试中频繁触发
  • SEH异常
    断点
    SetUnhandleedExceptionFilter()
    时间检查RDTSC:汇编,读取时间戳计时器内容
    单步检查F7
    补丁检查0xCC扫描程序内0xCC,检查INT3
    Hash扫描:扫描代码段Hash值,如不对则说明运行时被修改或调试
    API断点扫描:扫描API的第一个字节是否为0xCC,是则说明被调试
    反反汇编指令截断:将指令截断,致反汇编引擎后续指令解析错误
    指令混淆:将敏感指令拆分成多块或若干不相干的指令进行迷惑
    指令膨胀:将一条指令膨胀为数十条,但行为与其一致
    代码乱序:将原有代码在内存中的顺序打乱,用jmp连接,干扰调试者
    偷取代码偷取OEP代码:将OEP代码移动到其他地方加密
    偷取API代码:将API的部分起始代码移动到其他地方
    分页保护运行时保护分页:修改代码及数据段保护属性干扰分析
    压缩壳:配合OEP加密可以使调试者很难顺利逆向
    加密壳:添加各种反调试手段干扰调试者分析
    虚拟机API虚拟机:将部分常用API放到虚拟机中模拟执行
    指令级虚拟机:可以将任意一段指令放到虚拟机中保护起来





posted @ 2017-11-15 17:05  B166ER_Isaac  阅读(501)  评论(0编辑  收藏  举报