Android逆向——反編譯APK改代碼

如果你想反編譯一個簡單的APK文件,修改里面的代碼,那么你不妨嘗試看一下,還是不難的。

為什么說是簡單的APK文件呢?因為復(fù)雜一點的,比如大企業(yè)的app,是不可能讓你如你所愿的,他們一般會通過復(fù)雜的分包和混淆,讓你無法獲取代碼的可讀性,讀都讀不了,更何況是動手改代碼了~

系統(tǒng):Windows

一、apktool

apktool工具的作用:

  1. 我們可以通過apktool去查看apk的AndroidManifest、XML文件和圖片資源文件。
  2. 可以修改apk中的代碼,不過并非源碼,而是smail文件,這個后面會講。

首先要下載apktool工具,我們需要去到apktool官網(wǎng)去下,鏈接是:https://ibotpeaches.github.io/Apktool/install/


翻譯過來是這樣子:

我這邊是在E盤新建一個“apktool反編譯工具”的文件夾,并將兩個文件(apktool.jar)&(apktool.bat)放在里邊,然后配置系統(tǒng)環(huán)境變量Path:

然后調(diào)出cmd命令行窗口,就可以自由使用apktool命令了~
相關(guān)命令:

//apk解析
apktool d -f E:\gongju\apktool反編譯工具\app.apk -o E:\gongju\apktool反編譯工具\test

解析后的目錄結(jié)構(gòu)是這樣的:


這里我們可以查看:
assets:資源文件
lib:jni相關(guān)的so包
original:原始的AndroidManifest.xml文件和簽名文
res:xml和圖片資源
smail:反編譯出來的代碼,smail文件夾中目錄結(jié)構(gòu)和源代碼的包一樣
AndroidManifest:就AndroidManifest.xml

//打包成apk
apktool b -f E:\gongju\apktool反編譯工具\test -o E:\gongju\apktool反編譯工具\packed.apk

此外,可以修改smail文件后用apktool工具來重新打包,這樣子避免了開發(fā)過程中一些小改動導(dǎo)致重新修改、編譯以及打包的情況。
那么問題來了,smail文件是什么?
Dalvik虛擬機和Jvm一樣,也有自己的一套指令集,類似匯編語言,但是比匯編簡單許多,只要你會java,了解android的相關(guān)知識,就可以輕松的看懂,如果得到這些匯編文件呢,利用apktool或者dex2jar工具包(網(wǎng)上很多),反編譯classes.dex文件,就可以得到以smali為后綴的文件,這些smali文件就是Dalvik的寄存器語言。
以上是摘抄的,打開來看看是這樣子的,怎么樣?我反正看不怎么懂。


.smail文件

怎么改代碼呢?是不是還要學(xué)會這種匯編語言的語法呢?其實大可不必,只要會看一點就可以。
首先我們需要定位要改的代碼所在的位置,這里用到的工具有:

  • dex2jar:將dex文件轉(zhuǎn)換成jar文件的工具
  • jd-gui:查看jar文件的反編譯工具

二、dex2jar

下載地址:https://sourceforge.net/projects/dex2jar/postdownload
使用步驟:

  1. 把app(應(yīng)用名稱).apk的后綴改成zip或者rar,即改成app.zip或app.rar,右鍵“解壓”出來,目錄結(jié)構(gòu)如下:


    拿到dex文件
  2. 把classes.dex文件拷貝到的dex2jar文件夾下,執(zhí)行命令:
    d2j-dex2jar classes.dex
    至此dex文件就轉(zhuǎn)化為jar文件了。
    image.png

三、jd-gui

下載地址:http://java-decompiler.github.io/


使用步驟:

  1. 打開工具,查看jar包信息,可以定位到需要修改的地方,假設(shè)我要改一個請求的url地址,馬上就可以定位到:


  2. 根據(jù)路徑可以確認(rèn)smail文件的位置,如圖上所示。然后去到對應(yīng)的smail文件夾(這里是com\game\sdk\util\Constans.smail),改了它就可以了。
    這只是一個簡單的修改,同樣你如果有這個項目中依賴的包的源碼,你就可以改這個包源碼。通過編譯成jar文件,再通過轉(zhuǎn)化為dex(通過dx.bat),再轉(zhuǎn)化為smail(baksmali.jar),最終替換調(diào)此項目中的相關(guān)smail即可。

四、dx.bat

1.這個是Android自帶的(如何你安裝了Android Studio)工具,你可以在以下目錄中找到它:


2.通過cmd命令行進入到當(dāng)前目錄:
cd C:\Users\Administrator\AppData\Local\Android\Sdk\build-tools\28.0.3
輸入此命令:
dx.bat --dex --no-strict --no-warning --output=E:\work\out\dex\classes.dex(此處替換你想輸入dex文件的位置) E:\Project\jhsdk\build\intermediates\bundles\default\classes.jar(此處替換你的jar文件所在的位置)
拿到

五、baksmali.jar

下載鏈接:
https://bitbucket.org/JesusFreke/smali/downloads/
命令:
java -jar baksmali.jar(此處為baksmail.jar文件的路徑) -o E:\work\out\smali(輸出smail文件的位置) E:\work\out\dex\classes.dex(dex文件的位置)

六、補充

上述這些都是代碼層面的修改,如果我們想改資源就更簡單了,直接在res文件中修改,不過要注意不能隨意更改,資源大都被引用了,刪除了會導(dǎo)致我們在build構(gòu)建apk時直接報錯,亦或者安裝apk失敗。
另外,如果我們要改apk的包名和版本呢?包名簡單,只需要在AndroidManifest中修改就可以,sdk版本在哪修改呢?在這兒:


apktool.yml
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容