簡體   English   中英

以編程方式找出是否對Java類進行了修補?

[英]Figuring out programmatically if a Java class was patched?

如果有人修補一類已編譯的代碼,尤其是在Android中,是否可以通過編程方式解決? 示例:我的建築物(例如.apk)包含一個PiracyCheck.class類。 是否可以在編譯時運行該類的某種“校驗和”(由另一類執行)? 我想我可以從中獲得任何價值,例如abcdefg。 如果有人修補此類,則校驗和將突然變為123456,而不是abcdefg。 我在后端服務器上驗證校驗和。 如果校驗和正確,則繼續,否則,中止。 還是有更好的解決方案來實現這一目標?

(btw:如果破解者想要重新打包並為應用程序重新簽名,那么我已經很安全了,因為我還檢查了簽名,但是我敢肯定,任何人都可以通過反編譯和編輯字節碼本身來繞過此檢查,表示不需要辭職,證書也不會更改)。

您可以做一些這樣的事情。 但是您不能將它們組合到一個系統中,該系統將阻止某人運行代碼的“破解”版本。

是否可以在編譯時運行該類的某種“校驗和”(由另一類執行)?

如果有可能在編譯時生成類的加密校驗和,請在服務器端或“ .apk”中或兩者中進行記錄。

也可以在客戶端計算這種校驗和。

您無法執行的是強制Android平台或被黑的“ .apk”生成真實的校驗和:

  • 我認為Android平台不提供此功能,如果可以,則可以在“有根”設備上進行顛覆。

  • 自然,如果有人麻煩破解您的“ .apk”,他們可以顛覆“ .apk”中的任何“自我校驗和”代碼以提供原始校驗和,而不是實際代碼的校驗和。

無論哪種方式,您的服務器都會看到它期望的校驗和,而不是實際代碼的有效校驗和。 它將被愚弄。


基本上,如果您需要在有效控制用戶的平台上執行代碼,則不能阻止用戶破壞您的代碼。 您所希望的最好的辦法就是使具有適當技能的人很難做到這一點。

暫無
暫無

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

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