有哪些不同类型的包装机?

逆向工程 混淆 恶意软件 包装工
2021-06-14 03:21:20

我知道打包机的基本原理。基本上,它是在程序开始时启动的一个小程序,解压实际程序并在完成后跳转到它。

然而,围绕这一原则似乎有很多变化。我最近了解了“虚拟化加壳器”或“即时加壳器”,我可能会错过很多。那么,有人可以定义什么是基本包装器,然后解释可以遇到的不同类型吗?

2个回答

通用定义

二进制加壳程序会更改原始二进制数据,并在执行之前(或多或少)恢复它。

它们的不同名称更多地取决于它们的特性:很难清楚地区分,因为仅仅放置一个反调试和一个异或循环就会使包装器同时成为保护器和密码器。

类型

延期

额外的打包代码被执行

  • 压缩器:减少原始数据的大小
    • 常见:aPLib (FSG, , LZMA, NRV (UPX)
    • 其他:JCALG1、BriefLZ、LZMAT
  • 保护者:使逆向工程更难
    • 对策:
      • 反调试:IsDebuggerPresent, ...
      • 反虚拟化:检测 VmWare,...
      • 反倾销:擦除内存中的标头...
      • 防篡改,通过校验和
        • 常见:滚动校验和、CRC32、md5、sha1、adler、md4
        • 其他:老虎、惠而浦、md4、阿德勒
  • 加密器:加密原始数据
    • 常见:按位运算符 (XOR/ROL/...)、LCG、RC4、Tea
    • 其他:DES、AES、Blowfish、Trivium、IDEA、ElGamal

转型

原始代码被重写

  • 虚拟器:将原始代码转换为嵌入虚拟机的虚拟代码
  • mutater:改变代码——相同的指令集和架构,但修改了:
    • 回流
    • 寡态性

额外功能

  • 捆绑器:文件删除,带有 API 挂钩(使多文件程序作为单个文件运行)

这些图形可能有助于作为进一步参考。

定义

我们将打包程序定义为可执行的压缩程序。

加壳程序通过压缩可执行文件来减小它的物理大小。然后通常会寄生地将解压存根附加到可执行文件。在运行时,解压存根扩展原始应用程序并将控制权转移到原始入口点

几乎所有现代平台都存在打包程序。打包机有两种基本类型:

  • 就地(在内存中)
  • 写入磁盘

就地加壳程序执行所谓的就地解压缩,其中解压缩的代码和数据在其加载的同一位置结束。解压完成后,附加到这些压缩可执行文件的解密存根在运行时将控制转移到原始应用程序入口点。

写入磁盘打包程序有一个解密存根(或整个模块),它在运行时将解压缩的应用程序写入文件系统或内存块,然后通过普通 API 执行应用程序代码将控制权转移到原始应用程序调用。

用途

可执行压缩器的初衷是在磁盘空间非常宝贵的时候减少存储需求(磁盘大小)。它们还可以降低传输的压缩可执行文件的网络带宽占用,至少在网络流量不会被压缩时如此。

如今,磁盘空间没有溢价,因此它们的使用不太常见。它们最常用作防止逆向工程的保护系统的一部分。可悲的是,滥用也很普遍。

虐待

一些加壳程序被恶意软件作者滥用,试图向扫描程序隐藏恶意软件。大多数扫描程序可以扫描“内部”(解压缩)打包的可执行文件。具有讽刺意味的是,对恶意软件使用加壳程序通常会适得其反,因为它会使恶意软件显得可疑,从而使其受到更深层次的分析。

附加功能

可以向封隔器添加其他功能,例如防止逆向工程,使封隔器也成为保护器。压缩过程本身就是一种混淆和抽象的形式,本质上作为某种保护。