使用fart dump下來(lái)ins后,需要手動(dòng)去還原
這時(shí)候會(huì)覺(jué)得非常麻煩,想要自動(dòng)化务荆。
我下載了dexlib2和baksmali 發(fā)現(xiàn)無(wú)從下手不知道怎么搞
在肉絲大佬幫助下
https://bbs.pediy.com/thread-259854.htm
參考別人的dx代碼去合并,就能還原抽取了
雖然代碼吵得很開(kāi)心,但是還是得知道怎么實(shí)現(xiàn)得紧武。
首先下載android得source code,我下得是8.1得敏储,10個(gè)g阻星。有點(diǎn)大。
其中我們需要在daivak下復(fù)制這三個(gè)目錄得代碼到自己得項(xiàng)目中
把別人得jar拉到j(luò)adx中已添,在unpacker目錄下可以找到main函數(shù)
其中妥箕,使用方法就一行代碼。其中得methodCodeitem是自己加得更舞。
一路跟蹤下去 可以發(fā)現(xiàn)在transtromMethod得方法中進(jìn)行了更改矾踱。
上面是原有得方法。而我們來(lái)看看下半部分得代碼是怎么還原得
我們和transformCode方法對(duì)比著看
兩個(gè)紅框中得代碼是一樣得疏哗。而后面就開(kāi)始寫(xiě)registerSize呛讲。
而在自己改得方法中,是直接this.codeOut.write(codeItem.code)
而我們看fart打出來(lái)得log
可以發(fā)現(xiàn)也是從registerSize打印起得返奉。說(shuō)明fart dump下來(lái)的ins也是從registerSize起的贝搁。因此直接寫(xiě)進(jìn)去即可
而后面還寫(xiě)入debugInfo這個(gè)數(shù)據(jù)進(jìn)去。但是據(jù)我了解這個(gè)東西可有可無(wú)芽偏,我把這段刪去后雷逆,jadx也是能正常顯示還原后的代碼的。
因此整個(gè)還原的主要改動(dòng)就是以上贅述的東西污尉。
當(dāng)然了膀哲,某些地方還要加try catch 。這些細(xì)節(jié)就不啰嗦被碗。
總結(jié)一下某宪,抄代碼真爽(我真垃圾)