使用APKTool+dex2jar+jd_gui反編譯apk文件
在學習代碼混淆之前,這里我先反編譯一下從網上下載下來的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