如何混淆x86汇编代码?

时间:2016-04-22 14:54:35

标签: security assembly x86 obfuscation

对于我的项目,我正在对部分代码执行一种校验和操作以保护它,因此不希望其模板容易看到,因此需要进行模糊处理。

我在网上搜索了很多,并阅读了描述混淆定义,类型等的论文。但似乎没有关于混淆x86汇编代码的教程。任何人都可以建议一个简单的算法/工具吗?

我已经阅读过有关插入虚拟代码,更改指令顺序和其他技术的内容,但它们看起来完全是随机的,即插入的虚拟代码数量无止境等等。

至少有人能指导我采用正确的方法吗?

1 个答案:

答案 0 :(得分:1)

我认为你不能采用“简单”的方法。

汇编程序主要由指令串组成。每条指令执行几项不同的操作(例如,添加到寄存器,设置条件代码,更改PC并在堆栈中按下地址,......)。 但是,任何特定指令只能针对其中一个效果执行( 指令的“基本效果”),其他效果将被忽略。

你的问题是改变一个工作(汇编程序)程序,保留基本效果并使用忽略不重要的程序所允许的自由来增加混乱。从根本上说,您可以通过发现具有特定效果的特定指令序列,另一个具有完全相同代数效果的指令(序列)并将答案放在与原始序列相同的目标位置来保留效果。

对于各种 this ,您需要“通过(等效的)”替换 那个代数相同的

您可以手动完成此操作。多少钱够了?当您想要保护的代码足以让您理解时停止。 [如果您想更改该代码,这可能会给您一个自行造成的代码维护问题]。

另一种方法是使用程序转换系统,它是一种转换源代码的工具,通过对要转换的编程语言的描述进行参数化。 在此处查看此示例:https://stackoverflow.com/a/7947562/120163 这种方法意味着您可以将代码保留在其原始的“可维护”状态,然后将混淆变换应用为最后一个构建步骤。