首页
社区
课程
招聘
[求助]请教个基础性问题:压缩壳压缩各区块数据如何正确的取每个区块在内存首地址
发表于: 2009-7-23 11:15 2279

[求助]请教个基础性问题:压缩壳压缩各区块数据如何正确的取每个区块在内存首地址

2009-7-23 11:15
2279
新手初学加壳,发现了下面的问题,苦思了几日,还是没有头绪。
用bambam004对WinHex15.1加壳,加壳失败;对TDAP1750.EXE加壳,加壳成功
用Hying的PE-Armor对WinHex15.1加壳,加壳成功;对TDAP1750.EXE加壳,加壳失败。

说明:TDAP1750.EXE是一个大型数据计算的程序

然后用ASProtect压缩以上2个EXE文件,均成功。
很不解,于是分析bambam004和PE-Armor的源码,是压缩函数aP_pack的参数不一样。

bambam004它是按(文件在内存基地址+该区块的PointerToRawData)的方法取各区块压缩的起点。
PE-Armor它是按(文件在内存基地址+该区块VirualAddress)的方法取各区块压缩的起点。

以下位WinHex15.1和TDAP1750.EXE的区块表的值

WinHex15.1的区块结构示意


TDAP1750.EXE的区块结构示意

观察下就可以看出,WinHex15.1用bambam004压缩,第三个区块就会出问题。
                   TDAP1750.EXE用PE-Armor压缩,第四个区块的首地址肯定没那么大,会出错。
两种加壳软件都有一些会压缩出错的EXE文件,但是ASProtect和其他人的一些加壳软件都能压缩此2个EXE文件,那么这些软件是如何正确地取PE文件各区块首地址的呢?

今天下午折腾了一会,小小的修改了一下PE-Armor。能正确加壳TDAP1750,结果如下:


用ASProtect能正确加壳TDAP1750,结果如下:


用网上找到PEX能正确加壳TDAP1750,结果如下:


以上加壳后的3个PE文件均能正确执行,功能完整。

修改后的PE-Armor主要是当用压缩起点(文件在内存基地址+该区块VirualAddress)用IsBadReadPtr验证,当结果为FALL时,把要压缩的区块大小设置为0.这样就会被认为是多余的区块,直接跳过。(我观察TDAP1750在第四个区块的映射没有分配内存空间,故我直接置0)

ASProtect是生成了一个比较大的磁盘区块,有谁清楚它是怎么处理的吗,我的修改思路不知道正确否,第一次发长贴,多多指教。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 177
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tbc
2
我写了个壳,用的是PointerToRawData,在处理部分vc++程序时会出错。
2009-7-23 15:32
0
游客
登录 | 注册 方可回帖
返回