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

注入思路流程圖
四、流程詳解
- 將目標(biāo)apk反編譯出smali1文件;
- 把目標(biāo)apk解壓后,使用dex2jar工具將dex文件轉(zhuǎn)為jar文件;
- 通過(guò)JD打開(kāi)jar文件,查看目標(biāo)App業(yè)務(wù)邏輯,找到對(duì)應(yīng) 注入的地方;
- 開(kāi)發(fā)jar包庫(kù)文件;
- 將jar包文件轉(zhuǎn)為smali2文件;
- 把smali1和smali2合成為smali3文件;
- 在smali1文件中調(diào)用smali2相關(guān)代碼,完成注入;
- 回編譯;
- 重簽名;
- 安裝測(cè)試;
綜上:通過(guò)反編譯工具,再結(jié)合注入流程,即可將我們想要的功能注入到APK安裝包,實(shí)現(xiàn)代碼注入的目標(biāo)