首页
社区
课程
招聘
[求助]怎样修改PE头后面节表里的一些节信息才能使程序不损坏还能正常运行?
发表于: 2009-2-15 10:40 3920

[求助]怎样修改PE头后面节表里的一些节信息才能使程序不损坏还能正常运行?

2009-2-15 10:40
3920
我想修改以下三处分别为
节表里 .text 的文件偏移地址
       .rdata的文件偏移地址
       .data的文件偏移地址
比如把.text节的文件偏移地址
改了之后还需要改些什么东西
不至于使程序损坏,还能正常运行
多谢高手哥哥 帮忙
感激不尽

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
节表中的项是用来描述文件的节的属性的。

如果对应的节发生了变化,那么节表中的项自然需要作出相应的变化。

而如果文件中的节没有变化,而却修改了节表中的项,此时节表中的项就描述了错误的节属性。那么程序就不正确了。

节表的变化是要与文件中的节相对应的。节的内容怎么变,节表就怎么变。

反之,节表怎么变,节本身也应该怎么变。

比如,把.text节的文件偏移地址从0x100移动到0x200,那你就要在.text节前面插入0x100个字节,使它的偏移确实是0x200。否则,节中表指向的0x200就不是正确的.text节了。
2009-2-15 20:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
LS的哥哥 我把节表中的.text的文件偏移地址从400改成了500 然后我把底下.text的节的第一行16进制数据(我是用C32)从400复制到500处,原先那行填充为00 ,后发现程序不能运行了
哥哥我这样改变.text的文件偏移地址对吗
谢谢你
2009-2-15 21:27
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
4
你怎么会这么改。。。

一个section就是一块数据,内存映像是从文件映像中映射来的。正因为采取了文件映射的方法,所以要求section在内存中要按页对齐,而在文件中要按块对齐。

举个例子,比如.text节是0x200个字节,磁盘块也是0x200字节,那么这个节在文件中占0x200个字节,而映射到内存中占一个页面(通常是4K字节)。

在section table中的表项中,VirtualAddress = 0x1000,VirtualSize = 0x1000,假设文件的base为0x400000,那么内存中0x401000 - 0x401fff这段区域就是.text节。

而如果RawAddress = 0x500,RawSize = 0x200,说明这个节的数据存储在文件中的0x500 - 0x6ff范围。

系统加载程序时,将文件中的0x500 - 0x6ff这512字节的内容映射到内存中0x401000 - 0x4011ff这个范围,而将剩下的0x401200 - 0x401fff的内容用0填充。

所以,你要移动数据,必须将整个节移动到新的位置。否则就不正确。
2009-2-15 21:57
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
我的ID可不可以改成section ?
2009-2-15 22:46
0
游客
登录 | 注册 方可回帖
返回
//