使用APKTool+dex2jar+jd_gui反編譯apk文件

jopen 8年前發布 | 26K 次閱讀 Android開發 移動開發

在學習代碼混淆之前,這里我先反編譯一下從網上下載下來的apk。這里我以豆瓣電影作為例子,來進行反編譯。在反編譯過程中,我們主要用到了下面的三個工具:
1.apktool
這個工具主要是將android中的apk文件轉換成dex文件。
2.dex2jar
顧名思義就是講第一步的dex文件轉換成jar文件
3.jd_gui
這個工具可以查看第二步中生成的jar文件的內容。

反編譯查看apk代碼

1.首先我們將下載下來的豆瓣的apk文件,更改后綴名稱為.rar,然后解壓,可以看到classes.dex文件。
這里寫圖片描述
2.將classes.dex拷貝到dex2jar.bat所在的目錄下:
這里寫圖片描述
可以看到,這里我已經將classes.dex文件拷貝到dex2jar.bat所在的目錄當中了。
在命令行下進入dex2jar.bat所在的目錄,執行如下命令:
dex2jar.bat classes.dex
此時會在該目錄下生成classes_dex2jar.jar這個文件
這里寫圖片描述
3.使用jd_gui查看jar文件中的代碼:
jd_gui是一個可執行的exe文件,可以直接通過這個工具查看jar文件中的代碼。直接雙擊運行該文件,將classes_dex2jar.jar文件拖動到jd_gui的界面即可。
這里寫圖片描述

現在已經可以看到源代碼了。

反編譯得到布局文件和資源文件

這里我以網上的一個訂餐apk來做測試,先來看看,如果我們只是單純的解壓apk,是沒有辦法看到布局圖片等資源的,比如:看到的布局回像下面這種樣子:
這里寫圖片描述
此時使用apktool工具來反編譯布局和資源文件:
這里寫圖片描述
此時會在apktool工具所在的目錄下生成一個文件夾,這個文件夾里邊的布局manifest文件以及資源文件就都可以訪問了。
登陸界面的布局:
這里寫圖片描述
manifest文件
這里寫圖片描述

將反編譯的apk植入廣告,二次打包

首先這里我就拿登陸界面來作一個簡單的案例:
這里寫圖片描述
可以看到我將該界面的所有文字相關的都改為”廣告”了,并且將背景圖片更換了。更換的背景圖片如下:
這里寫圖片描述
接下來進行二次打包。我們在第一步當中通過apktool.bat d feifan.apk來反編譯,成功之后,會看到一個名字叫做fenfan的文件夾,里面就是放的該apk的資源文件和布局以及清單文件。接下來需要執行:”apktool.bat b feifan advertisement.apk”,即可。需要注意的是,在這一步的操作當中可能會碰到這樣的錯誤:

Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not
exec command: [aapt, p, --min-sdk-version, 8, --target-sdk-version, 15, -F, C:\
Users\ADMINI~1\AppData\Local\Temp\APKTOOL5334589254772572111.tmp, -0, arsc, -I,
C:\Users\Administrator\apktool\framework\1.apk, -S, E:\快盤\pc_demo_code\軟件\an
droid反匯編\apktool-install-windows-r05-ibot\apktool-install-windows-r05-ibot\.\
test_apk_name\res, -M, E:\apktool-install-window
s-r05-ibot\apktool-install-windows-r05-ibot\.\test_apk_name\AndroidManifest.xml] at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.jav a:357) at brut.androlib.Androlib.buildResourcesFull(Androlib.java:336) ... 5 more

這時因為apktool在打包的時候,需要用到aapt工具,需要將aapt的路徑配置到環境變量當中即可。
這里我生成的apk名稱叫做advertisement,但是注意,此時我們生成的這個apk是不能安裝的,需要對其進行簽名才可以。

對apk進行簽名

在對apk簽名之前,我們首先需要創建一個keystore文件,需要用到jdk中為我們提供的keytool.exe工具,如下:
keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
說明一下:
-genkey 表示產生密鑰
-keyalg RSA 表示使用RSA算法對簽名加密
-validity 40000 表示有效期限4000天
這里寫圖片描述
完成之后,會在當前目錄下生成一個demo.keystore文件。

使用jdk中的jarsigner 工具來和demo.keystore生成簽名后的apk.
jarsigner -verbose -keystore demo.keystore -signedjar advertisement_signed.apk advertisement.apk demo.keystore
說明一下:
-verbose 表示輸出簽名的詳細信息
-keystore demo.keystore 密鑰庫位置
-signedjar advertisement_signed.apk advertisement.apk demo.keystore正式簽名,三個參數中依次為簽名后產生的文件demo_signed,要簽名的文件demo.apk和密鑰庫
這里寫圖片描述
此時會在該目錄下生成一個簽名后的apk文件advertisement_signed.apk,安裝運行該文件,進入登陸界面如下:
這里寫圖片描述
bingo,可以看到經過二次打包以后,該apk已經是我們想要的效果了,這樣可以植入一些廣告。

說明一點:該博客只是為大家提供了一種思路和方法,僅供學習參考,嚴禁做非法的事情。

ok,今天就到這里了,希望大家能夠喜歡,也算是為自己做一個筆記吧。

工具下載

來自: http://blog.csdn.net//mockingbirds/article/details/46419693

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!