解压自定义打包 PE 的教程或文档

逆向工程 艾达 拆卸 部件 x64dbg
2021-06-23 13:42:55

我正面临一个奇怪的情况。我有一个授权游戏在系统上执行奇怪的操作。我尽可能地隔离它并观察网络等行为,我怀疑它是一个定制的恶意软件。直到现在,它没有被任何杀毒软件发现。

在尝试使用 IDA 加载它时,我发现除了前几个偏移量之外,我根本无法对其进行分析——这意味着它很可能是用自定义打包程序打包的。直到现在我从未尝试过这样的事情,我需要这方面的教程。或者一些可能的方法来提高我的技能,或者任何用于此目的的文档。

我也试图找到一个加载程序来启动我的程序,并从某个地址转储 PE,但不幸的是不再有这样的东西,或者我还没有找到合适的工具。

非常感谢。

1个回答

此答案涵盖了您在想要分析潜在恶意样本时可以执行的整个分析过程。如果您对拆包感兴趣,请参阅手动拆包小节。

快速解决方案

为了确定您的文件是否为恶意文件,如果您不介意与其他方共享您的文件,您可以尝试以下两种解决方案中的任何一种:
  1. VirusTotal上提交文件如果你不想上传你的文件,你仍然可以通过只提交文件的哈希来检查它是否已经被扫描到那里。
  2. 将文件发送给一些防病毒公司进行分析。一些杀毒软件在他们的用户界面中有一个直接发送文件的选项,但他们也在他们的网站上提供了一个文件上传选项(我不想在这里宣传任何杀毒产品,所以我建议你把你的文件发送给他们的杀毒公司您使用的产品)。这样,您的文件将由拥有正确工具和经验的专业人员进行分析,因此如果文件有问题,他们很有可能会检测到。

好处:

  • 您不必冒险在您的虚拟机上运行潜在的恶意软件(有时恶意软件会尝试利用一些旧版本的虚拟化软件并尝试移动到您的真实计算机上,您也有可能错误配置您的虚拟机,然后恶意软件可能会导致有些伤害)
  • 快速简便,不需要额外的知识

缺点:

  • 您必须将您的文件提交给其他公司
  • 您必须信任他们正确分析文件的防病毒供应商

分析和拆包

如果您不想与任何人共享您的文件(而且似乎是这样,因为您的游戏已获得许可),您必须自己分析文件。

设置分析实验室

首先要做的是设置分析实验室。在这里我就不详细介绍了,因为很多地方都有介绍(尝试搜索“设置恶意软件分析实验室”以了解详细信息),但我将强调最重要的事情:

  • 你当然想使用虚拟机。这将为您提供安全性,但也允许您在必要时创建快照并恢复它们。
  • 您不想为该 VM 启用 Internet 连接。除非您想深入研究所使用的网络协议,否则您不需要这样做。你的问题是关于开箱的,而不是关于详细分析的——我一生分析过许多包装好的样品,但它们都不需要互联网连接才能开箱。
  • 您不想为该 VM 启用共享文件夹,因为这是另一个安全风险 - 只需将示例拖放到 VM 中即可。

人工开箱

在你安装了你需要的所有工具之后,我建议你制作一个快照——这将是任何未来分析的起点(你可能会使用的一些工具将在后面描述,但你可以随意搜索其他工具并选择它们你自己)。然后,将可疑文件拖放到该虚拟机中。

作为第一步,您可能想要进行一些动态分析以检查是否发生了可疑的事情 - 您可以为此目的使用例如regshot(在运行示例之前执行第一个 regshot 快照,在运行示例之后执行第二个快照 -然后比较它们以查看系统中所做的更改)。如果文件是恶意的,在许多情况下,此步骤将揭示它,您不需要任何进一步的分析。如果没有发生任何奇怪的事情,就该静态分析文件了。您可以按照以下步骤操作:

  1. 尝试使用Detect It EasyPEiD并查看结果。如果样品已包装,他们可能会告诉您包装商的名称。然后,您可以在互联网上搜索unpacker。你很少会找到一个,除了简单的打包机,但它不会花费你太多时间,所以我认为,值得一试。
  2. 如果您的文件确实已打包(上述工具之一已经告诉您,或者文件具有高熵),请在您最喜欢的调试器中打开它(x64dbg根据您添加到问题中的标签之一判断)。
  3. 现在,有几种方法可用于解压缩文件。我将尝试描述它们中的每一个:
  • 一些加壳器pushad在开始时使用指令,popad在结束时使用相应的指令。如果是这种情况,您可以在之后设置一个断点pushad并导航到堆栈(即ESP寄存器指向的位置)并在 处放置一个内存断点ESP+4popad执行指令时触发然后,您可能会在jmp附近看到一条指令,目标可能存储在某个寄存器中——它将是解压缩文件的入口点。您可以在执行跳转后进行转储,并从此处静态分析您的文件。
  • 第二个选项更通用,适用于许多情况。它依赖于打包程序通常使用一些特定的 API 函数来恢复原始可执行文件的事实:这些包括LoadLibraryA(和其他LoadLibrary变体 - 有关更多详细信息,请参阅 MSDN)和VirtualProtect. 您可以在这些函数上设置断点,它们通常在打包程序存根的末尾触发。当代码从这些函数返回时,您可以在jmp register附近搜索指令,如果找到,它很可能是解压文件的入口点。该函数的图形视图在这里非常有用(如果我没记错的话,您可以x64dbg触发它g)-jmp register指令将位于没有后继的节点的末尾。即使您没有找到这些说明(甚至可以通过ret或以其他几种方式完成到 EP 的过渡),您也可以尝试手动跳过说明,直到找到 EP,因为您很可能接近它。快照在这里派上用场 - 您可以不时执行它们并在执行过度时恢复(例如,如果您跳过对实际跳转到 EP 的函数的调用)。
  • 如果其他方法不起作用,您可以随时运行该程序,让它运行一段时间,然后对其进行内存转储。你不会得到一个干净的、解压缩的文件,但你很可能会看到字符串和函数。您获得的转储也可用于定位原始 EP - 您可以在 中打开它IDA,导航到某些您确定属于解压缩文件(并且不在打包程序存根中)的函数 - 例如某些函数F引用出现的字符串在您的程序中找到对它的交叉引用(按x)。然后导航到一些函数G引用F并执行相同的操作。您可以重复该过程,直到遇到H没有任何交叉引用的函数,并且它是解压缩程序中的入口函数(包含 EP)的候选函数。

对于进程转储,您可以使用LordPE. 可能也x64dbg支持转储(我不确定,我知道OllyDbg有这样的插件)。对于进口重建,您可以使用Scylla

请注意,这些方法经常有效,但并非每次都有效 - 有些保护程序使用更复杂的技术,而不仅仅是打包,并且在执行的任何时间都没有在其内存中解压文件。一些打包程序还包含 ani-debugging 技术。这些事情可能会发生在您的情况下,因为许可游戏可以受到严格保护。