曾經在阿里碰到一道面試題
面試官問:APK打包流程是什麼
(更多完整項目下載。未完待續。源碼。圖文知識後續上傳github。)
(可以聯繫我VX:×××)
今天本文主要講解:
APK文件反編譯
- 什麼是反編譯
- 如何防止反編譯
- APK文件的基本構造
APK加固的方案原理
- APK加固總體架構
- APK打包基本流程
- Dex文件的意義
AES加密項目實戰
- APK加固項目實戰
- APK脫殼技術實戰
一.APK文件反編譯
1.什麼是反編譯
- 定義:
利用編譯程序從源語言編寫的源程序產生目標程序的過程2.怎麼進行反編譯?
先了解apk的文件構造結構
二.加固方案思想
一個程序員的故事:
辛辛苦苦找到一個對象,結婚後發現是個母夜叉。不給管錢就鬧,晚上睡覺她趴着睡,導致這程序員無法去洗腳了。然而這個程序員很努力,平時除了上班,還能夠做點外包,賺點外快。所以他就想到了把工資卡上交,而把賺到的外快放到了自己的小金庫。從此過上了X福生活
一個加密的故事:
通過將非核心的dex文件進行暴露來達到保護核心dex文件的目的。
三.基本原理
3.1Apk打包流程
加殼是在原來apk的基礎上加一層保護殼,dex文件修改了就需要重新打包,否則apk安裝不了。這就需要我們詳細學習apk如何打包的
3.2Dex文件是什麼
加固的目的是保護dex,直接而言就是對dex文件進行操作,對dex文件動刀子,必須知道dex文件是什麼,能否直接動刀子
3.3Dex文件加載流程
加殼後的文件是不能直接用的,dex文件是加密的,所以我們需要對他進行解密,解密後的dex文件如何加載?
3.4APK文件是怎麼生產的
四.加固總體框架
那麼問題來了:
- 如何達到加密效果?
- 爲什麼是兩個系列的dex?
- 殼dex 怎麼來的
- 殼dex如何保護源dex?
- 如何簽名?
- 如何運行新dex(如何脫殼)?
4.1加密過程
4.2APK文件如何簽名
4.3APK文件如何運行(脫殼)
4.4如何制定某些類在 main dex中
multiDexKeepFile
:手動加入要放到Main.dex中的類com.umeng.analytics.Abb.class
multiDexKeepProguard
:以Proguard的方式手動加入要放到的Main.dex中的類-keep public class com.tencent.bugly.**{*;}
總結
完成APL加固,我們需要具備的知識體系有哪些
(更多完整項目下載。未完待續。源碼。圖文知識後續上傳github。)
(可以聯繫我VX:×××)