首页
社区
课程
招聘
[旧帖] [求助]虚拟大小的问题 0.00雪花
发表于: 2008-4-9 00:32 3558

[旧帖] [求助]虚拟大小的问题 0.00雪花

2008-4-9 00:32
3558
手上有个小程序,想把TEXT段的虚拟大小增加1000字节,怎么做呢?
偶用LORDPE改完重建PE提示不是有效WIN32文件,图标都没了.....

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
2
假设修改前是这样:
.text VOffset 00001000 VSize 00001000
.data VOffset 00002000 VSize 00001000
.rsrc
.reloc
……
好了,现在你把.text的VSize改大了1000,变成了00002000

结果,装载PE文件时,.text段装入到偏移00001000-00002FFF处(尽管多出来的1000部分是空白的)
那.data段装到哪?还能装到00002000的位置吗?!那不就出错了。

因此,前一段的VOffset+VSize,肯定不能大于后一个段的VOffset

好了,现在你又想:那就把后面所有段的VOffset都往后调1000,这下该OK了吧?

错,这样问题就大了:
1. 假设.text段是可执行代码,.data段是数据,那么,在程序运行过程中,要对.data段的数据进行读写,这时,.data段的位置变了,但是程序代码却没有改,结果:读写错了。

2. 再进一步假设,.rsrc段是资源的话,资源表和所有资源保存在这里,包括图标资源。那么,改了它的VOffset,却没有改PE文件头里的资源表指针,结果:资源表找不到了,于是“连图标也没了”。

3. 再进一步假设,.reloc段里保存重定位表,但是同样的,改了它的VOffset,但是PE文件头里的基址重定位表指针也没改,结果:找不到重定位表……

因此,对最后一个段以外的区段来说,随意改动其虚拟大小,会导致一系列问题,绝不是改了IMAGE_SECTION_HEADERS结构里的相关量,就能让程序正常运行的。

光是上面第一点,就难以解决了(除非你对程序代码patch),而后面的2、3点等,则更会真真切切地导致PE装载器装载错误(输入表,输出表,资源表,基址重定位表……这些结构的位置都可能随之改变,你要在PE文件头里做多少修改……),不得不提示“不是有效的win32文件”。

如果你要对程序做patch,最好找代码段里的空隙,或者在最后加上一个区段来写代码,而不是直接改动TEXT段的虚拟大小。
2008-4-9 01:15
0
游客
登录 | 注册 方可回帖
返回
//