首页
社区
课程
招聘
[旧帖] [求助]PE文件格式-WinUpackSC.exe的输入表位置问题 0.00雪花
发表于: 2012-3-26 11:10 1448

[旧帖] [求助]PE文件格式-WinUpackSC.exe的输入表位置问题 0.00雪花

2012-3-26 11:10
1448
【求助】PE文件格式-WinUpackSC.exe的输入表位置问题

本人初学脱壳,最近找到一款常用压缩加壳软件WinUpack,它由Dwing开发,具有不错的压缩效果。

下载了它的简中版分析一下后,我发现:
1) WinUpackSC.exe文件由自身加过了壳。
2) WinUpackSC.exe文件在XP Professional SP3下可以正常运行。
3) 加壳后的文件折叠了DOS Stub,将PE Signature的文件内偏移提前到0x10,
4) 文件0x02处是字串kernel32.dll,很明显是Import Discriptors的Name项指向的内容。
5) 文件SizeofOptionalHeader明显比实际需要的大,即实际的可选头与首区块间有冗余。
6) 文件第一和第三区块映射到不同的内存空间,但它们使用相同的文件偏移和大小

由于修改了文件头,普通OD甚至不能正确载入;只有修改过的OllyICE才可以。

我在使用LordPE和PEiD两种工具分别打开此文件时,发现显示该文件的输入表信息不相符合:

这是LordPE显示的结果:


Header


Dir Table


Section Table


Import Table!

没错,显示有三项,全是Error

再看PEiD的结果:


文件头和目录表


输入表!

只有一项,Kernel32.dll

LordPE与PEiD显示Import Table的RVA均为1E1EEh,Size也都是14h
文件第三个区块VOffset=1E000h,VSize=1000h
ROffset=10h,RSize=1F0h

于是Import Descriptors数组在文件中的开始位置就是1E1EE-1E000+10=1FEh

对比16进制编辑器后发现LordPE显示的正是此处的值,由于Import Descriptors数组以一个全零的成员结束。于是LordPE显示了三项Error。

同样不难发现PEiD显示的Import Descriptors是文件1EEh处的数据

文件是合法的可执行的PE镜像,显然PEiD显示的结果更靠谱
我的问题是为什么Import Descriptors数组是在文件1EEh处而不是1FEh?
我使用的RVA转ROffset方法有错误么?

这是我自己写的工具的显示结果:

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 408
活跃值: (156)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
一些修改的PE,Load不会使用该PE自带的值,而是会自定义PointerToRawData 和 SizeOfRawData修正不规范的值,用linxer写过的函数即可:
/*
SectionAlignmentMask = SectionAlignment - 1;
FileAlignmentMask = 0x200 - 1;
SizeOfRawData = (SizeOfRawData + FileAlignmentMask) & (0xffffffff ^ FileAlignmentMask);
PointerToRawData = PointerToRawData & (0xffffffff ^ FileAlignmentMask);
*/
2012-3-26 12:48
0
雪    币: 64
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
多谢,这个问题解决了
可是PE文档pecoff.doc中说:
输入描述子Import Descriptors数组以一个全零的成员结束,

第一项是Kernel32.dll
第二项并非全0
PEiD是怎么确定文件只有一项Kernel32.dll的?
2012-3-28 10:13
0
游客
登录 | 注册 方可回帖
返回
//