最近看了《逆向工程核心原理》第二章分析最著名的程序——HelloWord
本人也是小白,再次分享一下学习过程:
首先创建一个源文件的副本:
预览一下修改后的文件和源文件:
首先我们用Debugger打开bin文件:
我用的是OD,载入程序后可以发现调试器自动定位到了EP处(Entry Point:入口点,是windows可执行文件(sys驱动,exe二进制,dll动态链接库)最先执行的代码在内存中的起始位置),这里基本是一些Stub Code(启动函数或称之为Start Code:是编译器为了保证代码可以被正常执行,自动创建的,不在我们的Source Code中。个人感觉大部分是调用的Win32 API)。
之后我们要找到要修改的内容在内存中的位置,根据程序的界面可以推断出程序大致用的代码,这里可以看到程序运行只有一个信息对话框,MesaageBox,可以判断出调用了User.MessageBoxW(),所以,我们搜索所有模块间调用
如图显示出了所有的模块间调用,双击MessageBox即可跳转到调用处
此时我们已经找到了MessageBoxW,并且可以看到他的参数,以及参数的内存地址:
之后,我们只需要定位到参数的内存地址(409278~4092A0(开区间,H的起始地址))之后修改即可:
VA:Virtual Address虚拟内存地址
之后运行即可看到显示结果:
之后保存修改:
当然你可也可以修改标题:
小结:通过Buffer(字符串缓冲区)修改字符串有一定的危险性,当你修改的字符串大于原串时,会覆盖后面的内存,可能导致程序出错。当然也可以在新的空内存空间写入字符串之后修改汇编命令,当然如果想要正常成功运行exe还需要PE知识,这对于身为小白的我来说也是后话了。哈哈(ಡωಡ)
另外,这本书的资源都是要收费的,在此我奉献上宝贵的资源包括了源码和实例(找了一个多小时):http://www.pan.baidu.com/s/1i5s3kIp
密码:pqi6