今天我們來說一下Android逆向,這玩意在日常工作中用的比較少,但是作為一個Android開發(fā)者,還是要學會的,比如我們可以破解反編譯別人的APP,然后進行學習分析,甚至還可以反編譯后進行修改再次打包等等,總之,廣闊天地,大有作為!
1、獲取dex文件
工具:解壓縮工具
我們都知道,Android會把class文件打包成dex文件然后存放于apk中,我們第一步就是要獲取dex文件,其實辦法非常簡單:將apk安裝包后綴“.apk”更改為“.zip”,然后用解壓縮工具進行解壓即可,畢竟apk也是一種壓縮包格式嘛!
2、資源文件xml破解
工具:AXMLPrinter2.jar
上面解壓縮后,除了獲取到dex文件外,還有res資源文件夾,里面有布局文件啊,drawable啊等等,圖片資源是可以直接查看了,但布局文件和AndroidManifest.xml等xml格式的打開后都會出現(xiàn)亂碼,我們接下來以AndroidManifest.xml為例進行破解,AXMLPrinter2.jar和AndroidManifest.xml至于相同目錄下,在當前目錄按住shift鍵點擊鼠標右鍵,選擇“在此處打開命令窗口”(win7系統(tǒng))或“在此處打開Powershell窗口”(win10系統(tǒng)),輸入命令:
java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt
注意:“AXMLPrinter2.jar”為可執(zhí)行文件,需要安裝jave運行庫(JRE)才能運行。
至此,我們得到了AndroidManifest.txt,可正常打開查看。
3、將dex文件轉(zhuǎn)換為jar文件
工具:dex2jar-2.0
把上面獲取到的dex文件——classes.dex放到 dex2jar-2.0 根目錄中,然后在 dex2jar-2.0 根目錄下打開命令行窗口,然后輸入命令:
d2j-dex2jar.bat classes.dex
執(zhí)行完畢后,會生成一個classes-dex2jar.jar文件
4、查看classes-dex2jar.jar
工具:jd-gui
直接打開jd-gui.exe,然后在工具中打開上面生成的classes-dex2jar.jar文件,圖形化界面非常nice,操作也非常簡單,至此我們直接可以查看class文件了,如下圖所示:

5、反編譯修改
工具:apktool
將待反編譯的apk文件與apktool.bat、apktool.jar置于同一目錄下,在當前目錄打開命令行窗口,輸入命令:
apktool.bat d -r test.apk -o test
說明:apktool.bat d -r [待反編譯的apk] -o [反編譯之后存放文件夾]

注意到上面紅色箭頭smali目錄,里面所有文件都是以“.smali”為后綴的,這是反編譯后的格式,如果你需要對其進行修改的話,你需要學一部分smali語法,這里就不做展開了。
6、二次打包
工具:apktool、360簽名工具
上面反編譯后,你做了修改后當然希望能夠再次打包成apk文件,我們同樣是用apktool工具,同樣在上面目錄下打開命令行窗口,輸入命令:
apktool.bat b test
說明:test為反編譯后存放的文件夾
這里需要注意一點:如果你電腦裝的是360,在執(zhí)行上述命令過程會有彈窗詢問是否允許操作,請放行。如果你電腦裝的是騰訊電腦管家,則應(yīng)該是直接被攔截了,在命令行窗口會報如下錯誤:
Exception in thread “main” brut.androlib.AndrolibException: java.nio.file.FileAlreadyExistsException...
沒辦法,請退出騰訊電腦管家方可正常執(zhí)行。
二次打包后會在上面的test文件中生成一個dist文件夾,打包后的apk文件便存放在里面。
當然,上面這完成了打包,我們還需對其進行簽名才可以安裝,為了簡單方便,可直接使用360簽名工具,這里就不作說明了,基本就是傻瓜式操作了。
7、360等加固后脫殼
工具:FDex2、Xposed(VirtualXposed)
之所以寫這個,那是因為筆者之前在去某公司面試前,想反編譯他們家的APP看看,用上面方法將dex轉(zhuǎn)jar后發(fā)現(xiàn)好幾M的dex文件只生成一個幾十K的jar包,這明顯就不正常嘛,然后用gui查看jar包,結(jié)果顯示如下:

很明顯,這就是360加固的結(jié)果!
這不開玩笑嗎?還真被360難住了不成?不應(yīng)該的,一個字——干 !
首先,說一下360加固,360提供了相應(yīng)的加固工具,直接去官網(wǎng)下了個360加固工具,然后對APP進行加固(注意設(shè)置簽名),基本上也是傻瓜式操作,沒什么好說的,加固完效果就跟上面一樣一樣的了。
接著,我們看看如何進行加固后脫殼?其實很明顯,就是dex文件的問題,我們破解的最終目的是生成脫殼后的dex文件。
在此之前,我們先簡單介紹一下Android的 Xposed 框架,它能讓你使用各種“模塊”,像外掛一樣去修改系統(tǒng)或 APP 來獲得不同的新功能特性,不得不說因為這東東使得Android比iOS更加好玩O(∩_∩)O~
Xposed 框架很棒,但問題需要設(shè)備進行root,我們都知道現(xiàn)在高版本的Android系統(tǒng)要root已經(jīng)沒那么容易的,所以出現(xiàn)了VirtualXposed,這個可牛逼了,可以讓我們在非root的環(huán)境下運行,簡直棒棒噠!
好啦,介紹完畢,然而筆者這次破解用的不是VirtualXposed,畢竟不大敢用手機來玩,怕到時變磚就尷尬了,還是用夜神模擬器來吧,感謝夜神提供的Xposed框架適配般:https://www.yeshen.com/faqs/Skp9zgXeZ
根據(jù)你自己的夜神版本下載對于的Xposed進行安裝,操作也非常簡單,按上面教程來就行。
安裝完畢后,再安裝FDex2,最后在Xposed模塊中是長這個樣子的:

然后在上面這個節(jié)目中打開FDex2,會出現(xiàn)當前手機的應(yīng)用列表,然后選中你需要破解的APP(也就是說你需把要破解的apk包先裝到模擬器上),如下圖我們選中了“DK播放器”(紅色顯示):

然后點擊OK,我們重新打開目標APP,這會你將發(fā)現(xiàn)APP啟動很慢,甚至有一種錯覺APP好像卡死了一般,其實是因為這會后臺正在生成脫殼的dex文件,所以會顯得很卡,最終脫殼后的dex文件會存放在這個路徑下:/data/data/目標APP的包名/:

如上圖所示,我們獲取了多個脫殼后的dex文件,然后我們按上面的方法便可查看到各個class文件了。
好啦,目前筆者遇到的關(guān)于Android逆向方面的也就這些了,上面所用到的各個工具都可在網(wǎng)上搜得到,若有需要的話也可留言提供!
最后,溫馨提醒:Android逆向大有可為,但僅限于學習,千萬不要用來干壞事,否則會親人淚兩行的!