工具/原料
創(chuàng)新互聯(lián)公司10多年成都企業(yè)網(wǎng)站建設(shè)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都企業(yè)網(wǎng)站建設(shè)及推廣,對(duì)三維植被網(wǎng)等多個(gè)領(lǐng)域擁有豐富的網(wǎng)站推廣經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
eclipse、ADT、android的SDK
反編譯類文件用dex2jar、jdgui
1.
打開apk2java目錄下的dex2jar-0.0.9.9文件夾,內(nèi)含apk反編譯成java源碼工具dex2jar,以及源碼查看工具jdgui。
apk反編譯工具dex2jar,是將apk中的classes.dex轉(zhuǎn)化成jar文件源碼。查看工具jdgui,是一個(gè)反編譯工具,可以直接查看反編譯后的jar包源代碼
2.首先將需要反編譯的apk文件后綴改為zip并解壓,得到其中的classes.dex,它就是java文件編譯再通過dx工具打包而成的,將classes.dex復(fù)制到dex2jar.bat所在目錄dex2jar-0.0.9.9文件夾。在命令行下定位到dex2jar.bat所在目錄,運(yùn)行
dex2jar.bat classes.dex
目錄文件夾就會(huì)生成
classes_dex2jar.jar
3.然后,進(jìn)入jdgui文件夾雙擊jd-gui.exe,打開上面生成的jar包c(diǎn)lasses_dex2jar.jar,即可看到源代碼了。
就像做菜一樣,首先我們要把料備齊,三個(gè)反編譯工具,apktool,dex2jar,jd-jui先下載下來,待用。還有有一個(gè)apk文件,一共四個(gè)文件。(簡(jiǎn)單介紹下三個(gè)工具的作用,apktool是用來得到Android app的資源文件的,就是res文件。dex2jar和jd-jui是查看Android app源代碼的。接下來我就一步步帶大家實(shí)現(xiàn)反編譯。)
第一步,使用apktool得到 res文件。
解壓縮下載上述工具中的apktool,解壓得到3個(gè)文件:aapt.exe,apktool.bat,apktool.jar ,將需要反編譯的APK文件放到該目錄下,
打開命令行界面(運(yùn)行-CMD-回車) ,定位到apktool文件夾,(還有個(gè)簡(jiǎn)單辦法,按住shift鍵,點(diǎn)擊鼠標(biāo)右鍵,在菜單中選擇“此處打開命令行窗口”),輸入以下命令:apktool.bat d -f Presidential.apk (Presidential.apk 是我要反編譯的apk的全名,apktool的指令這里就細(xì)講了,請(qǐng)同學(xué)們自己學(xué)習(xí)吧)命令行圖片和生成的文件的圖片如下圖。res文件就我們需要的資源文件啦。
第二步,查看apk文件的源代碼。首先將apk文件的后綴改為.rar或者.zip并解壓,得到其中的額classes.dex文件.,將獲取到的classes.dex放到之前解壓出來的工具dex2jar 文件夾內(nèi),然后用同樣的方法打開命令行,輸入:
dex2jar.bat classes.dex 回車,效果如下:
在改目錄下會(huì)生成一個(gè)classes_dex2jar.jar的文件,然后打開工具jd-gui文件夾里的jd-gui.exe,之后用該工具打開之前生成的classes_dex2jar.jar文件,便可以看到源碼了。
將 apk 解壓,在解壓后的文件夾中可以找到 classes.dex 文件。(除了 classes.dex 文件,可能還會(huì)有 classes2.dex , classes3.dex 等等,本文以 classes.dex 為例,對(duì)其他幾個(gè) dex 文件的操作是類似的)
使用 dex2jar 工具,將 dex 文件轉(zhuǎn)換為 jar 文件
使用方式:
執(zhí)行命令后,生成的 classes-dex2jar.jar 就是我們需要的 jar 文件。
使用 Luyten 工具查看 jar 文件,就能看到反編譯后的源碼了。
本例中, classes.dex 文件中存儲(chǔ)的是 android 的一些基礎(chǔ)庫,實(shí)際編寫的源碼在 classes3.dex 中,對(duì) classes3.dex 執(zhí)行第二步,查看生成的 classes3-dex2jar.jar 文件,可以看到如下內(nèi)容:
這就是反編譯 apk 的基本操作了。
Cmder 是一個(gè)非常好用的命令行工具。
效果如下:
只需要執(zhí)行 apk2jar 命令,就可以實(shí)現(xiàn)把 apk 解壓到 apk_ 文件夾中,并將 apk_ 文件夾中的 classes.dex 文件轉(zhuǎn)換為 jar 。原理就是通過 Cmder 添加別名,把上述的第一步和第二步中執(zhí)行的命令行組合起來了。
為 Cmder 添加別名很簡(jiǎn)單,編輯 Cmder安裝目錄\config\user_aliases.cmd 文件,將別名添加到里面即可。本例添加的別名如下:
其中:
Android反編譯的目的無非就是為了看到APK的xml、資源和代碼:
得到代碼的方式:直接解壓APK文件 -- 得到classes.dex文件 -- 使用 dex2jar
classes.dex classes.jar生成jar文件 -- [可選的解壓jar文件]
--使用XJad或者JDCompiler查看源代碼
得到XML的方式:
方式1:直接解壓APK文件 -- 通過axmlprinter工具查看XML文件(這種方式查看的XML文件的id都是數(shù)字--即R文件中id對(duì)應(yīng)的值)
方式2:使用APKTool工具解壓APK文件可以直接查看XML文件
Android反編譯常常使用如下的一些工具:
1、反編譯命令:
apktool d D:\\Developer\androidDecode\Test0201.apk D:\\Developer\androidDecode\test0201
D:\\Developer\androidDecode\Test0201.apk:要反編譯的APK文件
D:\\Developer\androidDecode\test0201:反編譯文件的保存目錄,必須為空目錄
2、從反編譯的文件編譯成APK apktool b D:\\Developer\androidDecode\test0201 D:\\Developer\androidDecode\test020101.apk
D:\\Developer\androidDecode\test0201:保存編譯后文件的目錄
D:\\Developer\androidDecode\test020101.apk:生成的新的APK文件的保存的絕對(duì)路徑
3、簽名APK文件:
singedAPK.bat文件
java -jar "%~dp0signapk.jar" "%~dp0testkey.x509.pem" "%~dp0testkey.pk8" %1 signed.apk
執(zhí)行singedAPK.bat命令
singedAPK D:\\Developer\androidDecode\test020101.apk 生成一個(gè)singed.apk文件和test020101.apk在同一個(gè)目錄
4、使用baksmali.jar把一個(gè)dex文件轉(zhuǎn)換為一個(gè)smali文件
java -jar D:\\Developer\ApkTool\baksmali.jar -o
D:\\Developer\androidDecode\baksmaliout
D:\\Developer\androidDecode\Hello.dex
D:\\Developer\ApkTool\baksmali.jar:baksmali.jar文件所存在的全路徑
D:\\Developer\androidDecode\baksmaliout:生成的smali文件的保存目錄
D:\\Developer\androidDecode\Hello.dex:要轉(zhuǎn)成smali文件的路徑
5、使用ddx.jar把一個(gè)dex文件轉(zhuǎn)換為ddx文件
java -jar D:\\Developer\ApkTool\ddx.jar -d D:\\Developer\androidDecode\ddxout D:\\Developer\androidDecode\Hello.dex
D:\\Developer\ApkTool\ddx.jar:ddx.jar文件的絕對(duì)路徑
D:\\Developer\androidDecode\ddxout:要保存ddx文件的路徑
D:\\Developer\androidDecode\Hello.dex:要轉(zhuǎn)換的dex路徑
6、Android自帶dexdump工具:dex文件轉(zhuǎn)為smali文件 dexdump -d xxxx.dex xxxx.smali
7、dex2jar.jar:dex2jar XXX.dex YYY.jar
關(guān)于安卓逆向你需要知道的工具及網(wǎng)站
把最近接觸到的安卓逆向相關(guān)的工具和網(wǎng)站總結(jié)下,供需要者拿去使用,還有不全和遺漏后續(xù)會(huì)不斷完善。
工具篇章
模擬器(動(dòng)態(tài)調(diào)試需要用真機(jī))
安卓原生模擬器:Android Studio自帶的
夜神:今天開始嘗試這個(gè)模擬器,發(fā)現(xiàn)在ida掛載進(jìn)程時(shí)出現(xiàn)了問題,掛不上,架構(gòu)為x86,不能用ida調(diào)試。 地址
逍遙:還未使用 地址
藍(lán)疊(bluestack): 地址
雷電模擬器
apk反編譯套件工具
jeb:今天開始嘗試這個(gè)工具 地址
YouGais:以前我一直使用這個(gè),沒有官網(wǎng)地址,免費(fèi)版功能受限
打包及簽名工具
apktool:apk拆包打包工具 地址
jd-gui:java反編譯工具 地址
aotusign:自動(dòng)簽名工具,沒有官網(wǎng)百度即可
native文件反編譯工具
ida:靜態(tài)分析、動(dòng)態(tài)分析,免費(fèi)版功能受限 地址
gdb:
輔助調(diào)試工具
adb:通向手機(jī)或模擬器的橋梁,綠色小程序。最常用的就是查看logcat,進(jìn)入手機(jī)shell等。 地址
ddms:android SDK中自帶工具。該工具可以查看手機(jī)模擬器的進(jìn)程,選中需要監(jiān)控的進(jìn)程后,會(huì)出現(xiàn)綠色小蜘蛛圖標(biāo),同時(shí)后面會(huì)出現(xiàn)8700端口號(hào)。
jdb:jdk目錄下自帶的與安卓進(jìn)程連接的程序,常與ddms配合用于動(dòng)態(tài)調(diào)試
xposed:需要安裝框架+模塊,還有對(duì)應(yīng)的xposed市場(chǎng)??梢栽诔S檬袌?chǎng)搜索安裝。bluestack中安裝后變磚了,夜神中安裝正常。
十六進(jìn)制文件編輯工具
UltraEdit:十六進(jìn)制文件編輯工具
010Edit:還沒有用過
winhex:印象中很久前用過
android開發(fā)工具
Android Studio
Eclipse
Aide(手機(jī)版開發(fā)工具)
其他
解壓縮軟件:winrar、7zip等等都可以,將apk改名為zip就能直接打開
社區(qū)資料篇章
論壇及社區(qū)
看雪論壇:
freebuff:
還有吾愛破解、知乎、、CSDN等等都有相應(yīng)版塊內(nèi)容及文章可供學(xué)習(xí)。
arm指令
官方文檔pdf:
在線編譯網(wǎng)站
c到匯編在線轉(zhuǎn)換
匯編到操作碼在線轉(zhuǎn)換