在上一篇文章《Mac下反編譯apk》里我們分三步就成功反編譯出apk的源碼后雷,但是如果你是第一次看到期待已久的源碼的話(如果對方做了深度混淆)吠各,你肯定是一臉懵逼贾漏,a、b盒齿、c困食、d硕盹、e叨咖、-7816709... ...這tm都是些啥。老鐵垛贤,別慌聘惦,邏輯不是還在的嗎,看看這些不就是一些函數(shù)名黔漂、參數(shù)啥的嗎禀酱,咱們來仔細(xì)分析一下剂跟。
話說沒圖沒真相,下面是app中的圖(中間的AS是為了遮擋住個人信息鳍置,自動忽略):
反編譯運(yùn)行后的效果圖:
可以看到,兩者是一摸一樣的坊夫,進(jìn)度條部分环凿。我這不是邀功,而是這個確實(shí)能夠?qū)崿F(xiàn)你們產(chǎn)品或者UI要求的我就要和某某某app一毛一樣的效果羽杰,就是這么吊考赛。
看完效果我們就來分析怎么才能把已經(jīng)混淆的代碼“修補(bǔ)”成可以運(yùn)行的源碼莉测。
第一步:順藤摸瓜查找到相關(guān)資源和類
注意看這個個效果我們可以分為三部分:進(jìn)度條部分、房子忍抽、滾動的金幣鸠项、跑動的小人领铐,最簡單的實(shí)現(xiàn)方法肯定是ui給單獨(dú)的圖片組合起來要销,然后不停的繪制實(shí)現(xiàn)動畫效果浅辙。那我們的線索就是圖片資源阎姥。
打開反編譯后的文件夾我們在res/drawable-xhdpi-v4下面找到如下的圖片
獲取到圖片的name了那不就好辦多了嗎泽腮?是的當(dāng)時我就是這么想的衣赶,然后搗鼓了半天還沒找到相關(guān)代碼......
這里有個需要注意的地方:其實(shí)我們的代碼在編譯后資源和控件的id是在R文件中有一一對應(yīng)的關(guān)系的是十六進(jìn)制的編碼府瞄,現(xiàn)在的關(guān)鍵點(diǎn)是找到R文件就可以找到資源name對應(yīng)的十六進(jìn)制,轉(zhuǎn)成對應(yīng)的十進(jìn)制鲸郊,然后查找十進(jìn)制在代碼中的位置货邓。
values文件下的public.xml就是我們要找的R文件
就拿gjj_loading_ball這個圖片舉例换况,7f0201cd對應(yīng)的十進(jìn)制是2130837965戈二,jd-gui的find無法搜索到在代碼中的使用情況,這里我把jd-gui中的代碼都導(dǎo)出放在AndroidStudio中方便查找和修改腾供。
你可以同樣方法試一下后面的這些是不是都是要用到的資源的id。
新建自己的工程绒北,把你一步步查找到的資源和代碼copy到新工程中闷游。
大致瀏覽一下這個類,我們可以看到它是繼承Drawable并且實(shí)現(xiàn)Animatable接口不停的繪制實(shí)現(xiàn)的進(jìn)度動畫休吠,通過以上的步驟我們找到了動畫的具體實(shí)現(xiàn)類瘤礁,但是各種報(bào)錯梅尤,依賴找不到等巷燥,接下來我們需要去“修補(bǔ)”這個類。
首先我們發(fā)現(xiàn)兩個依賴找不到陨享,support.v4包下面的抛姑,a拍屑、y這種顯然是被混淆了僵驰,找到反編譯的v4包,widget包下的y和content包下的a
這是混淆之后的依賴,怎么查找原本的呢顽腾?我們有了這個類的結(jié)構(gòu)和具體的代碼,我們可以到我們項(xiàng)目中的v4包中查找(這中間還是比較費(fèi)力的)久信,經(jīng)過仔細(xì)摸排比對我們找了原本的依賴類裙士。
這其中有個小技巧比如
后面的是查找drawable資源腿椎,前面的參數(shù)是context啃炸,平常我們用的比較多的查找資源的方法是ContextCompat...這樣靠猜卓舵,如果你有更好的方法請告知我边器。
剩余的一些就是函數(shù)名的比對和資源的查找比對,這還真是個需要耐心的活恒界。
好了砚嘴,最主要的類被我們修復(fù)完成际长,最好把它重命名一下,不然后面看著還是有點(diǎn)懵虾宇,下面就是找這個類的使用了如绸。我們發(fā)現(xiàn)彈窗中還有一個白色的關(guān)閉按鈕嘱朽,這個肯定布局中imageview引用的,這樣我們可以查找到相關(guān)的布局怔接,再根據(jù)布局資源查找到布局在代碼使用的位置搪泳。這樣使用這個自定義Drawable的類就找到了,是/caiyi/ui/dialog/a.java這個類扼脐,其實(shí)找了半天這個dialog和自定義drawable是在同一目錄下...
這里面的使用情況請讀者自行琢磨岸军,這里我并沒有對源碼進(jìn)行分析,有空的話我會再寫一篇分析文章如何實(shí)現(xiàn)這種效果。一個簡單的demo艰赞,代碼傳送門
總結(jié)一下:在java層來說佣谐,其實(shí)簡單的反編譯并沒有那么難,主要是麻煩台谍。.so的反編譯有看過這方面的資料,但是還沒有實(shí)踐過吁断,這個后面有時間的話我會抽空實(shí)踐一下的。
其實(shí)很多東西比如ui效果什么的首先建議自己動手寫寫坞生,沒有靈感想走捷徑的話可以試試反編譯借鑒一下仔役。
能力有限,如果哪里有不對的地方是己,請留言告訴我又兵。