fonge 发表于 2007-9-14 14:58:36

活动之一PE自定义

PE文件个性化并不是一件十分难的事情,
因为PE文件物理格式非常简单。


我们可以试图手工做一个有效的PE,用WINHEX就可以

1.构建一个DOS部首
2.构建一个PE映象头
3.构建一个可选映象头
4.块表
5.填充块表属性内容
6.构建一个合法的输入表结构


基本上就已经完工了,
但这仅仅是一个有效的PE文件,可执行还是一回事
可以用OD来完成这部分工作

所以
1.在输入结构加入对话框函数,退出函数
2.用OD在入口处写个调用对话框函数,退出函数


完工....


感兴趣的兄弟可以做一做,发个范文,大家一起学习习...

icefall 发表于 2007-9-14 16:48:34

看雪竞赛的第二题和这个差不多的

fonge 发表于 2007-9-15 14:15:59

完全手工做了一个EXE,如楼顶方式,带讲义...


________________________________________
除错,附件更新..在八楼

[ 本帖最后由 fonge 于 2007-9-17 10:32 编辑 ]

Nisy 发表于 2007-9-15 15:36:04

强 下载学习下~~ 对PE格式讲解的相当清楚 有劳fonge兄弟了~~

fonge 发表于 2007-9-15 16:19:13

有个错误:MessageBoxA调用为call 而不是文中的call 401050

glts 发表于 2007-9-15 19:21:25

写得非常的,我好像脑子生锈了,不怎么看得懂,向F版学学

flyjmu 发表于 2007-9-16 12:06:51

我太菜了 看不懂啊

fonge 发表于 2007-9-17 10:35:13

追加两篇,

第二篇不错...

PE自定义之手工分块:

目标文件为第一阶段手构建的EXE文件。

分为三个块,待解决的问题如下:
一.块表:
1.在块表中新增2个块
2.制定相应的块属性

二.PE文件头:
1.块表数目上的变化了
2.修改入口点
3.重新制定代码段物理大小
4.重新制定数据段物理大小
5.内存中映象总大小变了
6.输入表指向位置不一样了

三.数据重建:
1.单纯数据
2.输入表
3.可执行代码调用


手工压缩PE的实现:
PE物理体积的减小:

这里说的物理体积减小,是在不做可执行代码调用重定位的情况下实现物理体积减小!

经过前两个阶段,已经对PE文件及其修改了解更多了
在前面的阶段中,PE修改突显了一个问题,那就是输入表移位后必然可执行代码中调用地址需要做出相应的变化,而我们知道在真正实用的可执行文件中,有成百上千到万的地方调用引入数据,这样的话,改起来非常麻烦。而我们设法让PE文件物理大小更小,必然去掉大量的非用字节,这就会导致输入表移位和一些指定数据移位,而前提必将是在输入表移位和数据移的情况下不改到可执行代码。
这一阶段将是不改动可执行代码实现数据物理大小的修改,以第二阶段的三区块.exe为例!

原理:如图,绿色部分为对齐用00填充位,左一图中占用位使用了大量磁盘空间,左三图中去掉了大部分占用位空间,同时,实现内存中数据定位信息相同,无需更多精力花在重定位上!
****
*****
**
实现流程:
1.各区段的数据集合到同一个区段中
2.修改这个区段内存中大小为原内存中映象大小
3.增加一段可执行代码实现数数据归位
原则上讲,可以修改磁盘对齐值来实现PE文件的有效性,这关系到可执行代码中调用重定位的问题。我们这里用合并区块和追加一定代码的方式实现!

yingfeng 发表于 2007-9-18 12:19:26

fonge 膜拜的对像,呵呵/:good


对照看了下,输入表还有些晕乎,继续看看,呵呵



基础太差,呵

[ 本帖最后由 yingfeng 于 2007-9-25 09:07 编辑 ]

fonge 发表于 2007-9-24 20:39:07

找时间把块表温习一下...
页: [1] 2 3
查看完整版本: 活动之一PE自定义