学OD也有两周了,对一些功能有点学习小结。
1、INT3断点
其实,关于INT3断点了解不多,知道机器码为CC,也知道一般调试器断点是采用这种形式。对于OD来讲,就是这样的。所以,对OD的反调试,可以从函数入口地址的机器指令入手。比如如下代码:
FARPROC;
BYTE Mark = 0;
(FARPROC&) Uaddr = GetProcAddressGetProcAddress(LoadLibrary("user32.dll"), "MessageBoxA");
Mark = *((BYTE*)Uaddr);
if(Mark == 0xcc)
return TRUE;
不过这样也让OD人容易反anti,就是在函数内部设断点。感觉这应该成为一个习惯吧。
2、F4的运行到光标功能,原来都是用硬件断点实现的。利用中断后自动删除,形成一次性硬件断点。不知道VS之类的是不是这样呢。
3、VC的可执行文件是存放在代码段里面的,既是代码资源吧(.text)。所以,之前我自己搞条件断点实现消息断点,原理应该是先通过判断[ESP+4]==WM_LBUTTONUP,来到系统底层截获,然后通过对.text段设置访问断点,可以直接运行到我们的程序段。不过对于如何从消息循环中走出到我们的按钮事件响应代码中,貌似还需要一步步走出来。
4、对于条件断点的使用,字符串的判断命令:bp CreatFileA, [STRING[esp + 4]] == "C:\\betabin.txt"。
5、条件记录断点,就是可以记录信息吧。直到某一时刻。Shift+F4。
6、用Trace功能来反方向分析。