Android逆向

今天我們來說一下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文件了,如下圖所示:

jd-gui工具查看class文件
5、反編譯修改

工具:apktool
將待反編譯的apk文件與apktool.bat、apktool.jar置于同一目錄下,在當前目錄打開命令行窗口,輸入命令:

apktool.bat d -r test.apk -o test 
說明:apktool.bat d -r [待反編譯的apk] -o [反編譯之后存放文件夾] 
反編譯結(jié)果

注意到上面紅色箭頭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加固后無法查看

很明顯,這就是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模塊中是長這個樣子的:

Xposed模塊中的FDex2

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

選中破解的APP

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

脫殼后生成的dex文件

如上圖所示,我們獲取了多個脫殼后的dex文件,然后我們按上面的方法便可查看到各個class文件了。

好啦,目前筆者遇到的關(guān)于Android逆向方面的也就這些了,上面所用到的各個工具都可在網(wǎng)上搜得到,若有需要的話也可留言提供!

最后,溫馨提醒:Android逆向大有可為,但僅限于學習,千萬不要用來干壞事,否則會親人淚兩行的!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Android APK文件結(jié)構(gòu)問題:Android APK的入口函數(shù)是什么?Android 系統(tǒng)歷史2. S...
    MagicalGuy閱讀 5,216評論 0 5
  • 分析APK文件 要分析APK文件,首先要了解APK打包過程 打包資源文件(aapt)檢查Manifest合法性將r...
    黃怡菲閱讀 16,703評論 1 19
  • 好久沒有更新博客了。一直在想要更新點什么樣子的干貨。 最近看了一點有關(guān)于逆向的文章,感覺還不錯。 對于“安卓開發(fā)沒...
    楊阿楊阿陽閱讀 1,539評論 2 18
  • 0.寫在前面 本文是筆者自學筆記,以破解某目標apk的方式進行學習,中間輔以原理性知識,方便面試需求。參考文章的原...
    普通的程序員閱讀 12,010評論 0 41
  • 微信的賦格 它躲在巴掌大的玻璃里我們天天刷我們上午下午刷我們夜里刷我們刷啊刷最愛戳開那撩人的一點紅它是安裝在身體中...
    俗然閱讀 533評論 3 8

友情鏈接更多精彩內(nèi)容