2009-02-18 65 views
2

您是否有人知道一種技術來識別已編譯文件中的算法,例如:通過測試一些模式的反彙編?在二進制文件中識別算法

我有罕見的信息是存在這樣一個解壓縮字節[]的內容庫的一些(不出口)的代碼,但我不知道如何工作的。 我有一些文件,我相信這是以未知的方式壓縮,它看起來好像文件沒有任何壓縮頭或預告片。我假設沒有加密,但只要我不知道如何解壓縮,它對我來說毫無價值。

我擁有的庫是針對低容量目標的ARM9二進制文件。

編輯: 這是一個無損壓縮,存儲二進制數據或純文本。

+0

你是在linux/unix機器上,也許使用cygwin?那麼你有沒有試過文件上的「文件」命令? – epatel 2009-02-18 20:44:05

+0

...我可能會添加一個壓縮文件。請參閱http://en.wikipedia.org/wiki/File_(Unix) – epatel 2009-02-18 20:47:10

回答

2

解壓縮算法涉及在嚴格循環中顯着循環。你可能首先開始尋找循環(遞減寄存器,如果不是0則向後跳)。

由於它是一個小目標,你必須手動解碼它的一個很好的機會,雖然它看起來很難,現在,一旦你深入到它,你會發現,你可以識別各種編程結構自己。

你也可以考慮反編譯它向更高層次的語言,這將是比組裝更容易,但仍然很難,如果你不知道它是如何被編譯做。

http://www.google.com/search?q=arm%20decompiler

- 亞當

0

逆向工程通過查看組件可能有版權問題進行。特別是,從版權的角度來看,編寫一個解壓縮程序幾乎是一樣糟糕的,就像你自己使用程序集一樣。但後者要容易得多。所以,如果你的動機只是爲了能夠編寫你自己的解壓縮工具,那麼移植你的程序集可能會更好。

3

你可以走幾個方向,用IDA Pro之類的東西進行靜態分析,或者加載到GDB或模擬器中,然後按照代碼的方式進行操作。他們可能會對數據進行異或以隱藏算法,因爲已經有很多好的損失少的壓縮技術。

0

從我的經驗來看,大部分時間文件都是用普通的Deflate壓縮的。您可以嘗試使用zlib打開它們,從不同的偏移量開始補償自定義標題。問題是,zlib本身添加了自己的頭文件。在python中(我猜其他實現也有這個功能),你可以傳遞給zlib.decompress -15作爲歷史緩衝區大小(即zlib.decompress(data,-15)),這會導致它解壓縮原始泄漏數據,沒有zlib的頭文件。

1

可靠的方式做到這一點是拆卸圖書館看書產生的彙編代碼解壓縮程序(並通過它在調試器可能步驟),看看它到底是什麼做的。

但是,你也許可以看看magic number的壓縮文件等弄清楚使用的是什麼樣的壓縮。例如,如果使用DEFLATE進行壓縮,則前兩個字節將爲十六進制78 9c;如果與bzip2,42 5a;如果與gzip,1f 8b