分享:APK進階保護方法解析(一),分享apk保護解析
查天氣、找美食、玩遊戲、買電影票、網上購物……安裝APP後,手機變成“百事通”。不過,智能手機越來越“聰明”,也越來越不安全,病毒感染、垃圾簡訊、隱私泄露等關乎手機使用者切身利益的問題頻發。保護手機安全,不僅需要使用者到正規官網下載APP,更重要的是開發人員要做好APK安全保護工作。 http://write.blog.csdn.net/postedit
下面小編就分享一下APK進階保護的方法——運行時驗證
運行時驗證,主要是指在代碼啟動的時候本地擷取簽名資訊,然後對簽名資訊進行檢驗來判斷自己的應用是否是正版,如果簽名資訊不是正版則提示盜版或者直接崩潰。
它的原理:APK的唯一識別是根據包名+簽名,包名資訊是寫死在Android Manifest.xml裡面的,但是簽名則是與APK綁定的,一旦APK被反編譯後簽名會自動消失。APK的簽名需要簽名檔案,簽名檔案的md5值基本上是無法偽造成一樣的。
簽名驗證的方法也可以細分為3種:
1) Java 層驗證
擷取簽名資訊和驗證的方法都寫在android 的java層。這種保護方法保護的意義並不大,因為反編譯出源碼後通過關鍵字搜尋很快就能夠找到驗證的代碼塊,稍微一修改這驗證保護就完全無效了。
2) 伺服器驗證
在android 的java層擷取簽名資訊,上傳伺服器在服務端進行簽名然後返回驗證結果。這種保護還不如在純java層驗證有用,一旦沒有網路驗證保護就無效了。用android方法擷取的簽名資訊用java方法也可以擷取,驗證存放在伺服器上也是為了把保護正確的簽名資訊值,但是保護的意義其實沒有任何作用,同樣破解後全域搜尋索引鍵然後偽造一個正確的簽名資訊就可完美破解了。
3) NDK技術底層擷取簽名和驗證
通過把Context,Activity,PackageManager,PackageInfo四個對象中的一個作為參數參入底層,在底層擷取簽名資訊並驗證。因為擷取和驗證的方法都封閉在更安全的so庫裡面,能夠起到一定意義上的保護作用。不過通過java層的hook技術一樣可以把這種保護完美破解。但是相比於前兩種,此保護的意義和價值就更大了。
再來看一下愛加密(www.ijiami.cn)的APK保護方法,它採用指紋校正保護APK中的檔案。加密後,APK中所有的檔案都對應一個唯一的指紋,每次運行時,APK內部會再次進行指紋產生,如果產生的指紋和原本指紋不相同,則判斷為被二次打包過的APK,程式就會自動結束或直接崩潰。該方法可以防止資源檔、主設定檔被修改或刪除等操作,完全保證APK的安全。
安卓手機遊戲破解太猖狂了,怎加固apk來預防保護?
是呀,也一直再找apk加固的方法。
比較進階一點的就是代碼進階混淆花指令方式對apk加固,花指令是程式中有一些指令,由設計者特別構思,希望使反組譯碼的時候出錯,讓破解者無法清楚正確地反組譯工具的內容,迷失方向。(花指令)目的就是利用反編譯工具漏洞,來使工具無法使用。jd-gui的bug其實挺多了
很多特殊代碼塊或者欄位集都能夠讓其崩潰無法反編譯出源碼。
不過花指令的注重的思想,比較平常的就很容易被破解。後來在看雪安全論壇裡看到
愛加密app加密平台,試用了下,感覺還不錯,一直在用。你可以試試。
目前Android怎防止apk程式被反編譯?預防手機遊戲被破解的問題, 除了proguard代碼混淆方法,目前不行了
對DEX加密保護啊!!!
就是給Android APK做的進階加密保護,一般的混淆代碼和防二次打包都不行了。所以我現在都用愛加密的保護,對DEX、RES、SO庫等主要的Android APK檔案加密。(而且還是免費的)