但是,似乎围绕此原理有很多变化。我最近了解了“虚拟包装工”或“即时包装工”,我可能会想念很多。因此,有人可以定义一个基本的打包程序,然后解释可以遇到的不同类型吗?
#1 楼
通用定义二进制打包程序会更改原始二进制数据,并在执行前还原(或多或少)它。
它们的不同名称更多地取决于它们的特性:很难清楚区别在于,仅放置一个反调试和Xor循环就可以使打包程序同时成为保护程序和加密程序。
类型
扩展名
执行额外的打包程序代码
压缩器:减小原始数据的大小
常见:aPLib(FSG,LZMA,NRV(UPX)
其他: JCALG1,BriefLZ,LZMAT
保护器:使得逆向工程更加困难
对策:
反调试:IsDebuggerPresent,...
反虚拟化:检测VmWare,...
反转储:擦除内存中的标头...
通过校验和进行反篡改
常见:滚动校验和,CRC32,md5,sha1,adler,md4
其他:Tiger,Whirlpool,md4,adler
解密器:加密原始数据
常见:按位运算符(XOR / ROL / ...),LCG,RC4,茶
其他:DES,AES,河豚、,、 IDEA,ElGamal
转换
原始代码被重写
virtualizer:使用嵌入式虚拟机将原始代码转换为虚拟代码
mutater:更改代码-相同的指令集和体系结构,但进行了修改:
回流
同态
附加功能
bundler:删除文件,并带有API挂钩(使多文件程序作为单个文件运行)
这些图形可能会有助于进一步参考。
评论
我现在不确定是否一开始就应该将其转变为社区Wiki-让我知道您的意见。
–天使
13年4月15日在12:54
很难说。问题与维基的分类是非常主观的。我想说的是您最满意的方法。我认为它可以生存。
–达斯塔
13年4月15日在16:26
#2 楼
定义我们将打包器定义为可执行压缩器。
打包程序通过压缩可执行文件来减小其物理大小。然后通常将解压缩存根寄生地附加到可执行文件上。在运行时,解压缩存根扩展原始应用程序并将控制权转移到原始入口点。
几乎所有现代平台都有打包程序。打包程序有两种基本类型:
就地(在内存中)
写入磁盘
就地打包机可以执行所谓的操作就地解压缩,其中解压缩的代码和数据最终位于加载它的位置。解压缩完成后,附加到这些压缩的可执行文件的解密存根在运行时将控制权转移到原始应用程序入口点。
写入磁盘打包程序具有解密存根(或整个模块),该存根在运行时将解压缩的应用程序写到文件系统或内存块中,然后将控制权转移到通过常规API调用执行应用程序的代码来创建原始应用程序。
使用
可执行压缩器的最初目的是减少存储需求(磁盘上的大小) ),当磁盘空间不足时返回。它们还可以降低传输的压缩可执行文件的网络带宽占用量,至少在不会以其他方式压缩网络流量的情况下。
这些天,磁盘空间已不占空间,因此它们的使用已不再常见。它们最常用作防止逆向工程的保护系统的一部分。不幸的是,虐待也很常见。
虐待
一些加壳程序被恶意软件作者滥用,试图对扫描程序隐藏恶意软件。大多数扫描仪可以扫描“内部”(解压缩)打包的可执行文件。具有讽刺意味的是,对恶意软件使用加壳程序通常会适得其反,因为它会使恶意软件看起来可疑,因此需要进行更深入的分析。
其他功能
其他功能诸如可以防止反向工程的保护措施可以添加到封隔器中,从而使封隔器也成为保护器。压缩过程本身就是一种混淆和抽象的形式,本质上可以起到某种保护作用。
评论
嗨@perror,您能给我一些有关“即时包装员”的材料吗?我在Google中搜索过,但没有发现任何有趣的东西。谢谢!从名称“ on-the-fly packers”开始,它应该与VM Packer非常相似....但我不确定