您的位置:首页 > 其它

171211 逆向-高级反调试技术

2017-12-13 00:52 330 查看
1625-5 王子昂 总结《2017年12月11日》 【连续第437天总结】

A. 《逆向工程核心原理》-高级反调试技术

B.

花指令

这种反调的难度可高可低,不过对于只靠F5的萌新们都是无解的

简单的只是在代码块之间放置一些垃圾代码,通过jmp跳过,使得反汇编不正确,进而影响F5的反编译

只需要清除干扰指令,或者动态调试跟一下就能很轻松的解决

复杂的则会随机插入大量的花指令,与正确代码混杂在一起,很难辨识

基本上只能靠动态调试来理清执行顺序,再进一步分析了

加壳

保护壳这个东西很恐怖(:з」∠)只会ESP这种级别的我就不多说了

(其实是没见识过多少壳,不敢碰。看完这本去读《加密与解密》和52的教程再说吧)

Stolen Bytes(Remove OEP)

这个反调方法是第一次见…

简单来说就是将OEP的部分代码转移到另一个地方,使得很难Dump;另一方面对OEP的查找也会变得困难,陷入懵逼的境地

(当然知道了这种方法的存在也许会好点儿……吧)

OEP被转移的代码有时还会被处理,例如加花,动态解密,甚至运行完就删除……

安全人员的操作真是骚的不行OTZ

API重定向

这个也第一次见

由于逆向人员可以直接将断点下在系统Dll中,从而断到关键API

于是安全人员就想出了针对其的方法—将APIdump出来并修改IAT,使得不会再调用系统Dll的API

(其实就相当于重写个系统库,不过动态dump的方法会更加难以追踪)

这种方法看起来挺简单的,但是能破解很多技巧……

我就想起了之前识别VEH的方法,目前仅有对该API下断来判断……

解决方法书上没提,感觉可以参考反API HOOK的技术,提前对IAT或者系统Dll的访问进行监控?

Debug Blocker(Self Debugging)

这种反调方法我觉得是最恐怖的…是自我创建技术的演进形式

自我创建技术就是父进程重新开启一个子进程,在其中进行关键部分的执行,父进程可以修改子进程的内存(代码)、EP地址等等

自我创建的破法是直接附加子进程,然后参考父进程的代码来变换代码,进而推出流程

Debug Blocker对这一点进行了补足,直接设置父进程对子进程进行调试。由于子进程已经处于被调试的状态了,原则上我们的调试器就无法附加其上了。(书中后文有讲解解决办法,但我还没看到)

另一方面父进程可以接受子进程的异常,来控制子进程的执行流程

之前“JarvisOJ-软件密码破解(2)”的题目就是DebugBlocker,不过子进程的开启方法就是添加参数,而且父进程所做的修改很少,所以我很容易的调试了子进程,并仿造父进程改变了子进程的内存

Debug Blocker还有一个变种:“Nanomite”

它会查找子进程内部所有的条件跳转指令都改为Int 3或其他触发异常的代码,然后在父进程中维护一个跳转表。将每次跳转都通过父进程的异常处理来执行,调试将会变得极为困难。

解法是通过自动化脚本将子进程恢复为原样,对脚本编写能力有一定的要求

C. 明日计划

加密与解密 理论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: