OllyDebug调试技巧(三)
Chinese:
1、GetModuleHandleA这个api用于获取程序的ImageBase(基地址),可以从PEInfo获取。
2、MessageBox有一个参数是OwnerHandle(父窗口句柄),如果为0则表示桌面的句柄,我们可以通过将这个值改为一个不存在的句柄,例如1,这样这个MessageBox就不会显示出来了。
3、可以通过查找PE结构里面的程序入口,然后只要修改这个程序入口的地址,那么就可以跳过一些不必要的指令了。
4、如果想让一些指令不执行,可以通过jmp直接跳到后面的地址,也可以将这些指令用nop填充,但是要注意不能损坏正常的程序运行逻辑。
5、有些文件篡改了PE头的信息,虽然程序可以正常运行,但是却使得程序无法被OllyDebug反调试,这个时候需要去查看PE文件头的信息,找到被篡改的值将其修复。
6、SEH(Structured Exception Handling),结构化异常处理。SEH是Windows操作系统提供的功能,和开发工具无关。
7、异常也可以当作是一种消息,应用程序发生异常时就触发了该消息并告知系统,接收后同样会找它的回调函数,也就是我们的异常处理例程。
8、如果程序中没有做异常处理,系统也不会置之不理,它将弹出常见的错误框,然后结束该程序。
9、在OD中,也可以SHIFT+F9来忽略异常,也可在设置里面设置忽略的异常Code。
10、在OD中先暂停,使用ALT+F9会自动返回到用户程序的领空。
11、Ctrl+N可以查看输入表,可以通过右键下api断点。
12、右键->查找->所有参考文本字符串 可以查询字符串,记得从头开始查询,然后双击查询到的字符串即可跳到对应的地址。
13、右键->查找参考->选定命令 可以跟踪这条指令。
14、右键->查找->所有模块中的调用 可以用来查询api