前言: 通过学习简单的修改对话框中的字符串,让我们了解到如何利用 OD 来查找 API 和 修改内存信息。
源码:放在 VS 中直接编译就好,然后拿OD来进行调试
#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;
}
- 修改思路:
- 查找出 MessageBox API
- 查看其调用时参数中字符串 “Hello world!”的内存
- 修改该内存达到修改字符串的目的。
- 查找 MessageBox API 的三种思路:
- 直接通过字符串 “Hello world!” 来确定:
- OD 在加载过程中会扫描一遍字符串,我们直接查找出来字符串,查看其调用的地方,就很好确定位置。
- 步骤如下图:
- 通过 搜索模块间的call调用 来确定 API
- 通过查找 API 列表,在 MessageBox API内部设断点,根据其断时的栈区保存的函数调用时的返回地址来确定位置(其本来是方法二的费力版本,当时没找到方法二自己想出来的一种,这里补充一下吧,思路感觉还行。)
- 直接通过字符串 “Hello world!” 来确定:
- 修改字符串的两种思路:
- 在内存中直接修改:优点是方便,缺点也很明显,当输入数据过大时,可能内存溢出影响其他数据。
- 在内存中重新开辟一片区域,在里面输入自己的字符串,然后修改。
- 在内存中直接修改:优点是方便,缺点也很明显,当输入数据过大时,可能内存溢出影响其他数据。