今天我們來(lái)說(shuō)一下Android逆向槐脏,這玩意在日常工作中用的比較少,但是作為一個(gè)Android開(kāi)發(fā)者撇寞,還是要學(xué)會(huì)的顿天,比如我們可以破解反編譯別人的APP堂氯,然后進(jìn)行學(xué)習(xí)分析,甚至還可以反編譯后進(jìn)行修改再次打包等等牌废,總之咽白,廣闊天地,大有作為鸟缕!
1晶框、獲取dex文件
工具:解壓縮工具
我們都知道,Android會(huì)把class文件打包成dex文件然后存放于apk中懂从,我們第一步就是要獲取dex文件授段,其實(shí)辦法非常簡(jiǎn)單:將apk安裝包后綴“.apk”更改為“.zip”,然后用解壓縮工具進(jìn)行解壓即可番甩,畢竟apk也是一種壓縮包格式嘛侵贵!
2、資源文件xml破解
工具:AXMLPrinter2.jar
上面解壓縮后缘薛,除了獲取到dex文件外窍育,還有res資源文件夾,里面有布局文件啊宴胧,drawable啊等等漱抓,圖片資源是可以直接查看了,但布局文件和AndroidManifest.xml等xml格式的打開(kāi)后都會(huì)出現(xiàn)亂碼牺汤,我們接下來(lái)以AndroidManifest.xml為例進(jìn)行破解辽旋,AXMLPrinter2.jar和AndroidManifest.xml至于相同目錄下,在當(dāng)前目錄按住shift鍵點(diǎn)擊鼠標(biāo)右鍵檐迟,選擇“在此處打開(kāi)命令窗口”(win7系統(tǒng))或“在此處打開(kāi)Powershell窗口”(win10系統(tǒng))补胚,輸入命令:
java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt
注意:“AXMLPrinter2.jar”為可執(zhí)行文件,需要安裝jave運(yùn)行庫(kù)(JRE)才能運(yùn)行追迟。
至此溶其,我們得到了AndroidManifest.txt,可正常打開(kāi)查看敦间。
3瓶逃、將dex文件轉(zhuǎn)換為jar文件
工具:dex2jar-2.0
把上面獲取到的dex文件——classes.dex放到 dex2jar-2.0 根目錄中,然后在 dex2jar-2.0 根目錄下打開(kāi)命令行窗口廓块,然后輸入命令:
d2j-dex2jar.bat classes.dex
執(zhí)行完畢后厢绝,會(huì)生成一個(gè)classes-dex2jar.jar文件
4、查看classes-dex2jar.jar
工具:jd-gui
直接打開(kāi)jd-gui.exe带猴,然后在工具中打開(kāi)上面生成的classes-dex2jar.jar文件昔汉,圖形化界面非常nice,操作也非常簡(jiǎn)單拴清,至此我們直接可以查看class文件了靶病,如下圖所示:
5会通、反編譯修改
工具:apktool
將待反編譯的apk文件與apktool.bat、apktool.jar置于同一目錄下娄周,在當(dāng)前目錄打開(kāi)命令行窗口涕侈,輸入命令:
apktool.bat d -r test.apk -o test
說(shuō)明:apktool.bat d -r [待反編譯的apk] -o [反編譯之后存放文件夾]
注意到上面紅色箭頭smali目錄,里面所有文件都是以“.smali”為后綴的煤辨,這是反編譯后的格式裳涛,如果你需要對(duì)其進(jìn)行修改的話,你需要學(xué)一部分smali語(yǔ)法掷酗,這里就不做展開(kāi)了调违。
6、二次打包
工具:apktool泻轰、360簽名工具
上面反編譯后技肩,你做了修改后當(dāng)然希望能夠再次打包成apk文件,我們同樣是用apktool工具浮声,同樣在上面目錄下打開(kāi)命令行窗口虚婿,輸入命令:
apktool.bat b test
說(shuō)明:test為反編譯后存放的文件夾
這里需要注意一點(diǎn):如果你電腦裝的是360,在執(zhí)行上述命令過(guò)程會(huì)有彈窗詢問(wèn)是否允許操作泳挥,請(qǐng)放行然痊。如果你電腦裝的是騰訊電腦管家,則應(yīng)該是直接被攔截了屉符,在命令行窗口會(huì)報(bào)如下錯(cuò)誤:
Exception in thread “main” brut.androlib.AndrolibException: java.nio.file.FileAlreadyExistsException...
沒(méi)辦法剧浸,請(qǐng)退出騰訊電腦管家方可正常執(zhí)行。
二次打包后會(huì)在上面的test文件中生成一個(gè)dist文件夾矗钟,打包后的apk文件便存放在里面唆香。
當(dāng)然,上面這完成了打包吨艇,我們還需對(duì)其進(jìn)行簽名才可以安裝躬它,為了簡(jiǎn)單方便,可直接使用360簽名工具东涡,這里就不作說(shuō)明了冯吓,基本就是傻瓜式操作了。
7疮跑、360等加固后脫殼
工具:FDex2组贺、Xposed(VirtualXposed)
之所以寫(xiě)這個(gè),那是因?yàn)楣P者之前在去某公司面試前祖娘,想反編譯他們家的APP看看锣披,用上面方法將dex轉(zhuǎn)jar后發(fā)現(xiàn)好幾M的dex文件只生成一個(gè)幾十K的jar包,這明顯就不正常嘛,然后用gui查看jar包雹仿,結(jié)果顯示如下:
很明顯,這就是360加固的結(jié)果整以!
這不開(kāi)玩笑嗎胧辽?還真被360難住了不成?不應(yīng)該的公黑,一個(gè)字——干 邑商!
首先,說(shuō)一下360加固凡蚜,360提供了相應(yīng)的加固工具人断,直接去官網(wǎng)下了個(gè)360加固工具,然后對(duì)APP進(jìn)行加固(注意設(shè)置簽名)朝蜘,基本上也是傻瓜式操作恶迈,沒(méi)什么好說(shuō)的,加固完效果就跟上面一樣一樣的了谱醇。
接著暇仲,我們看看如何進(jìn)行加固后脫殼?其實(shí)很明顯副渴,就是dex文件的問(wèn)題奈附,我們破解的最終目的是生成脫殼后的dex文件。
在此之前煮剧,我們先簡(jiǎn)單介紹一下Android的 Xposed 框架斥滤,它能讓你使用各種“模塊”,像外掛一樣去修改系統(tǒng)或 APP 來(lái)獲得不同的新功能特性勉盅,不得不說(shuō)因?yàn)檫@東東使得Android比iOS更加好玩O(∩_∩)O~
Xposed 框架很棒佑颇,但問(wèn)題需要設(shè)備進(jìn)行root,我們都知道現(xiàn)在高版本的Android系統(tǒng)要root已經(jīng)沒(méi)那么容易的菇篡,所以出現(xiàn)了VirtualXposed漩符,這個(gè)可牛逼了,可以讓我們?cè)诜莚oot的環(huán)境下運(yùn)行驱还,簡(jiǎn)直棒棒噠嗜暴!
好啦,介紹完畢议蟆,然而筆者這次破解用的不是VirtualXposed闷沥,畢竟不大敢用手機(jī)來(lái)玩,怕到時(shí)變磚就尷尬了咐容,還是用夜神模擬器來(lái)吧舆逃,感謝夜神提供的Xposed框架適配般:https://www.yeshen.com/faqs/Skp9zgXeZ
根據(jù)你自己的夜神版本下載對(duì)于的Xposed進(jìn)行安裝,操作也非常簡(jiǎn)單,按上面教程來(lái)就行路狮。
安裝完畢后虫啥,再安裝FDex2,最后在Xposed模塊中是長(zhǎng)這個(gè)樣子的:
然后在上面這個(gè)節(jié)目中打開(kāi)FDex2奄妨,會(huì)出現(xiàn)當(dāng)前手機(jī)的應(yīng)用列表涂籽,然后選中你需要破解的APP(也就是說(shuō)你需把要破解的apk包先裝到模擬器上),如下圖我們選中了“DK播放器”(紅色顯示):
然后點(diǎn)擊OK砸抛,我們重新打開(kāi)目標(biāo)APP评雌,這會(huì)你將發(fā)現(xiàn)APP啟動(dòng)很慢,甚至有一種錯(cuò)覺(jué)APP好像卡死了一般直焙,其實(shí)是因?yàn)檫@會(huì)后臺(tái)正在生成脫殼的dex文件景东,所以會(huì)顯得很卡,最終脫殼后的dex文件會(huì)存放在這個(gè)路徑下:/data/data/目標(biāo)APP的包名/:
如上圖所示奔誓,我們獲取了多個(gè)脫殼后的dex文件斤吐,然后我們按上面的方法便可查看到各個(gè)class文件了。
好啦丝里,目前筆者遇到的關(guān)于Android逆向方面的也就這些了曲初,上面所用到的各個(gè)工具都可在網(wǎng)上搜得到,若有需要的話也可留言提供杯聚!
最后臼婆,溫馨提醒:Android逆向大有可為,但僅限于學(xué)習(xí)幌绍,千萬(wàn)不要用來(lái)干壞事颁褂,否則會(huì)親人淚兩行的!