2011-08-08 184 views

回答

2

我懷疑是否會有通用的解決方案(考慮間接分支等),LLVM IR比任何彙編器都要「高級」。雖然有可能在每個BB的基礎上進行翻譯。您可能想要檢查llvm-qemu和libcpu項目等。

+3

LLVM能夠捕獲高級信息,恕我直言,它不是必需的。我相信可以有解決方案 - 也許不是一種普遍的方法,但仍然存在。感謝您的參考:llvm-qemu和libcpu看起來很有趣。 :) –

+1

順便說一句。如果[有可能LLVM到Javascript trsnalation,它實際上實現](http://stackoverflow.com/questions/7295922/what-platform-can-i-compile-binaries-for-using-llvm-low-level-virtual -machine/7325817#7325817),另一個組件也是可能的;)。問題,你什麼時候會這樣做:)。 –

10

考慮使用RevGen工具在S2E project內開發。它允許將x86二進制文件轉換爲LLVM IR。源代碼可以通過url https://dslabgit.epfl.ch/git/s2e/s2e.git從GIT存儲庫的Revgen分支檢出。

+1

我看到你已經[這裏提到](http://stackoverflow.com/a/9059978/544721)另一個[論文](http://infoscience.epfl.ch/record/149975/files/x86-llvm- translator-chipounov_2.pdf)與x86 - > LLVM翻譯相關。感謝您的參考。 –

+0

我有提供的鏈接問題。 'git clone https:// dslabgit.epfl.ch/git/s2e/s2e.git'不能克隆:/。 –

+0

我在Ubuntu 10.10上沒有任何問題。確保你已經安裝了git並且正確的防火牆/代理設置。您也可以在項目的網站上找到一些相關文檔_https://s2e.epfl.ch/embedded/s2e/index.html_ – bsa2000

0

上平移臂二進制LLVM IR只是張貼一些參考:

繳械 - 手臂二進制LLVM IR反彙編

https://code.google.com/p/disarm/

不過,我還沒有嘗試過,所以不知道它的質量和穩定性。其他人可能會發布有關此項目的其他信息?

+1

提供的鏈接不起作用 –

+0

看來作者已經撤消了它......幸運的是,我有一個本地svn來備份它的代碼。 – HackNone

7

對於@ bsa2000提到的RevGen工具,這篇最新論文"A compiler level intermediate representation based binary analysis and rewriting system"指出了S2E和Revinc中的一些限制。

我把它們拉出來。

  1. 缺點動態翻譯的:

    S2E [16]和Revnic [14]提出了使用動態QEMU轉換 86到LLVM的方法。與我們的方法不同,這些方法將 代碼塊轉換爲LLVM,從而將LLVM 分析的應用程序一次僅限制到一個塊。

  2. IR不全:

    Revnic [14]和RevGen [15]通過合併所述翻譯 塊恢復的IR,但所回收的IR是不完整的,只適用於 當前執行;因此,各種全程序分析將提供不完整的信息。

  3. 沒有抽象棧或促進信息

    另外,翻譯的代碼保留了原始 雙進制有關堆棧佈局的所​​有的假設。他們不提供任何 方法來獲得抽象堆棧或將存儲器位置 升級爲符號,這些符號對於應用幾個源級分析是必不可少的。

1

有新的項目,在一些早期的階段是,該libbeautyhttps://github.com/jcdutton/libbeauty

文章關於項目:Libbeauty:另一種逆向工程工具,2013年12月24日,邁克爾·拉拉貝爾 - http://www.phoronix.com/scan.php?page=news_item&px=MTU1MTU

它現在只支持x86_64的子集作爲輸入。其中一個項目目標是能夠將生成的LLVM IR編譯回程序集以獲得具有相同功能的二進制程序。

+0

項目看起來不錯!謝謝! –

8

mcsema是一種生產品質的二進制提升器。它需要x86和x86-64,並靜態「提升」到LLVM IR。它被積極維護,獲得BSD許可,並且有廣泛的測試和文檔。

https://github.com/trailofbits/mcsema