2011-03-26 77 views
1

有點像這樣的問題How to lock compiled Java classes to prevent decompilation?,但我很清楚如何反編譯應用程序,並試圖理解它,即使它被混淆了,但有一件事我不太確定是同樣的過程會如何如果應用程序使用jni加載C庫(.so文件),則工作。例如,如果有一個計算器,如果這個計算器是用純java構建的,那麼就有可能進入並弄亂平方根按鈕,這樣當你通過2時它會返回2^3而不是然後2^2。Java反編譯和JNI

現在如果這個應用程序使用JNI來完成所有這些數學命令(所以它將2傳遞給一個本地方法),你將如何進入C,改變它以便返回2^3而不是2^2?

回答

2

反編譯比字節碼舊。幾乎所有的都可以反編譯。這肯定比較難(反編譯和理解/修改結果),並且保留了零元數據,但卻是可能的。當然,你需要一個不同的反編譯器,並且 - 正如之前所暗示的那樣 - 它會更難一些,但事實(順便說一下,所有DRM工具都不完美)「如果他們的CPU運行它,他們可以修改它」 ,對於任何字節碼,本地代碼都是一樣的。

+0

每個人的答案都是現貨。感謝大家。 – 2011-04-09 22:40:16

3

只需找出C函數簽名並編譯自己的實現該簽名的對象文件即可。

幾年前,我在一家大型機商店工作,我的老闆做了他自己的系統日期功能版本,並重新連接了我們正在使用的商業應用程序,因此他不必更新有時限的許可證。這是非法的,但它工作。

1

一個選擇是使用反彙編程序。一個更簡單的選擇是用自己的庫來替換庫。我幾乎每天都會將它用於測試目的。

1

您可以使用調試器來進入C代碼。

你可以拆卸它。 IDA(Interactive Disassembler)是一個很好的例子,它可以生成高質量的反彙編代碼(交叉引用,文檔,調用中的system/lib函數的名稱,...)。

然後可以修補二進制文件(可以用某種方式保護)。

如果您擔心的是您不希望使用您的應用的人看到代碼甚至更改它,您是否可以考慮讓它作爲Web或客戶端/服務器應用程序運行,其中用戶不有權訪問服務器?這可以讓你解決問題。