如何混淆x86汇编代码?
How to obfuscate x86 assembly code?
对于我的项目,我正在对一部分代码执行一种校验和操作以保护它,因此不希望它的模板很容易被看到,因此需要混淆。
我在网上搜索了很多,阅读了描述混淆定义、类型等的论文。但是似乎没有关于混淆x86汇编代码的教程。任何人都可以建议一个简单的 algorithm/tool 吗?
我读过有关插入伪代码、更改指令顺序和其他技术的信息,但它们似乎完全是随机的,即插入多少伪代码是没有尽头的,等等。
至少有人可以指导我采用正确的方法吗?
我认为您无法获得 "simple" 方法。
汇编程序主要由指令串组成。每条指令做几件不同的事情(例如,添加到寄存器,设置条件代码,更改 PC 并将地址压入堆栈,...)。
但是,任何特定指令都可能只针对其中一种效果执行("essential effects" 用于 that 指令),其他效果将被忽略。
您的问题之一是更改工作(汇编程序)程序,保留基本效果并利用忽略非基本效果所允许的自由来增加混乱。从根本上说,对于具有特定效果的特定指令序列,您可以通过发现具有完全相同代数效果的另一条指令(序列)并将答案放置在与原始序列相同的目标位置来保留效果。
您需要的是 "replace this by (the equivalent) that" 各种 this 和 that 的方法,它们在代数上是相同的。
您可以手动完成此操作。多少才够?当您要保护的代码对您来说足够难以理解时停止。 [如果您想更改该代码,这可能会给您带来自我造成的代码维护问题]。
另一种方法是使用程序转换系统,这是一种用于转换源代码的工具,由要转换的编程语言的描述参数化。
请在此处查看示例:
这种方法意味着您可以将代码保留在其原始 "maintainable" 状态,然后在最后的构建步骤中应用混淆转换。
对于我的项目,我正在对一部分代码执行一种校验和操作以保护它,因此不希望它的模板很容易被看到,因此需要混淆。
我在网上搜索了很多,阅读了描述混淆定义、类型等的论文。但是似乎没有关于混淆x86汇编代码的教程。任何人都可以建议一个简单的 algorithm/tool 吗?
我读过有关插入伪代码、更改指令顺序和其他技术的信息,但它们似乎完全是随机的,即插入多少伪代码是没有尽头的,等等。
至少有人可以指导我采用正确的方法吗?
我认为您无法获得 "simple" 方法。
汇编程序主要由指令串组成。每条指令做几件不同的事情(例如,添加到寄存器,设置条件代码,更改 PC 并将地址压入堆栈,...)。 但是,任何特定指令都可能只针对其中一种效果执行("essential effects" 用于 that 指令),其他效果将被忽略。
您的问题之一是更改工作(汇编程序)程序,保留基本效果并利用忽略非基本效果所允许的自由来增加混乱。从根本上说,对于具有特定效果的特定指令序列,您可以通过发现具有完全相同代数效果的另一条指令(序列)并将答案放置在与原始序列相同的目标位置来保留效果。
您需要的是 "replace this by (the equivalent) that" 各种 this 和 that 的方法,它们在代数上是相同的。
您可以手动完成此操作。多少才够?当您要保护的代码对您来说足够难以理解时停止。 [如果您想更改该代码,这可能会给您带来自我造成的代码维护问题]。
另一种方法是使用程序转换系统,这是一种用于转换源代码的工具,由要转换的编程语言的描述参数化。 请在此处查看示例: 这种方法意味着您可以将代码保留在其原始 "maintainable" 状态,然后在最后的构建步骤中应用混淆转换。