7 個回答
---------------------------------------正題----------------------------------------
暫時想到對付重打包的兩個辦法:
- 技術上預防
- 與應用商店、論壇等聯繫,要求其刪除重打包應用
下面着重分析技術上的手段
- 運行時校驗簽名
PackageManager.getPackageInfo(pkgName, PackageManager.GET_SINATURES)
簽名信息較長,可以獲取簽名對象的hashCode進行比較。
2. 運行時校驗可執行文件
App安裝完成後,會在系統中保存apk文件,啓動時校驗該文件,並與正常值比較即可。
可以只對classes.dex文件進行校驗,也可以對整個apk文件進行校驗。前者保護了代碼邏輯,後者 同時保護了佈局和資源文件(很多去廣告的重打包僅僅改變佈局文件)。
需要注意的是,正常值不能寫到代碼裏,這是由於每次編譯代碼後,校驗值會發生改變。解決方法:
- 只對classes.dex文件校驗,可以將正常值保存到res文件中或網絡上
- 對整個apk文件進行校驗,保存正常值到網絡上
需要指出的是,以上方法均有剋制手段,重打包問題很難通過單純的App本身的技術方法解決。App分發審覈機制、版權保護等也是非常重要的。
參考:
《Android軟件安全與逆向分析》(豐生強)【摘要 書評 試讀】