http://blog.csdn.net/guolin_blog/article/details/49738023
一、反編譯代碼
要想將APK文件中的代碼反編譯出來芝囤,我們需要用到以下兩款工具:
dex2jar這個工具用于將dex文件轉(zhuǎn)換成jar文件
下載地址:http://sourceforge.net/projects/dex2jar/files/
jd-gui這個工具用于將jar文件轉(zhuǎn)換成java代碼
下載地址:http://jd.benow.ca/
1.解壓dex2jar壓縮包后,你會發(fā)現(xiàn)有很多個文件男窟,如下圖所示:
其中我們要用到的是d2j-dex2jar.bat這個文件
2.然后我們將Demo.apk文件也進(jìn)行解壓挨下,如果不知道怎么直接解壓的可以先將文件重命名成Demo.zip,然后用解壓軟件打開轻姿。解壓之后你會發(fā)現(xiàn)里面有一個classes.dex文件,如下圖所示:
3.這個classes.dex文件就是存放所有java代碼的地方了逻炊,我們將它拷貝到dex2jar解壓后的目錄下互亮,并在cmd中也進(jìn)入到同樣的目錄,然后執(zhí)行:
d2j-dex2jar classes.dex
執(zhí)行結(jié)果如下圖所示:
沒有報任何錯誤余素,這就說明我們已經(jīng)轉(zhuǎn)換成功了”荩現(xiàn)在觀察dex2jar目錄,你會發(fā)現(xiàn)多了一個文件桨吊,如下圖所示:
4.可以看到威根,classes-dex2jar.jar這個文件就是我們借助工具之后成功轉(zhuǎn)換出來的jar文件了。但是對于我們而言视乐,jar文件也不是可讀的洛搀,因此這里還需要再借助一下jd-gui這個工具來將jar文件轉(zhuǎn)換成java代碼。
下面就很簡單了佑淀,使用jd-gui工具打開classes-dex2jar.jar這個文件留美,結(jié)果如下圖所示:
OK,由此可見,我們的代碼反編譯工作已經(jīng)成功了
二独榴、反編譯資源
apktool這個工具用于最大幅度地還原APK文件中的9-patch圖片僧叉、布局奕枝、字符串等等一系列的資源棺榔。
下載地址:http://ibotpeaches.github.io/Apktool/install/
2.接下來的工作就很簡單了,我們將Demo.apk拷貝到和這兩個文件同樣的目錄當(dāng)中隘道,然后cmd也進(jìn)入到這個目錄下症歇,并在cmd中執(zhí)行如下命令:
apktool d Demo.apk
上述命令的執(zhí)行結(jié)果如下圖所示:
這就說明反編譯資源已經(jīng)成功了。
三谭梗、重新打包
1.首先我們來看一下通過apktool反編譯后的包目錄情況忘晤,如下圖所示:
其中,original文件夾下存放的是未經(jīng)反編譯過激捏、原始的AndroidManifest.xml文件设塔,res文件夾下存放的是反編譯出來的所有資源,smali文件夾下存放的是反編譯出來的所有代碼远舅,AndroidManifest.xml則是經(jīng)過反編譯還原后的manifest文件闰蛔。
2.在做了改動之后,我們現(xiàn)在來把反編譯后的Demo文件夾重新打包成APK吧图柏,其實非常簡單序六,只需要在cmd中執(zhí)行如下命令:
apktool b Demo -o New_Demo.apk
其中b是build的意思,表示我們要將Demo文件夾打包成APK文件蚤吹,-o用于指定新生成的APK文件名例诀,這里新的文件叫作New_Demo.apk。執(zhí)行結(jié)果如下圖所示:
現(xiàn)在你會發(fā)現(xiàn)在同級目錄下面生成了一個新的APK文件:
3.簽名打包安裝
jarsigner-verbose-sigalgSHA1withRSA-digestalgSHA1-keystore簽名文件名-storepass簽名密碼 待簽名的APK文件名 簽名的別名