一、前言
1.本次破解的程序有4,5个,其主要目是初步了解一些反反调试的技术。
2.使用工具:x32dbg
二、破解过程
(一)、ReverseMe.A.exe
1.这个程序很简单, 失败弹窗,提示秘钥无效。 成功弹个窗,提示秘钥有效。
2.载入这个程序,单步F8步进,会看到程序调用了API IsDebuggerPresent()
3.修改方式也十分简单,将api调用处的IsDebuggerPresent()修改为对eax赋值。
4.测试程序,弹窗成功
(二)、ReverseMe.B.exe
1.ReverseMe.B.exe和ReverseMe.A.exe并无太大区别,唯一的区别在于其处理退出的时候实在访问了一个没有写权限的代码段,让程序卡死。
(三).ReverseMe.C.exe
1.ReverseMe.C.exe和ReverseMe.A.exe并无太大区别,唯一的区别在于其判断程序处于调试状态中的时候让程序直接退出。
(四).ReverseMe.D.exe
1.ReverseMe.D.exe和ReverseMe.A.exe并无太大区别,唯一的区别在于其判断程序处于调试状态中的时候让程序jmp 0x01,从而让程序异常。
(五)、Debugger Detected
1.Debugger Detected也是个很简单的反调试器侦测的程序。
2.在x32dbg中载入程序之后,找到它的弹窗函数,进入它的过程函数。
3.在这个函数的入口处下断点,跟随其步进,直到发现这个函数 CreateToolhelp32Snapshot(),熟悉win32的人都知道这个程序是对当前进程空间进行镜像,这个程序应该是遍历了进程空间的所有进程进行比较。
后面的字符串比较函数证明了猜测,此时edi指向的字符串就是"ollydbg",这是个探测ollydbg的程序,所有我使用的x32dbg不会被探测到。
4.因为不会被检测。就不修改它了,要修改它方法也有很多nop掉语句,修改字符串等等。。。
(六)、antisniff.exe
1.因为本程序也是针对ollydbg的程序,所以就只分析下它的检测过程,但是因为问题没有出现也没找到检测代码。。。
三、总结
1.反反调试技术有很多,使用api、逐个查找进程等。
2.检测到了反调试器之后程序控制流能做的也有很多让程序无法运行,比如终止程序,访问不能访问的区域,破坏堆栈等。