標籤:

Android 的 APK 中怎麼放置反編譯「炸彈」?

看到很多人推薦添加反編譯「炸彈」 以防止程序被特定反編譯器反編譯。參考 http://www.ibm.com/developerworks/cn/java/j-obfus/ ,但不清楚如何將炸彈整合到Android的APK中。


你說的不是檢測更改然後放置邏輯炸彈吧。其實以Android的許可權管理作一個邏輯炸彈是非常容易的


看完整個文章後可以明白,所謂的「炸彈」只是對於反編譯器而言。而對於JVM是沒有任何意義的,文章中也提到,反編譯器很容易繞過「炸彈」,只是反編譯器的作者沒有那麼做而已。


反 反編譯真沒啥用,現在人家是直接把虛擬機的東西dump下來。。。

為了防止別人二次打包,可添加簽名校驗。。。當然別人也可以把簽名校驗的代碼幹掉。這就是一個攻防戰了,你可以多處校驗,ndk校驗,甚至啟動10分鐘之後才校驗。

這樣做的目的不是為了防止反編譯,只是增加別人反編譯的成本,當成本大於收益時,人家就不樂意反編譯了。


APK運行環境依賴的文件/文件夾 res、DEX、主配文件Lib 只是簡單的加密甚至沒有任何加密措施。APKtool工具可輕易將其破解,再配合其他各種工具基本可以做到:源碼暴露(代碼混淆也幾乎起不到任何安全作用)、資源文件裸奔、主配文件可任意修改、核心SO庫暴露、暴力破解惡意利用等。部分大公司會對其應用APK包進行防二次打包和防APKtool破解,但其代碼都是寫在JAVA層,另外APKtool的可升級導致其安全保護級別也是非常低的。安卓APP破解技術有哪些?如何防反編譯


來總結一下:

如果防止 apk 被反編譯?

  1. 混淆代碼
  2. 使用 NDK 把 關鍵代碼用 C 實現,提高複雜度
  3. 加殼: 對二進位代碼插入代碼,運行的時候獲得主導控制權,達到隱藏,混淆,加密的功能。http://www.jianshu.com/p/eb84993f9054
  4. 對 apk 進行防止二次打包, 添加簽名校驗, 連接伺服器驗證, 可以多處校驗,ndk 校驗,啟動10分鐘後校驗,這樣的目的不是為了防止反編譯,增加別人反編譯的成本,當成本大於收益時,就不會再反編譯上浪費時間。
  5. 防止 apktool 破解,對反編譯器提供添加炸彈, main 的代碼後面添加 pop
  6. 優化 proguard, proguard 本身就可以配置 mapping, 混淆名太長會增加包大小
  7. VMP能防dump, dump 能拿到數據
  8. 混淆再加殼打包工具

https://www.ibm.com/developerworks/cn/java/j-obfus/


完全反編譯是不可能的。或使用ndk把關鍵代碼用c實現,可以大大提高分析難度


推薦閱讀:

從0開始學習 GitHub 系列之「向GitHub 提交代碼」
充話費送手機和買手機送話費有什麼本質的不同?
關於miui植入廣告的問題,大家都是怎麼發現的?
Jake Wharton 建議一個應用只使用一個 Activity

TAG:Android | 反編譯 |