UPack的PE文件头分析与OEP查找

UPack(Ultimate PE压缩器),是一种PE文件的运行时压缩器,特点是使用独特的方法对PE头进行变形。UPack会使许多的PE分析程序无法正常运行,因此很多恶意代码都是通过UPack进行压缩。

 

UPack PE文件头分析

使用UPack压缩notepad.exe:

UPack会直接压缩源文件而不会进行备份。压缩后的notepad文件更名为notepad_upack。

使用PEView尝试能否正常查看:

 

可以看到,新版的PEView也无法正常读取PE头信息,没有读取到NT头和节区头等信息。

 

使用Stud_PE工具查看PE头信息:

Stud_PE可以读取UPack压缩后的PE文件信息。

 

 

比较PE文件头:

用Win Hex打开正常的notepad.exe文件:

 

可以看到,这是典型的PE头格式,依次的顺序为IMAGE_DOS_HEADER、DOS Stub、IMAGE_NT_HEADERS、IMAGE_SECTION_HEADER。

用Win Hex打开使用UPack压缩后的notepad文件:

 

可以看到,MZ与PE签名离得很近,并且没有了DOS存根,出现了大量字符串,中间夹杂着一些代码。

 

分析UPack的PE文件头:

1、重叠文件头:

重叠文件头是压缩器常用的技法,可以把MZ文件头(IMAGE_DOS_HEADER)与PE文件头(IMAGE_NT_HEADERS)重叠在一起,可有效节约文件头的空间。

使用Stud_PE查看MZ文件头(Headers选项卡的Basic HEADERS tree view in hexeditor):

 

可以看到,该DOS头确实含有e_magic和e_lfanew两个重要成员,其余的成员对程序运行并不会产生影响。

根据PE文件格式规范,IMAGE_NT_HEADERS的起始位置是可变的,即由e_lfanew的值确定,在一般的PE文件中,e_lfanew = DOS头大小(40) + DOS存根大小(可变,VC++的为A0) = E0。这里可看到UPack中e_lfanew的值为10,其并不违反PE规范,使得DOS头与NT头得以整合到一起。

 

2、IMAGE_FILE_HEADER.SizeOfOptionalHeader

修改IMAGE_FILE_HEADER.SizeOfOptionalHeader的值,可以向文件头插入解码代码。

SizeOfOptionalHeader表示PE文件头中IMAGE_OPTIONAL_HEADER结构体的长度(E0)。UPack将该值修改为148:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值