逆向工程学习01
一、HelloWorld
#include "windows.h"
#include "tcar.h"
int _tmain(int argc,TCHAR **argv[])
{
MessageBox(NULL,
L"Hello World",
L"www.reversecore.com",
MB_OK);
return 0;
}
二、使用步骤
1.编译后生成HelloWorld.exe,使用ollydbg打开该文件
2.ollydbg指令说明
ollydbg基本指令:
(1)Restart ctrl+f2 重新开始调试
(2)Step Into F7 执行一句,遇到调用命令,进入函数代码内部
(3)Step Over F8 执行一句,若遇到调用命令,则一次执行完
(4)Execute till Return Ctrl+F9 一直在函数代码内部运行,知道遇到RETN命令,跳出函数
(5) 运行 F9 运行
(6)运行到光标处 F4
(6)Gotto 命令 ctrl+g 输入地址,即可跳转
(7)注释命令 ;
(8)添加标签 :
(9) 设置断点 F2
3.ollydbg查找main()
(1)手动分析
重点观察Call命令,使用F7依次执行,遇到函数调用,则F7进入函数内部,观察是否有MessageBox() API代码,如果没有,则Ctrl+F9跳过。
MessageBox()API代码如下图所示。
一步步执行上述步骤,会发现一个可疑的函数调用,如下图所示
按F7进入,则会出现上面提到的MessageBox()API代码,接着执行,会出现弹窗,证明确实是main()函数。
(2)字符串检索
ollydbg载入待调试程序时,会把程序中字符串和调用API摘录出来。
鼠标右键->search for->all referenced text strings,结果如下图所示。
前两行是messagebox的字符串,第三行由方法一可知是主函数。
4.打补丁修改Hello World字符串
通过3的方式进入main()内部,如下图所示
可以看到第三行和第五行是对字符串进行赋值,按F7执行到第6行时,可以在右下角的栈中看到字符串对应保存地址。
记住地址,在左下角的数据区按ctrl+g,跳转到Hello World对应的地址,
如上图,在UNICODE可以更改自己想要的字符串,但是一般不能超过原来的字符个数,更改确定后,可以看到更改已生效,接着执行,窗口的字符串也随之改变。
如果要改变字符超过原有字符长度,则需要另外找一个未被使用的地址,赋值相应字符串。
这里全为0即未被使用的地址。选中目标大小长度,按Ctrl+E即可编辑。