下图是PE文件结构部分及在磁盘和加载到内存中的对比,其文件的总体结构未发生变化,但是文件在磁盘和内存中的相对偏移发生了变化。
1.1 运行时压缩器定义
运行时压缩器是针对可执行文件而言,可执行文件内部含有解压缩代码,文件在运行瞬间于内存中解压缩后执行。
普通压缩与运行时压缩比较
可执行文件的压缩器称为“运行时压缩器”,它是PE文件的专用压缩器。
1.2 运行时压缩器用途及种类
PE压缩器使用的目的主要集中于两个方面:
-
缩减PE文件的大小
-
隐藏PE文件内部代码与资源
PE压缩器种类:
-
单纯用于压缩普通PE文件,比如UPX,ASPack等
-
对源文件(PE文件)进行较大变形、严重破坏PE头、意图不纯的压缩器,例如用于恶意程序(virtus,Trojan,worm等),比如UPack,PESpin等。
初探UPack压缩文件
UPack的制作者对PE头有深刻认识,UPack以对PE头的独特变形技法而闻名。UPack在刚出现时,许多PE实用程序无法正常运行。导致许多恶意代码制作者使用UPack压缩恶意代码发布。
本文以UPack 0.39版本压缩的notepad.exe为例,详细介绍UPack对PE文件的压缩过程,尤其对PE头部及代码重置的关键技术做了详细介绍。
UPack对notepad.exe做运行时压缩,如下图所示
由上图可知notepad.exe程序有原来的66560个字节变成了44908个字节,文件大小有了变化,同时由图中输出信息可知文件的输入表,资源信息等也发生了变化。
2.1 压缩文件检测
被UPack压缩后的文件,文件头部和文件内容发生了变化,对导致许多安全软件认为压缩文件有可能包含病毒特征,会直接报毒,下图是利用QQ传输原始notepad文件和压缩notepad文件时,QQ自检会认为被UPack压缩后的文件包含病毒特征。
下图是利用IE浏览器下载压缩文件和正常文件,IE插件给出的提示信息。
下图是利用多扫描引擎对压缩文件进行检测,国内很多安全厂商的病毒引擎都认为被UPack压缩的文件含有病毒特征。
2.2 实用工具识别
由于UPack对PE文件头部做了特殊处理,这样就会使一些PE实用程序无法正常运行,PEView使用工具加载压缩notepad文件和原始notepad文件时,对文件识别也表现不同;由于UPack对notepad头部做了变形,导致PEView在对压缩notepad解析时找不到正常的文件结构而加载失败。
该图是OD动态调试工具对压缩的notepad加载时出现的错误信息。