- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
重新构造EXE文件
鬟囊曩.-.霸孵嘲邀譬鬻乒李
重新构造EXE文件
一
,圣新构造EXE文件的意文
1.任改EXE文件
COM程序的修改结果可以存盘.而EXE程序的修
改却没有一个通用的方法.其原因是EXE程序在装入
时需要重定位.对它的修改很可能涉及到段间访问(代
码或数据),这肯定会引起重定位项的变化(增,减,改).
本文介绍的重建EXE文件的方法,可以正确反映
EXE文件各方面的变化,从而使EXE文件的修改同
coM文件一样容易.
2自动生成解毒程序
加密程序实际上是由解密模块和被加密的原程序
所组成.程序运行时.髀密模块先对加密部分进行髀密
变换,得到原程序,再执行重定位操作,最后把控制传给
解密后内存映像.这时的内存映像和程序不加密运行时
是完全相同的.用TSR程序可以很容易地将这块映像
存盘.但存盘后的文件其能在固定地址上运行,只有重
新构造EXE文件.才能得到可随意运行的解密程序.
这种解密方法不需要跟踪解密过程,不需要人工建立
EXE文件头,几乎可以达到自动化.
3可执行文件的解压缩
为了对压缩过的可执行文件进行二次开发.必须得
到未压螭的程序刷用本文提供的程序可以将压缩程序
述原.
将COM文件转化为EXE文件.
二,EXE文件曲诗构及摹过毂一
EXE文件由控制信息(}苦式化区),重定位和装^
模块8部分组成.
EXE文件格式化区的结扮请参见本文所附程序
BIN2EXEcpp.
重定位表从reloc—table_addr开始,其项数由re-
loc—emry—count指出.每个重定位嘎由两字节的偏移
量和两字节的段地址组成.一
装^模块跟在重定位表后面,其位置为header—
size*0Xl0?其大小为seze—in—page*ox2oo+size—
rood_page一0X200一header-size*OX10.如果size—
善.}善一种9虹9
T6
mod—page为0.上述大小应~DJ=ox2oo.
下面结合EXE文件的装入过程说明以上各部分的
作用
DOS装入EXE文件时.先建立psp.装入地址从
(psp+Oxl0):0000开始然后把装入模块读到装入地址
中.对每个重定位项seg:off?将(psp+0xl0)和seg相加
得到一新段值,它和偏移量off指向装入模块中的一个
字.该字要加上(psp+0xl0).例如重定位项为0000
0186,psp=0xl3A8?则应修改的单元为18B8:0186,该
单元中的宇应加上0xl388,程序得到控制时,CS,ip,SS,
sp分别为csO+psp+0xl0,ip0,ssO+psp+OxlOSPO.
DS,ES总是等于psp.
rain—rllem,max—mem这两个重要参数经常被忽
视.它们与内存控制块(McB)链的修改密切相关,如果
被改变,很容易使MCB链受到破坏.
王,构造肼E文件曲原理
构造EXE文件主要是生成格式化区,重定位表和
装入模块.
模式化区的内容可分为3类(见程序)固定值,糟入
值和计算值.输入值包括程序入口,堆栈指针和内存需
求?它们可以通过DEBUG,TDUMP或TSR程序在
EXE程序运行前(时)得到.计算值都是重定位表和装
入模块所决定的.所以重定位表和装入模块是关键;.
由EXE文件的装入过程可姆,童定位项并不是唯
一
的.0018,0006的作用完全相同每个
重定位项,都改变内存中的一个字因此.将EXE文件
装入到不同的地址中.比较内存映像的异同.就可得到
对应的童定位表和装入模块.方法如下.
(1)保存对应于不同蓑八地址的内存映器
通常用DEBUG装入ExE程序.装入段记为bml一
功不用■程序l明.一舞
能擞据摩f瞳住l惠秉缱一.费
强|I成开发平吉ec旃Is42.0试曙岛毫撮下畦址t丑嚷#虬$囊厂首
崩大I匕峰£fI信皂^tI¨畚习■t.5$6000t*rc07~S)35ls蜂鼻{O77●)353B07
●
§应实量囊墨曩囊lⅥ:冀鬻譬豢麓|l誊誊萋誊囊l爹
seg程序修改完毕后,将binl—seg:0000开始,与装入模
块相同长度的内存映像存盘,记文件名为bin—filel该
文件就是按binl—seg重定位后的装入模块
再驻留一TSR程序,按完全相同的步骤完成文件
的装入,修改和保存装入段记为bin2一seg.文件名记为
bin-file2
(2)还原装入模块,提取重定位表
保存模式化区和重定位表的文件记为headel,装入
模块文件记为image
逐字节比较bin—iilel_btLfiLe2如果对应字节相
等.说明它与重定位项无关,直接写入image中即可.
如果对应字节不同,则从该字节开始的一个字是经
过重定位修改的.bin—fitel中的字binl—seg就是装入模
原创力文档


文档评论(0)