大家都清楚运行时压缩器UPack是软件逆向工程中常见课题;了解运行时压缩,需要掌握基本的PE文件格式,操作系统的基本知识等。
理解本文内容最好有PE文件基础知识,对PE文件加载器有一定了解。本文会穿插介绍PE文件基础知识但重点不在于此。
下图是PE文件结构部分及在磁盘和加载到内存中的对比,其文件的总体结构未发生变化,但是文件在磁盘和内存中的相对偏移发生了变化。
1.1 运行时压缩器定义
运行时压缩器是针对可执行文件而言,可执行文件内部含有解压缩代码,文件在运行瞬间于内存中解压缩后执行。
普通压缩与运行时压缩比较
项目 | 运行时压缩 | 普通压缩 |
---|---|---|
对象 | PE文件(exe,dll,sys) | 所有文件 |
压缩结果 | PE文件(exe,dll,sys) | 压缩文件(rar,zip) |
解压方式 | 内部自解压程序 | 专门解压程序 |
可否执行 | 本身可执行 | 本身不可执行 |
特点 | 无需专门解压程序可直接执行 | 对所有文件压缩 |
可执行文件的压缩器称为“运行时压缩器”,它是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加载时出现的错误信息。
未完待续,相关内容链接:
庖丁解牛之UPack工作原理及实例分析(2)
庖丁解牛之UPack工作原理及实例分析(3)
如果您需要了解更多内容,可以
加入QQ群:486207500
直接询问:010-68438880-8669