逆向工程HelloWord《逆向工程核心原理》

最近看了《逆向工程核心原理》第二章分析最著名的程序——HelloWord

逆向工程HelloWord《逆向工程核心原理》_第1张图片
《逆向工程核心原理》

本人也是小白,再次分享一下学习过程:

首先创建一个源文件的副本:

逆向工程HelloWord《逆向工程核心原理》_第2张图片
副本

预览一下修改后的文件和源文件:

逆向工程HelloWord《逆向工程核心原理》_第3张图片
源文件

逆向工程HelloWord《逆向工程核心原理》_第4张图片
修改后的文件

首先我们用Debugger打开bin文件:

逆向工程HelloWord《逆向工程核心原理》_第5张图片
OllyDbg

我用的是OD,载入程序后可以发现调试器自动定位到了EP处(Entry Point:入口点,是windows可执行文件(sys驱动,exe二进制,dll动态链接库)最先执行的代码在内存中的起始位置),这里基本是一些Stub Code(启动函数或称之为Start Code:是编译器为了保证代码可以被正常执行,自动创建的,不在我们的Source Code中。个人感觉大部分是调用的Win32 API)。

之后我们要找到要修改的内容在内存中的位置,根据程序的界面可以推断出程序大致用的代码,这里可以看到程序运行只有一个信息对话框,MesaageBox,可以判断出调用了User.MessageBoxW(),所以,我们搜索所有模块间调用

逆向工程HelloWord《逆向工程核心原理》_第6张图片
搜索模块间调用

如图显示出了所有的模块间调用,双击MessageBox即可跳转到调用处

逆向工程HelloWord《逆向工程核心原理》_第7张图片

此时我们已经找到了MessageBoxW,并且可以看到他的参数,以及参数的内存地址:

逆向工程HelloWord《逆向工程核心原理》_第8张图片
调用MessageBoxW()处

之后,我们只需要定位到参数的内存地址(409278~4092A0(开区间,H的起始地址))之后修改即可:

逆向工程HelloWord《逆向工程核心原理》_第9张图片
输入跟踪表达式

VA:Virtual Address虚拟内存地址

逆向工程HelloWord《逆向工程核心原理》_第10张图片
参数的字符串

逆向工程HelloWord《逆向工程核心原理》_第11张图片
替换字符串

之后运行即可看到显示结果:

逆向工程HelloWord《逆向工程核心原理》_第12张图片
替换字符串后的结果

之后保存修改:

逆向工程HelloWord《逆向工程核心原理》_第13张图片
保存修改1

逆向工程HelloWord《逆向工程核心原理》_第14张图片
保存修改2

逆向工程HelloWord《逆向工程核心原理》_第15张图片
保存修改3

当然你可也可以修改标题:

逆向工程HelloWord《逆向工程核心原理》_第16张图片
修改标题

小结:通过Buffer(字符串缓冲区)修改字符串有一定的危险性,当你修改的字符串大于原串时,会覆盖后面的内存,可能导致程序出错。当然也可以在新的空内存空间写入字符串之后修改汇编命令,当然如果想要正常成功运行exe还需要PE知识,这对于身为小白的我来说也是后话了。哈哈(ಡωಡ)

另外,这本书的资源都是要收费的,在此我奉献上宝贵的资源包括了源码和实例(找了一个多小时):http://www.pan.baidu.com/s/1i5s3kIp

密码:pqi6

你可能感兴趣的:(逆向工程HelloWord《逆向工程核心原理》)