-
-
[原创]用IDAPython实现的反反调试小脚本
-
发表于:
2018-5-24 18:19
15221
-
加一个github地址DBGHider,里面加了inline hook。
许多人喜欢用IDA进行静态分析,用OllyDbg进行动态分析,似乎很少人喜欢使用IDA进行调试。然而我这个菜鸟不会用OD,所以没有体会它的强大之处,我更喜欢用IDA的调试器。
IDA的调试器功能也很强大。
由于IDA 7.x更改的SDK的API,就带来了一个很尴尬的事情,没有使用于IDA 7.x的反反调试插件,所以利用空闲时间写了一个小脚本,实现了对部分反调试方法的绕过。
就我个人的理解,反调试的方法可大致分为以下3类:
在IDAPython中,可以通过idaapi.DBG_Hooks类挂钩调试器的行为,进行一些操作。利用DBG_Hooks可以挂钩程序的开始,退出,加载dll,卸载dll等操作。具体挂钩点可以参考下面的Python脚本,这个脚本取自https://github.com/idapython/src。
脚本实现的方式是,对于PEB->BeingDebugged类的反调试方法,可以利用dbg_process_start函数,在进程建立之初就清楚掉BeingDebugged,也一举解决了NtGlobalFlag等标志。对于函数调用类反调试,在程序的入口点处,给相应函数的入口下断点来Hook函数,更改函数行为。对于触发异常类反调试,不用脚本处理,更改调试器的设置即可。
目前实现的功能有:
由于IDA的改动,此脚本只适用于IDA 7.x
实现的脚本如下:
使用了ScyllaHide中的ScyllaTest_x86.exe
和看雪.TSRC 2017CTF秋季赛中的第三题CrackMe
做了测试,结果如下。
ScyllaTest_x86.exe
CrackMe,其特点是用了很多反调试手段,但是由于作者的失误,导致出现了多解,并且其中一个解还会在调试过程中以明文的形式作为memcmp的参数。
测试Crackme时对异常的设置
反调试的方法很多,一个脚本肯定是解决不完的,只有搞清楚了反调试原理才能更好的对付反调试。写这个小脚本,是为了学习windows平台下各种反调试技术,同时学习一下IDAPython
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-6-19 15:48
被iweizime编辑
,原因: