3

我想找到关于不同设计的变质发电机的参考文献,有人可以指点我正确的方向。我在ACM上看过一些论文,但找不到我要找的内容。变质发电机

+0

你能否详细一点?什么是变质发电机?与变态代码相同? – 2009-12-12 06:45:11

+1

这些程序是否会产生无法检测到的病毒和蠕虫? http://www.truststc.org/pubs/235.html – 2009-12-12 07:26:29

+0

注意到您正在通过ACM查找......您在病毒编写器网站上发现的任何数量级的病毒都可以找到。这就是说,除非你正在寻找介绍性的材料,否则使用纯粹的直觉和编译器知识会让你更好。 – 2010-05-22 23:46:03

回答

9

如果你指的是变质引擎,我不知道任何好的引用。我认为这起源于,这个问题仍然是禁忌,因为它通常被病毒作者使用。我认为这是不合理的,因为这项技术本身的优点很有意思。我一直对自我修改和自我修复系统着迷。还有人可能会说它与AI领域稍有关系。

对于不知情的变形引擎是一个可执行文件,它可以改变每个字节和指令本身,这样虽然新文件内容与前一代相比是唯一的,但总体算法是相同的。当病毒首次使用该技术时,防病毒软件供应商在识别病毒方面遇到重大困难,因为仅仅通过签名识别病毒在每一代都不同时无效。多态和变态病毒的引入标志着反病毒软件从签名转换为启发式的时代。也就是说,不是看确切的代码或字节流,而是试图推断代码的作用是

实现这样一个事情时会遇到几个问题,这取决于所使用的可执行格式和CPU体系结构:一些RISC体系结构不能保存完整的32位立即数,因此代码段不可避免地为立即数保存数据池,这是通过双重查找获取的。这是一个严重的阻碍,因为你需要一种将代码与数据分开的方式。也就是说,一些数据值可以合法地表示为代码,反之亦然。 如果您的程序与动态库(如说,C运行时)链接,则还需要重新计算重定位所使用的信息,这是非平凡的。
而最大的问题是,这样的程序往往会在每个新一代的规模上呈指数级增长。如果初始化“简化”算法(如下所述)做得不好,则会增加越来越多的垃圾代码。而“糟糕的工作”类型意味着它无法将代码简化为无懈可击。上一代任何额外的“膨胀”都会累积起来。

通用技术的工作原理如下: 应用程序必须自行读取并解析可执行格式(ELF,COFF,a.out,PE)。然后对于每组N个指令,它试图简化算法。例如,在值X之后增加一个减值X实际上是一个noop,可以忽略。可以将a*b+a*c简化为a*(b+c),保存一条指令。所以这个简化器找到了整个算法的基本骨架,因为它以前经历了变形。
接下来,通过相反的操作再次对代码进行混淆。采取N个指令,并用其他做同样事情的其他东西替换它们。其他阶段包括将数据立即分成几个部分,混淆字符串并将代码分解为几个新函数,然后移动代码。所有这些都是在跟踪代码和数据引用的情况下完成的。最后,代码被组装并作为可执行文件链接回其形式。

这是令人难以置信的复杂。仅适用于真正的核心汇编编码器。你被警告了。

+0

您只需将代码拆分为IR,然后将其重新编译为任意程序集。当然,这意味着,而不是_optimizing_,你_randomize_。唯一的问题是确定什么是代码,哪些不是,哪些代码跳转,解引用什么。这最终只能通过符号表来解决。符号表可以作为重组过程的一部分进行编码以保持总熵。这就是你如何击败杀毒软件,以及为什么杀毒软件是一个骗局。 – 2010-05-22 23:51:45

3

按以下virii作家写的引擎:

1) z0mbie 
2) mental driller (metaph0r) 
3) vecna 

还对谷歌搜索“项目布考斯基”