2022-06-30摩登7平台地址

我必须说我将 MAXMEM 变量的值设置为 1,以便 摩登7平台地址 内存只能保存两个值。反正我们不需要更多,但它对于演示控制内存溢出或下溢的函数的操作很有用。这是虚拟机的屏幕截图。

使用代码虚拟化进行混淆
虚拟机操作

一切似乎都在正常工作。现在让我们看看如何解开隐藏在这样一个虚拟机中的代码。

其实一切都很简单:你需要把这个文件加载到反汇编器中,找到我们的switch/case循环,看看和我们的指令常量比较的地方。通过与常量比较后查看每个分支,您可以确定该常量指令负责什么。

因此,我们可以编写一个自动脚本,其运行将分解我们所有的字节码,并为代表虚拟机指令的子程序提供正确的名称。事实证明,在花一些时间分析虚拟机之后,您可以编写一个通用脚本,将这个虚拟机从任何程序中“删除”。毕竟我们会知道常量指令的所有值!但事实并非如此……

还记得我们为命令赋值的助记符枚举吗?我答应回到他身边。它可以写得有点不同:

没有什么不寻常的,只是 xor(按位异或)运算应用于我们助记码的每个值。但要注意这个变量是如何初始化的。

我们使用预定义的常量 __TIMESTAMP__ ,将其转换为一个数字并将其用于异或。这个常量需要编译时间,所以对于每个编译的程序,操作的值都会不同。在这种情况下,编写一个自动反汇编虚拟机的通用脚本变得更加困难。

结论

在本文中,我们研究了如何制作自己的虚拟机来执行我们的源代码。当然,在保护器中使用的严肃的商业虚拟机中,一切都要复杂得多,但这是第一个近似值 - 演示了当您需要拆卸此类保护机制时必须面对的情况。