逆向工程学习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打开该文件

java逆向工程是什么意思 逆向工程代码_赋值

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代码如下图所示。

java逆向工程是什么意思 逆向工程代码_安全_02


一步步执行上述步骤,会发现一个可疑的函数调用,如下图所示

java逆向工程是什么意思 逆向工程代码_赋值_03


按F7进入,则会出现上面提到的MessageBox()API代码,接着执行,会出现弹窗,证明确实是main()函数。

(2)字符串检索

ollydbg载入待调试程序时,会把程序中字符串和调用API摘录出来。

鼠标右键->search for->all referenced text strings,结果如下图所示。

java逆向工程是什么意思 逆向工程代码_赋值_04


前两行是messagebox的字符串,第三行由方法一可知是主函数。

4.打补丁修改Hello World字符串

通过3的方式进入main()内部,如下图所示

java逆向工程是什么意思 逆向工程代码_安全_05


可以看到第三行和第五行是对字符串进行赋值,按F7执行到第6行时,可以在右下角的栈中看到字符串对应保存地址。

java逆向工程是什么意思 逆向工程代码_java逆向工程是什么意思_06


记住地址,在左下角的数据区按ctrl+g,跳转到Hello World对应的地址,

java逆向工程是什么意思 逆向工程代码_赋值_07


如上图,在UNICODE可以更改自己想要的字符串,但是一般不能超过原来的字符个数,更改确定后,可以看到更改已生效,接着执行,窗口的字符串也随之改变。

java逆向工程是什么意思 逆向工程代码_API_08


如果要改变字符超过原有字符长度,则需要另外找一个未被使用的地址,赋值相应字符串。

java逆向工程是什么意思 逆向工程代码_赋值_09


这里全为0即未被使用的地址。选中目标大小长度,按Ctrl+E即可编辑。

java逆向工程是什么意思 逆向工程代码_API_10


java逆向工程是什么意思 逆向工程代码_API_11