-
-
[求助]请教个基础性问题:压缩壳压缩各区块数据如何正确的取每个区块在内存首地址
-
发表于:
2009-7-23 11:15
2280
-
[求助]请教个基础性问题:压缩壳压缩各区块数据如何正确的取每个区块在内存首地址
新手初学加壳,发现了下面的问题,苦思了几日,还是没有头绪。
用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日开班!