逆向分析并修改Hello World程序《逆向工程核心原理》《软件逆向工程原理与实践》

OllyDbg窗口及快捷键

在这里插入图片描述
在这里插入图片描述

步骤1:VS生成需逆向的文件

visual studio新建工程文件,编译以下程序时选择visual studio的Release模式,减少调试信息。点击本地windows调试器进行编译运行。

#include "windows.h"
#include "tchar.h"
int _tmain(int argc, TCHAR* argv[]) {
	MessageBox(NULL,_T("Hello World!"), _T("www.xidian.edu.cn"), MB_OK);
}

保存后在Release文件夹里面点击.exe文件:
在这里插入图片描述

步骤2:OllyDbg中打开该程序的exe文件,找到需修改的位置

EP(EntryPoint,入口点)是Windows可执行文件(EXE、DLL、SYS等)的代码入口点,是执行应用程序时最先执行的代码的起始位置。
用OD调试XX.exe刚开始默认跳转的位置就是EP处。

汇编代码窗口可以查看汇编指令,地址等相关信息,即寻找操作。

数据窗口可以进行数据修改

执行的修改都是在main函数中,需要寻找到main函数的主体:

通过字符串查找

在汇编代码窗口点击右键,选择 查找->所有的参考文本字串搜索->所有被应用的字符串(针对不用版本)

在被引用的列表中选择“www.xidian.edu.cn”或者是“Hello World!”

双击字符串即可查找到这两个字符串的push操作。过程如下:

在这里插入图片描述
在这里插入图片描述

步骤3:修改

修改1:修改指令

可以做的第一个修改是对调界面上的“www.xidian.edu.cn”和“Hello world!”这两个字串的位置。

可以对这两个字符串压栈的PUSH指令,将两条指令的地址互换。

由图可知,汇编指令对应的十六进制机器码分别是F8201B01和0C211B01。
在这里插入图片描述
在最左列可以看到,两条指令的地址在011B002。

在数据区域执行所有的修改操作:

在数据区域快捷键Crtl+G,搜索地址011B002,找到该地址,选中需要修改的区域,如下紫色部分。

再按快捷键Ctrl+E进入修改。

在编辑窗口修改该数据,将其修改为0C211B01,点击确定即可。

在这里插入图片描述
同样的步骤对后面的0C211B01进行修改,修改为F8201B01。完成两条指令的交换。修改后汇编代码窗口可以观察到两者的变化。

最后选择被修改的区域,如下紫色部分,在数据区域右键->复制到可执行文件。在生成的文件中右键->保存文件即可。

修改2:修改字符串

将原来的“Helloworld”界面上的“Hello world!”字符串,更改为“Hello Student!”

利用步骤二中的方法可以找到该字符串的地址,同样在数据区域找到该位置,选择该区域。

当然,由于“Hello Student!”比“Hello world!”要长,因此需要选择稍微大一点的区域,由于该条语句后面都是00,所以多选择区域不会造成错误。
在这里插入图片描述
Ctrl+E修改。直接对ASCII进行操作即可改变汇编代码指令。确定保存。
在这里插入图片描述
在这里插入图片描述

修改3:输出任意英文

题目来源:《软件逆向工程原理与实践》P11,1.6思考与练习

对以下C程序进行反汇编和逆向工程,得到能够在控制台上输出“一定长度的任意英文”的EXE程序。

#include"stdafx.h"
#include"stdio.h"
int main(int argc,char* argv[]){
	printf("Hello World\n");
	return 0;
}

下图中空白位置是自定义的一段英文。结果放到cmd窗口方便展示。
在这里插入图片描述
在这里插入图片描述

软件逆向工程原理与实践前三章课件

软件逆向工程原理与实践第1章软件逆向工程概述.pptx

软件逆向工程原理与实践第2章x86与x64体系结构.pptx

软件逆向工程原理与实践第3章ARM体系结构.pptx

posted @ 2022-02-28 17:13  Hardworking666  阅读(107)  评论(0编辑  收藏  举报  来源