如何绕过反调试技术——学习回顾(2)
之前总结了一些常见的反调试技术,反调试技术是程序作者用来保护程序不被调试,以此来保护自己的秘密,但是逆行分析人员也有自己的**反调试的方法,就是“反反调试”。
记录学习过程,以待后来温习。
反调试技术的总结:https://blog.****.net/weixin_43742894/article/details/105278690
主要是通过学习《恶意代码分析实战》这本书的课后题,来进行绕过反调试的学习。
0x00 实验要求
本次做的实验是实验二,实验目标如下:
0x01 实验工具:
IDA Pro
OllyDbg
CFF
Spy++
0x02 实验过程
第一步:在命令行中运行Lab16-02.exe,需要输入password。
第二步:用猜测的参数输入命令行,提示密码错误,重新输入。
第三步:查找正确的密码。这一问,需要我们进一步深入的分析。
第四步:使用IDA Pro加载Lab16-02.exe,发现在main函数何处使用了strncmp()。
首先用IDA,查看字符串Incorrect password, Try again,找到字符串的位置。这里找到了strncmp函数,同时这里就是进行密码验证的地方。
第五步:使用OD记载程序,查看发现了什么。(注意这里使用的是原版OD,因为现在常用的OD本身就有非常强的反反调试的功能,所以看不出来效果)
发现程序没有达到OEP,而是直接RETN 8
第六步:PE结构的独特之处
使用CFF,可以看到有TLS目录。
第七步:TLS回调函数发生在哪些位置?
在IDA pro使用“crtl+E"可以选择入口点。
进入入口点之后,返现这里有一个检查当前窗口类名的而操作,如果当前窗口类名为OLLYDBG“,就退出程序。
使用自己写的Spy++,可以看到原版的OD的窗口类名就是”OLLYDBG“,所以使用OD加载的使用会直接退出。
第八步:使用了哪一种反调试技术,和如何避免反调试技术。
从上一步,我们知道它使用了Tls回调函数,当中通过识别OD窗口类名来反调试。
那么如何避免反调试呢?
实际上现在常用的OD都已经会隐藏自己的窗口类名了,原版的话,使用插件PhantOM也可以避免反调试。
第九步:禁用反调试后,去找密码
在IDA里找到比较函数的位置,在OD里下断点,打开文件时输入密码,查看栈空间。
因为比较前四个字节,那么密码应该是“bzqr”(因为我提前使用了插件,他就直接避免了BeingDebugged的检测,哈哈哈)
第十步:在cmd中输入刚才的密码
结果是不对的。
第十一步:那种反调试修改了密码,如何避免
比较的密码原字符,有检测BeingDebugged的功能,使用panhtOM插件就可以显示处争取的密码。
正确的密码:
cmd测试:
0x03 总结:
phantOM插件,反反调试永远滴神,哈哈哈。
omg,我的天我忘了之前这个exe还有一个OutputDebugStringA的反调试,使用nop填充过了,这个程序被打过补丁了,就觉得哪里有奇怪。