逆向工程基于虚拟机的crackme

逆向工程 拆卸 部件 快手 操作码 虚拟机
2021-06-10 21:03:57

我目前正在研究一些已经实现了混淆技术虚拟化的crackme。这个crackme里面的虚拟机是一个巨大的switch-case块(里面有130多个case)。我已经阅读了数十篇文章,但没有一篇文章说得足够清楚。

不过,我发现了一些信息,我可以在内存中找到一些缓冲区,其中包含操作码,这些操作码是本机汇编代码,然后由虚拟机在 switch case 块中进行解释。

找到它们将提供使用任何首选语言编写小型反汇编程序的机会,其中“案例”块将是编写的本机操作,例如printf("mov eax, dword ptr [ebp-4]"). 这样我就可以找出生成和检查序列的算法。

但是,我坚持使用操作码找到该内存位置。任何人都可以建议我如何找到这些,一些技术,或者至少一些关于如何处理这种事情的好的文献或教程?可能有一些常见的方法可以破解这种crackme。

非常感激您的帮忙。

1个回答

首先,将程序转换为字节码,由精心制作的 VM 解释并将其嵌入到软件中,这一事实是一种众所周知的混淆技术。已经有很多关于它的著作。

如果您想找到有关它的好的指示(以及如何以不同的方式解决它),我建议您在任何搜索引擎上搜索“基于 VM 的混淆”。它应该为您提供大量有关它的文献。

现在,解决这种事情首先需要识别机器的内部语言,然后才能理解用这种语言编码的程序。目前,这个过程的自动化进展很少,仍然需要大量人员来指导和理解混淆程序中发生的事情。

然而,您可以看到的一件好事是,VM 本身通常看起来像另一种称为“ CFG-flattening ”的混淆,可以部分自动处理(尽管我不能建议您使用任何公共工具)。无论如何,基于VM的混淆和CFG-flattening混淆在某种程度上非常接近(CFG-flattening是基于VM的混淆的一个子案例),所以不要犹豫,看看这两种技术和可能相关的技巧到它。

以下是一些您可能会发现相关的提示:

关于基于 VM 的混淆

此外,本网站中的这个问题也值得一看。

关于 CFG 扁平化

当然,您可以自己找到更多有用的链接!随时自行改进列表!我只是希望这些能对你有所帮助。