一、名稱解釋
- 逆向 - 是一種產品設計技術再現過程,從可運行的程序系統出發,運用解 密、反匯編、系統分析等多種計算機技術,對軟件的結構、流程、算法、 代碼等進行逆向拆解和分析,推導出軟件產品的源代碼、設計原理、結構、 算法、處理過程、運行方法及相關文檔等。
- 反編譯 – 指把機器碼(匯編語言) → 高級編程語言,也就是通過反編譯工 具對低級語言進行逆向工程,獲取其源代碼,比如JAVA的反編譯,就是將 class文件轉換成java文件。
- APK - (全稱:Android Application package,Android應用程序包)是 Android操作系統使用的一種應用程序包文件格式,用于分發和安裝移動 應用及中間件,一個包含所有代碼和資源文件的壓縮包。
二、反編譯工具
Apktool
- 功能: 將APK文件反編譯出程序源代碼、圖片資源、布局文件以 及smali文件等,并能將編譯后的項目重新打包成APK。
dex2jar
- 功能: 將classes.dex轉化成.jar文件。
JD-GUI
- 功能: 查看.jar源碼文件。
三、注入思路

注入思路流程圖
四、流程詳解
- 將目標apk反編譯出smali1文件;
- 把目標apk解壓后,使用dex2jar工具將dex文件轉為jar文件;
- 通過JD打開jar文件,查看目標App業務邏輯,找到對應 注入的地方;
- 開發jar包庫文件;
- 將jar包文件轉為smali2文件;
- 把smali1和smali2合成為smali3文件;
- 在smali1文件中調用smali2相關代碼,完成注入;
- 回編譯;
- 重簽名;
- 安裝測試;
綜上:通過反編譯工具,再結合注入流程,即可將我們想要的功能注入到APK安裝包,實現代碼注入的目標