笔记
第一章内容不是很多,就是一个很简单的大纲,应该是从第二章号开始的。
1.编译exe
源码:
#include "windows.h"
#include "tchar.h"
int _tmain(int argc, TCHAR *argv[])
{
MessageBox(NULL,
L"Hello World!",
L"www.reversecore.com",
MB_OK);
return 0;
}
这里直接使用vs进行编译即可。
2.调试HelloWorld
2.1 调试目标
- 查找main()函数
2.2 调试过程
把程序拖到od里
2.2.1 程序窗口
默认用于显示反汇编代码,用于显示各种注释,标签,分析代码时显示循环、跳转位置等信息
2.2.2 寄存器窗口
实现显示CPU寄存器的值,用于修改特定的寄存器
2.2.3 数据窗口
已HEX/ASCII/Unicode值的形式显示进程的内存地址
2.3 入口点
调试器停止的地方就是程序执行的起始地址。他是一段EP(EntryPoint入口点,EP是windows可执行文件(EXE、DLL、SYS等入口点,是执行应用程序时最先执行的代码其实位置,依赖于CPU))
这里的起始地址,一个是CALL,一个是JMP。
CALL指令就是指计算机转移到调用的子程序。
JMP就是跳转指令
分析方法:
使用F7+F8进行分析,使用CTRL+F9快速跳转到retn,使用CTRL+F2重新调试。
书上的列子就不说了。使用不同的编辑器会导致地址不一致,唯一相同的就是相对偏移是一致的。
EP起始的地方。
F7进去,这里可以看到这个地方不像我们的main函数。CTRL+F9跳转到最后的retn的地方。
到这里之后F7或者F8都可以,就可以回复到正常流程,其实和编程里的函数执行一模一样。
回到主流程之后,继续F7进去
进去之后,继续使用这种方法来进行调试,一直到找到像main函数的地方。
最后就可以成功的找到main函数了。
2.4 设置大本营(basecamp)
简单的来说重新设置程序的启动点不再是从EP处启动,而是从我们设置的开始启动。
1.Goto命令
快捷键:CTRL+G
设置好了之后使用F4进行光标移动
2.设置BP
快捷键:F2
ALT+B 打开所有设置的断点
3.注释
快捷键:;
右键-Userdefined-comment
4.标签
标签 ::
吾爱版使用右键
2.5 快速查找指定代码的四种方法
(1)代码执行法
使用F8运行代码,当代码有明显特征值的时候,那么就可以通过动态调试找到main函数的存在。
(2)字符串检索发
使用字符串进行检索,鼠标右键就可以了。
(3)API检索法 1
右键查找——>所有模块的调用
(4) API检索法2
Alt+M 打开内存映射窗口
使用右键可以打开所有模块的调用名称
2.6 修改字符串的方法
(1)直接修改字符串缓冲区
(2)在其他内存区域生成新字符并传递给消息函数