高级反调试技术总结

高级反调试

真正用于实际的软件保护的反调试技术, 对于破解有着高难度的挑战. 现在总结一下高级反调试技术.
对于应用了大量垃圾代码, 条件分支语句, 循环语句, 加密/解密代码, 以及调用书(Call-tree), 要逆向这样的程序都是一种肉体和精神的双重受苦之旅, 再加上动态反调试的干扰, 甚至可以直接将军想要破解这个软件的逆向分析者. 对于经验丰富的玩家来说, 要完美分析一个保护器也是极其艰巨的挑战. (水了一些废话

所以来看看这些让人受苦的天灾级武器(bushi

垃圾代码

基本思想很朴素, 就是向代码中添加大量不会影响程序效果的垃圾代码, 冲散原程序结构, 达到混淆的目的. 更变态的是在垃圾代码中夹杂实际有用的代码和反调试代码, 可以让调试变得极端困难.

扰乱代码对齐

有意添加一些字节代码, 但是实际程序中不会用到, 却可以打乱反汇编器的结果, 让机器码不能正常识别为汇编指令, 达到扰乱目的. 如果没有完全掌握代码, 就直接调试, 很可能遭到其他反调试技术的拦截. 所以扰乱代码对齐(Break Code Alignment)是很令人苦恼的一种反调试技术.

垃圾代码结合扰乱代码对齐可以产生混乱代码, 可以进一步增加代码分析难度.

加密/解密

压缩器和保护器常用技术, 用来隐藏代码和数据. 代码和数据只有在运行过程中才被解码出来, 能够正常运行. 当然如果只是单纯加密/解密, 转储即可拿到解密之后的代码数据, 但是应用了反转储技术, 再解密之后, 一段代码运行完毕会再次被加密, 这样转储出来的二进制文件依然处于加密状态.

同样加密/解密也能和垃圾代码, 扰乱代码对齐打出Combo, 再增加分析难度.

另外还有一种特殊技法, 代码重组, 采用实时组合代码执行的技术, 指令是在运行过程中动态生成的. 而且在调试时下软断点, 会出现运行时错误, 因为修改了一个字节以后动态生成的指令往往是错误的.
在这里插入图片描述在这里插入图片描述

Stolen Bytes(Remove OEP)

将部分OEP代码转移到压缩器/保护器创建的内存区域运行. 可以让转储进程的结果OEP代码是缺失的, 使得转储的文件不能运行. 另外应用Stolen Bytes之后的文件再用压缩器/保护器进行加密, 会大大增加分析难度, 单纯脱壳也得不到OEP代码, 会造成很大的混乱效果.

API重定向

逆向分析者通常采用API出下断点, 断到API之后查看栈的返回地址, 就知道哪个函数调用了这个API, 逆向回去找到这个函数, 能很高效地理清程序流程, 找到关键函数.
API重定向反调试技术, 就是防御这种分析思路的技术, 先将所有(或者用到的部分)API复制到另一个内存区域, 然后将源代码的API调用地址重定向到复制出来的副本API地址处, 这样调试者在原API地址处下断点也无济于事, 因为程序不走原API地址执行. 同时支持反转储功能.

(不仅如此, 还可以联合使用垃圾代码, 扰乱代码对齐, 加密/解密等技术, 上个5-6重保护.


多态代码

比如ASProtect的混淆代码生成器, 每次都能生成不同垃圾代码. 而具有相同运行结果但形态不一的代码就称为多态代码.

Debug Blocker(Self Debugging)

基本思想是用调试模式运行自身程序, 这样别的调试器就无法调试正在被调试的进程. Debug Blocker技术使自我创建技术的演进版本, 自我创建技术中, 父进程负责创建子进程, 但是由子进程负责运行实际代码, 所以调试器如果调试父进程则得不到OEP, 但是如果调试子进程就能找到OEP代码.
Debug Blocker技术就是弥补了这一缺点, 即使是子进程也无法调试. 对比SEH机制的反调试和Debug Blocker反调试.
在这里插入图片描述
SEH反调试是在同一内存空间处理异常, 但是Debug Blocker是在调试进程的内存空间处理被调试进程的异常, 所以其他调试器不能附加目标进程, 要附加目标进程就先得断开与父进程的联系, 但是断开之后子进程也不能继续运行, 这就是Debug Blocker的精(bian)妙(tai)之处.

另外有进阶版本的Debug Blocker, Nanomite技术, 将被调试进程的所有条件跳转指令修改为INT3(软件断点0xCC), 或者触发异常的指令, 然后会转移到调试者(父进程)执行, 调试进程里有条件跳转指令的表格, 记录所有跳转地址, 取出需要的地址再传给被调试进程, 然后继续指令执行. 所以要调试Nanomite保护的程序, 要恢复出源程序, 就得编程自动化实现, 是极有挑战性的问题.





总结

反调试技术是不断发展的, 同样破解得技术也是不断发展的, 作为逆向分析的高难度问题, 保护器的调试是一个不错的挑战, 同时应用了多种高级反调试技术的保护器, 是对逆向分析技术的真正考验, 当积累了足够的经验, 有必要挑战一下保护器的逆向分析, 可以更进一步提高逆向分析水平.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值