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 

還對谷歌搜索「項目布考斯基」