--------给PE文件打补丁--------
------
我们都知道在PE文件中有很多空隙,所以我们就有可能给PE文件打补丁.
做法是在空隙中插入我们的补丁代码.
下面我通过实例来教大家给notepad.exe(记事本)程序来打个补
丁,使得notepad.exe运行时先运行我的pach.exe程序,方法是:
1.在notepad.exe的section间隙中插入
ShellExecute(0,'open','pach.exe',0,0,5)这个api函数调用
2.后面加入jmp old_begin来跳回原来的程序启动点执行原来的代码
3.修改程序的入口点为新的入口点
经过这三步操作后,你就为notepad.exe程序打上了补丁,以后每次执行notepad.exe
都会先执行pach.exe程序了.
听起来很简单,做起来麻烦,我们来看看如何实际操作吧!
首先我们需要有个debug.exe用来修改notepad.exe程序的内容,这是windows
自带的,你不用费事找的,当然你要分析pe文件的结构和他的反汇编指令的话还要一
个dumppe.exe程序,他是masm32汇编器自带的一个免费程序,功能强大,我们分析pe
格式和反汇编码就用他了,如果你没有这个程序也没关系,想要的话从这里下载就行
http://njhhack.top263.net/dumppe.zip当然我们还要一个win97的操作系统,因为
我们对他的notepad.exe程序打补丁.
好了,准备好后,我们开始工作了,先把notepad.exe复制到c:\n.exe,c:\n
然后我们对n进行手术,首先我们分析n.exe的内部结构,用dumppe -disasm n.exe>n.txt
好了,n.txt中包含了我们要的所有信息,当然我们只对下面的几个内容感兴趣:
------------------------------------------------
Address of Entry Point 00001000
-------------------------------------------------
01 .text Virtual Address 00001000
Virtual Size 00003A9B
----------------------------------------------------
00402E20 FF1578734000 call dword ptr [ShellExecuteA]
-----------------------------------------------------------------
上面这三部分信息分别是什么含义呢?
1.其中Address of Entry Point 00001000
表示程序的入口点为1000,这个很重要,因为我们的程序执行完后要跳回这个入口点,
2.其中 01 .text Virtual Address 00001000
Virtual Size 00003A9B
表示代码段的虚拟地址从1000开始,大小为3a9b,这个也很重要,因为我知道每个