Android逆向(反編譯一個(gè)APK)

一兰伤、反編譯未加固的apk

1讥裤、反編譯用到的工具

apktool:資源文件獲取报亩,可以提取出圖片文件和布局文件進(jìn)行使用查看
dex2jar:將apk反編譯成java源碼(classes.dex轉(zhuǎn)化成jar文件)
jd-gui:查看APK中classes.dex轉(zhuǎn)化成出的jar文件,即源碼文件

2虐译、使用apktool反編譯資源文件和Manifest文件

為了方便操作泉唁,首先將下載好的3個(gè)工具統(tǒng)一放到1個(gè)文件夾中


image.png

將gui和dex2jar分別解壓到當(dāng)前文件夾


image.png

使用apktool反編譯apk得到圖片鹅龄、xml、maifest等文件
運(yùn)行CMD.exe,進(jìn)入Demo.apk路徑下
運(yùn)行apktool對(duì)apk進(jìn)行反編譯
使用如下命令將Demo.apk反編譯到【Demo】文件夾下:

java -jar apktool_2.4.0.jar d -f Demo.apk -o Demo

打開(kāi)Demo文件游两,就可以看到反編譯后生成的文件


image.png

這時(shí)候可以看到【res】和Manifest文件了砾层;

3漩绵、使用dex2jar反編譯java源碼

將Demo.apk直接修改后綴贱案,改為Demo.zip,并解壓
解壓后的文件夾中止吐,classes.dex 就是java源碼打包后的文件


image.png

將命令行定位到dex2jar.bat所在目錄
使用命令行:

d2j-dex2jar classes.dex

會(huì)生成classes-dex2jar文件宝踪,該文件就是反編譯后的java源碼文件


image.png

4、使用gui查看反編譯后的java源碼

雙擊jd-gui.exe,運(yùn)行g(shù)ui碍扔,


image.png

選擇剛剛生成的classes-dex2jar瘩燥,打開(kāi)后就可以看到源碼(圖中的Demo為了容易閱讀沒(méi)有加混淆,正常上線的應(yīng)用會(huì)加混淆來(lái)加大閱讀難度)


image.png

至此不同,一個(gè)沒(méi)有加殼的apk已經(jīng)被反編譯完成了厉膀,但是實(shí)際工作中,上線的apk包大多數(shù)都會(huì)進(jìn)行加固二拐,有些應(yīng)用市場(chǎng)甚至后要求加固服鹅,例如360,應(yīng)用寶等百新,下面會(huì)介紹一中常見(jiàn)的脫殼技術(shù)

二企软、脫殼

加固后的apk在通過(guò)以上的反編譯流程后,無(wú)法得到正常的java源碼饭望,如下圖


未加固.png

360加固保.png

樂(lè)加固.png

從上圖可以看出仗哨,經(jīng)過(guò)加固后的apk形庭,通過(guò)常規(guī)方法反編譯無(wú)法獲取到源碼。

1厌漂、脫殼用到的工具

FDex2 :通過(guò)Hook ClassLoader的loadClass方法萨醒,反射調(diào)用getDex方法取得Dex(com.android.dex.Dex類對(duì)象),再將里面的dex寫(xiě)出
VirtualXposed:無(wú)需root手機(jī)即可使用的xp框架

2桩卵、脫殼

Step1验靡、將 【VirtualXposed】、【FDex2】和需要脫殼的apk都安裝到手機(jī)上
Step2雏节、啟動(dòng)【VirtualXposed】胜嗓,并在【VirtualXposed】中安裝【FDex2】:


image

Step3、在【VirtualXposed】中激活【FDex2】:


image

Step4钩乍、在【VirtualXposed】中安裝要脫殼的應(yīng)用辞州,方法和Step2一樣。
Step5:啟動(dòng)【VirtualXposed】中的F【Dex2】寥粹,并配置要脫殼的應(yīng)用变过。
image.png

Step6:在【VirtualXposed】中運(yùn)行要脫殼的應(yīng)用。
Step7:在上【VirtualXposed】安裝文件管理器涝涤,方便將生成的dex文件導(dǎo)出
在【VirtualXposed】選中【高級(jí)設(shè)置】


image.png

選中【文件管理】媚狰,會(huì)提示安裝【Amaze】文件管理器
image.png

Step8:查看脫殼后的dex文件,打開(kāi)【Amaze】,選中【Private Storage】阔拳,定位到FDex2設(shè)置的dex輸出路徑下崭孤,可以看到脫殼后的dex文件
image.png

image.png

Step9:將dex文件導(dǎo)出:長(zhǎng)按dex文件,點(diǎn)擊頂部的復(fù)制按鈕糊肠,然后回到選中【External Storage】并選擇一個(gè)路徑辨宠,點(diǎn)擊頂部的粘貼按鈕,將文件粘貼到外部存儲(chǔ)货裹,這時(shí)嗤形,在手機(jī)自帶的文件管理器中就可以找到剛剛的dex文件了
image.png

image.png

image.png

Step10:通過(guò)dex2jar對(duì)脫殼的dex文件進(jìn)行反編譯,得到的3個(gè)dex文件中弧圆,有的是無(wú)用的文件赋兵,可以依次打開(kāi)看看,最后可以看到搔预,脫殼后的dex文件被成功反編譯后


image.png

至此霹期,脫殼完成

源代碼和相關(guān)工具類已上傳碼云
https://gitee.com/xiaobug/XpDemo
https://gitee.com/xiaobug/reverse_tool

參考鏈接,感謝作者的無(wú)私奉獻(xiàn)
1斯撮、APK反編譯
2经伙、Android APK脫殼--騰訊樂(lè)固、360加固一鍵脫殼
3、【Xposed模塊開(kāi)發(fā)入門(mén)】
4帕膜、Xposed 熱更新(干貨枣氧,建議收藏)
5、android apk編譯打包過(guò)程
6垮刹、Android工程師达吞,如何簡(jiǎn)單高效的學(xué)會(huì)smali語(yǔ)法
7、使用baksmali及smali修改apk并打包
8荒典、MT管理器
9酪劫、Oo0代碼混淆實(shí)現(xiàn)方法
10、修改AndroidStudio混淆配置文件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寺董,一起剝皮案震驚了整個(gè)濱河市覆糟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遮咖,老刑警劉巖滩字,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異御吞,居然都是意外死亡麦箍,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)陶珠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挟裂,“玉大人,你說(shuō)我怎么就攤上這事揍诽【魅兀” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵寝姿,是天一觀的道長(zhǎng)交排。 經(jīng)常有香客問(wèn)我划滋,道長(zhǎng)饵筑,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任处坪,我火速辦了婚禮根资,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘同窘。我一直安慰自己玄帕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布想邦。 她就那樣靜靜地躺著裤纹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鹰椒,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天锡移,我揣著相機(jī)與錄音,去河邊找鬼漆际。 笑死淆珊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奸汇。 我是一名探鬼主播施符,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼擂找!你這毒婦竟也來(lái)了戳吝?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贯涎,失蹤者是張志新(化名)和其女友劉穎骨坑,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體柬采,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欢唾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粉捻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片礁遣。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肩刃,靈堂內(nèi)的尸體忽然破棺而出祟霍,到底是詐尸還是另有隱情,我是刑警寧澤盈包,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布沸呐,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏俐填。R本人自食惡果不足惜揣非,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呼渣。 院中可真熱鬧,春花似錦寞埠、人聲如沸屁置。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蓝角。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間使鹅,已是汗流浹背颇象。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留并徘,地道東北人遣钳。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像麦乞,于是被迫代替她去往敵國(guó)和親蕴茴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355