分享
 
 
 

给PE文件打补丁

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

--------给PE文件打补丁--------

------njhhack

我们都知道在PE文件中有很多空隙,所以我们就有可能给PE文件打补丁.

做法是在空隙中插入我们的补丁代码.

下面我通过实例来教大家给win97的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,这个也很重要,因为我知道每个

section以200对齐,现在大小为3a9b,比对齐后的3c00要少,所以代码段有空隙,我们就可

以在此插入自已的代码了,空隙的大小为3c00-3a9b=165大小,足够了,

3.其中00402E20 FF1578734000 call dword ptr [ShellExecuteA]

是一个反汇编代码,我们了解到ShellExecuteA的调用的机器码为FF1578734000,

有了上面这三个重要信息后,我们开始最艰难的工作了:

=============================================================================

1.我们修改代码段的大小,把Virtual Size的值由00003A9B改为00003C00,这样

我们的代码才能被装入内存.因为Virtual Size值存在180的位置,所以我们可以这么做:

debug n ↙

-f280 l2 0,3c

-w

-q

这样我们就改好了代码段的大小

2.我们修改程序的入口地址为3a9d+1000=4a9d,方法如下

因为入口地址在a8这个位置,所以这么做

debug n ↙

-f1a8 l2 9d,4a

-w

-q

这样我们修改好了入口地址

3.最后一步最难了,就是设计汇编代码了,来吧,精神点!

-------------------------------------------------------

内存地址 机器码 汇编指令

-------------------------------------------------------

00404A9D 6A05 push 5

00404A9F 6A00 push 0

00404AA1 6A00 push 0

00404AA3 68E04B4000 push 404BE0h

00404AA8 68F04B4000 push 404BF0h

00404AAD 6A00 push 0

00404AAF FF1578734000 call dword ptr [ShellExecuteA]

00404AB5 E941010000 jmp loc_00404BFB

00404BE0 6861636B2E657865 db 'pach.exe',0

00404BF0 6F70656E db 'open',0

00404BFB E900C4FFFF jmp loc_00401000

--------------------------------------------------------------

这就是我们要写的全部汇编指令,不长,但你要懂他的原理,好吧,我们来分析

其中的

push 5

push 0

push 0

push 404BE0h

push 404BF0h

push 0

是把6个参数压入堆栈,供ShellExecute函数使用,至于该函数的参数结构,大家看win32.hlp的描述

然后call dword ptr [ShellExecuteA]这是调用这个函数了,其效果等同于下面的C语言格式

ShellExecuteA(0,'open','pach.exe',0,0,5);

也就是说最先压入堆栈的参数在函数的最右边,其中'open','pach.exe'分别相当于404BE0h,404BF0h

这两个内存地址,因为在该函数中,字符串参数的传递是传的字符串地址,因此

00404BE0 6861636B2E657865 db 'pach.exe',0

00404BF0 6F70656E db 'open',0

这上面两行就是在内存中定义了两个字符串.

00404AB5 E941010000 jmp loc_00404BFB

上面这行是在call 完函数后跳到00404BFB这个地址.

00404BFB E900C4FFFF jmp loc_00401000

这一行是跳回原来的入口地址1000,执行原来的程序.

-----------------------------------------------------------------

好了,原理讲完了,我们最后要把这些指令放入代码段,当然就是把机器码放进去了,方

法如下:

因为代码段在400位置,而我们新入口点在3b9d,所以开始放数的地方是100+400+3a9d=3f9d

其中加的100是debug在内存中的基地址,所以做法如下:

debug n ↙

-f3f9d l1d 6a,5,6a,0,6a,0,68,e0,4b,40,0,68,f0,4b,40,0,6a,0,ff,15,78,73,40,0,e9,41,1,0,0

-f40e0 l9 'pach.exe',0

-f40f0 l5 'open',0

-f40fb l5 e9,0,c4,ff,ff

-w

-q

好了,我们终于完成了最艰难的任务,可以颀赏一下成果了,把n.exe用n代换,方法为copy n n.exe打开n.exe

我们发现,在启动记事本程序的时候,同时打开了pach.exe这个程序,呵呵,我们终于成功了

想看效果,到这里下载njhhack.top263.net/pach.zip这个不是木马,是演示程序,大家不要害怕

---------------------------------------------------

用同样的方法,你可以给任何程序打补丁,只要他在程序中调用了ShellExecute,WinExec,CreateProcess,...

这些函数就行,比如我们可以给Explorer.exe打补丁,这样我们就可以在启动电脑时,自动运行pach.exe程序了

你还可以给很多这样的程序打补丁,只要你愿意.

现在大家知道汇编语言有多有用了吧,以后好好学吧,当然还要学pe文件的格式哟,不过本人在此告诫

大家不要用这个补丁技术来启动你的木马程序,若不听劝告,引起的后果与本人无关.

------njhhack

2001.8.25

e-mail:njhhack@21cn.com

oicq:10772919

主页:hotsky.363.net

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有