[英]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.