我目前正在研究一些crackme,该crackme已实施了一种混淆技术(虚拟化)。该crackme中的虚拟机是一个巨大的开关盒模块(其中超过130个盒)。我已经阅读了几十篇文章,但没有一个使事情变得足够清楚。然后由虚拟机在switch case块中解释。

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

但是,我坚持使用操作码来查找该内存位置。谁能给我一些有关如何找到这些东西的建议,一些技巧,或者至少是一些有关如何处理此类问题的好文献或教程?也许有一些常见的方法可以破解这种破解方法。

非常感谢您的帮助。

#1 楼

首先,将程序转换为将由嵌入到软件中的精心制作的VM解释的字节码的事实是众所周知的混淆技术。关于它的著作很多。
如果您想找到关于它的好指针(以及如何以不同的方式解决它),我建议您在任何搜索引擎上搜索“基于VM的混淆”。它应该为您提供大量有关它的文献。
现在,解决这类问题首先需要确定机器的内部语言,然后才能理解编码为该语言的程序。到目前为止,在使该过程自动化方面仅取得了很少的进展,仍然仍然需要大量人员来指导和理解混淆程序的工作情况。 VM本身通常看起来像是另一种混淆,称为“ CFG展平”,可以自动进行部分处理(尽管我无法向您提供任何公开工具)。无论如何,基于VM的混淆和CFG平坦化的混淆非常接近(CFG扁平化是基于VM的混淆的一个子案例),因此不要犹豫,看看这两种技术以及可能相关的技巧
这里有很多您可能会发现相关的指针:
关于基于VM的混淆技术


创建代码混淆虚拟机;

打开虚拟化混淆器的包装;

Tigress C Diversifier / Obfuscator;

乔纳森·萨尔万(Jonathan Salwan)使用符号执行的去混淆方法(另请参见这些幻灯片); br />虚拟化混淆软件的去模糊化:一种基于语义的方法;

此外,此网站中的这个问题也值得关注。
关于CFG扁平化


什么是“控制流展平”混淆技术?;

控制流展平;

反模糊处理:恢复受OLLVM保护的程序;

逆向工程模糊处理代码;

当然,您自己可能会发现更多有用的链接!随意自行完善清单!我只是希望这些对您有所帮助。

评论


非常感谢您的建议和资源链接!

– ShHolmes
17年8月23日在18:55