找到它们将提供一个机会,可以使用任何首选的语言编写小型反汇编程序,其中“ 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