自修改代码算法

4

有些程序在运行时生成可执行代码。例如计算机病毒和打包二进制文件。这使得静态分析非常困难。

除了打包算法之外,是否有任何通用算法用于自修改代码的生成?或者编译器支持?我在哪里可以获取相关文档或论文?自修改代码和多态代码有什么区别?

我很好奇。

提前感谢您。


程序在某种程度上只是数据,因此自修改代码没有单一的通用算法,就像操作整数集合的单一通用算法一样。 - user395760
多态代码在不同的实例中会做不同的事情,有点像抽象。自修改代码实际上会对自身进行一些修改(显然),而多态代码并不一定会这样做。 - Hurricane Hamilton
多态代码在我看来意味着重写自身以使用不同的指令集执行基本相同任务的代码。除了病毒试图没有固定的代码序列匹配外,人们还可以将这个概念用于数字版权管理。 - Aki Suihkonen
自修改代码主要与病毒无关,而是与8位架构有关,在这种架构中,更复杂的指令(例如间接跳转到子程序)最容易通过在运行时更改包含目标的立即数来模拟。将常量参数直接写入指令可以加速具有恒定参数的循环。 - Aki Suihkonen
你想要做什么?任何在执行时修改自身的代码都是自修改代码的一部分。多态代码和变形代码是自修改代码的具体情况,主要用于代码混淆。在恶意计算机病毒行业中,多态和变形代码被用来使简单的模式匹配检测不可行,因为使用了大量不同的操作码编码来实现相同的算法,可能还会加入一些随机化。请参阅[Hunting for Metamorphic](http://www.symantec.com/avcenter/reference/hunting.for.metamorphic.pdf)。 - nrz
我在想是否有任何正式的方法将二进制代码转换为等效的自修改形式。我认为自修改代码对保护程序免受反向工程很有用。 - daehee
1个回答

1
如delnan所提到的,任何程序在处理器尝试运行之前都只是数据。
要练习自修改代码,请执行以下步骤:
  • notepad.exe复制到notepad_orig.exe
  • 启动notepad_orig.exe
  • 在现在打开的记事本窗口中打开notepad.exe
  • 输入任何想要的内容
  • 保存并关闭
这可能是一个愚蠢的例子,但这里没有更多的事情发生。记事本获取外部数据源(您!)来改变其代码。
如果您正在寻找算法,建议您寻找一个提供应用程序自动更新的框架。这是我能想到的唯一实际的例子,而且不是非法的。
回应您的评论,您当然可以加密部分应用程序,并在使用之前对其进行解密。但是,为了使应用程序运行,它必须以已解密的形式存在于内存中,并且可以被读取。您可能只会使应用程序更难维护。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接