簡體   English   中英

用自定義類替換Java API類?

[英]Substitute a Java API class with custom class?

我有一個使用android.opengl.GLSurfaceView類的封閉源Android程序。

我需要注入一些Java代碼(注入已經完成),用我自己的GLSurfaceView類(鈎子)替換所有與android.opengl.GLSurfaceView相關的處理,而無需更改原始代碼(沒有源代碼,不允許反匯編)。

基本上,就Win32 C編程而言,這是一種API掛鈎,但在Java / Android中。

您無法執行此操作,而您無法執行此操作的原因是,這將嚴重違反安全性。 例如,如果有一種機制可以執行此操作,則您將可以覆蓋阻止已下載的Java應用程序在計算機上安裝惡意軟件的類。

您可以通過修改安裝的字節碼以使GLSurfaceView有所作為,或者通過修改應用程序的字節碼以使其調用替代類而不是GLSurfaceView來執行此操作。

如果要注入代碼的類不是最終類,則可以擴展該類並重新實現所需的方法(同樣,僅當該方法不是最終方法時)

您將無法使用Java反射來執行此操作。

最好的選擇是使用字節碼重寫機制來修改封閉源程序的字節碼。 如果您使用的是“真正的Java”,我建議BCEL。 您需要處理Davlik代碼,而且我不知道Davlik是否有BCEL模擬。

這假定您可以某種形式訪問此封閉源應用程序的字節碼,該字節碼允許您在不違反安全規則的情況下進行修改。 例如,如果應用程序已簽名,則更改字節碼將使簽名無效。

而在不違反逆向工程限制的情況下做到這一點將是另一個困難。


聽起來您需要放棄這個想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM