我知道打包机的基本原理。基本上,它是在程序开始时启动的一个小程序,解压实际程序并在完成后跳转到它。
然而,围绕这一原则似乎有很多变化。我最近了解了“虚拟化加壳器”或“即时加壳器”,我可能会错过很多。那么,有人可以定义什么是基本包装器,然后解释可以遇到的不同类型吗?
我知道打包机的基本原理。基本上,它是在程序开始时启动的一个小程序,解压实际程序并在完成后跳转到它。
然而,围绕这一原则似乎有很多变化。我最近了解了“虚拟化加壳器”或“即时加壳器”,我可能会错过很多。那么,有人可以定义什么是基本包装器,然后解释可以遇到的不同类型吗?
二进制加壳程序会更改原始二进制数据,并在执行之前(或多或少)恢复它。
它们的不同名称更多地取决于它们的特性:很难清楚地区分,因为仅仅放置一个反调试和一个异或循环就会使包装器同时成为保护器和密码器。
额外的打包代码被执行
原始代码被重写
这些图形可能有助于作为进一步参考。
我们将打包程序定义为可执行的压缩程序。
加壳程序通过压缩可执行文件来减小它的物理大小。然后通常会寄生地将解压存根附加到可执行文件。在运行时,解压存根扩展原始应用程序并将控制权转移到原始入口点。
几乎所有现代平台都存在打包程序。打包机有两种基本类型:
就地加壳程序执行所谓的就地解压缩,其中解压缩的代码和数据在其加载的同一位置结束。解压完成后,附加到这些压缩可执行文件的解密存根在运行时将控制转移到原始应用程序入口点。
写入磁盘打包程序有一个解密存根(或整个模块),它在运行时将解压缩的应用程序写入文件系统或内存块,然后通过普通 API 执行应用程序代码将控制权转移到原始应用程序调用。
可执行压缩器的初衷是在磁盘空间非常宝贵的时候减少存储需求(磁盘大小)。它们还可以降低传输的压缩可执行文件的网络带宽占用,至少在网络流量不会被压缩时如此。
如今,磁盘空间没有溢价,因此它们的使用不太常见。它们最常用作防止逆向工程的保护系统的一部分。可悲的是,滥用也很普遍。
一些加壳程序被恶意软件作者滥用,试图向扫描程序隐藏恶意软件。大多数扫描程序可以扫描“内部”(解压缩)打包的可执行文件。具有讽刺意味的是,对恶意软件使用加壳程序通常会适得其反,因为它会使恶意软件显得可疑,从而使其受到更深层次的分析。
可以向封隔器添加其他功能,例如防止逆向工程,使封隔器也成为保护器。压缩过程本身就是一种混淆和抽象的形式,本质上作为某种保护。