2013-03-30 45 views
3

不知道標題是否是描述性最好的方式,但它的描述性和我想象的一樣。如何自動查找Java字節碼中的相似性?

無論如何,到問題。我想知道如何在字節碼中找到相似之處。我的意思是很難正確解釋(至少對我來說),所以我會舉一個例子。

我有aba.class和nhf.class。這些類是我製作的遊戲中的混淆類。我提供了這個遊戲的一個修改版本,它只是在一些地方有一些小的代碼更改,但因爲遊戲是出售的,每次有新更新時它都會被重新混淆。我希望能夠通過檢查類的字節碼的相似程度來判斷什麼類已經改變爲重新混淆中的內容。我知道這是可能的,但我不知道如何檢查如何做到這一點。

有沒有一個庫,程序或其他東西可以解析字節碼,並檢查它是多麼相似,還是我必須自己寫這個?如果我不得不自己寫,我會很感激有人指出我正確的方向(或者將我聯繫到可能有幫助的事情等)。

此外,我正在考慮用代碼而不是手動執行此操作,以防不明顯。

+0

您可以開始區分兩個類的'javap'輸出。也許忽略符號表(或只是比較它們的大小)。見http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javap.html –

+0

嗯,我想大小是一個開始,但理想情況下,我希望能夠確定類,方法和領域(即使實際的功能(不僅僅是字段/方法/類名)已經改變了一點(顯然如果一半的類被改寫了,情況就不是這樣了)。我想我會看看大小的東西,但希望實現它,謝謝你的信息! – DziNeIT

+0

你寫的代碼對嗎?你不知道答案嗎? –

回答

0

可以有一個簡單的解決方案:

我不知道你用什麼混淆(也許Proguard的),但它可能產生的地圖模糊的類名映射到非混淆的類名。 (如果沒有,你可以切換到Produard,它會生成這樣的地圖。)

因此,只要您有該版本的地圖,就可以將混淆的類名轉換爲原始類名(反之亦然)。

因此,您可以通過匹配原始類名來從這兩個地圖製作此類地圖。