用python一步步解剖dex文件(三)

請勿轉(zhuǎn)載哨颂,謝謝3的!骡尽!?



全解析框架和信息篡改


用python一步步解剖dex文件(一)

用python一步步解剖dex文件(二)

前兩篇主要在已有的項目dexparser基礎(chǔ)上忿檩,做的研究和補充;但是想對dex做修改的話爆阶,這個就不夠了。

所以我自己做了一個解析框架,這個框架將dex分解為層級對象辨图,并且可以將層級對象重新還原回dex格式中班套。

框架代碼地址: https://github.com/callmejacob/dexfactory

android dex文件格式:

https://source.android.google.cn/devices/tech/dalvik/dex-format

android源碼中對dex格式的解析和校驗:

http://androidxref.com/8.0.0_r4/xref/dalvik/libdex/


框架結(jié)構(gòu)

dex文件可以看成是一個section的列表,每個section里包含一個item列表故河,而每個item中又可能嵌套某個數(shù)據(jù)結(jié)構(gòu)data吱韭。

其中,section列表的信息(類型鱼的,子項數(shù)目理盆,文件偏移量)最終會記錄在叫MAP_LIST的section段中。

基于此凑阶,首先抽象出一個字節(jié)數(shù)組對象類(BytesObject)猿规,它包含一個字節(jié)數(shù)組和解碼編碼的方法,解碼用于從該字節(jié)數(shù)組中獲取一個對象信息宙橱,編碼用于將對象信息重新壓縮回字節(jié)數(shù)組中姨俩。

上面提到的data使用BaseData抽象,item使用BaseItem抽象师郑,section使用BaseSection抽象环葵。

繼承關(guān)系如下:

基類圖

每個section都是有類型的:(按官方文檔,這里缺失一些類型宝冕,需要繼續(xù)補充)

類型定義

基于抽象基類和類型张遭,我們定義基于BaseItem的各個類型的子類,并做item類的映射表:

item類映射表

并且定義基于BaseSection的各個類型的子類地梨,并做section類的映射表:

section類映射表

為了能夠跨越section獲取信息菊卷,定義一個上下文的類Context,它包含了section的映射表:

Context類

最后定義一個Dex文件的信息類DexInfo湿刽,它負責(zé)打開dex文件的烁,解碼,編碼诈闺,保存渴庆,打印等等。

DexInfo

最主要的流程還是解碼和編碼的過程:

解碼過程
編碼過程

這里面的難點主要是文件偏移量和排序問題雅镊。

dex的數(shù)據(jù)結(jié)構(gòu)中襟雷,很多是直接用文件偏移量表示的,可是該文件偏移量對應(yīng)的項信息發(fā)生了更改(特別是文件偏移量需要調(diào)整的時候)仁烹,就會出現(xiàn)混亂耸弄;還有android的libdex在解析dex時會做很多順序的校驗,比如string_ids列表的數(shù)字必須從低到高等卓缰。

為此计呈,我做了兩重映射:? off? <>? id? <>? item

其中off是指文件偏移量砰诵,id是指對應(yīng)的子項在section中的索引編號,而item就是對應(yīng)的子項捌显。

在解碼過程中茁彭,從Dex里解析到的是off,然后使用[ off ---> id ]轉(zhuǎn)換扶歪,再做[ id ---> item ]轉(zhuǎn)換理肺,這樣子項item里的信息,就包含了其它section中相應(yīng)的id和item信息善镰。

在編碼過程中妹萨,因為section里的子項列表可能做了調(diào)整,所以先做[ item ---> id ]轉(zhuǎn)換(同時按照新的id進行排序)炫欺,再做[ id ---> off ]轉(zhuǎn)換乎完,這樣最后的偏移量就是準確的偏移量了。


測試程序和字符串修改

Demo

其中修改函數(shù)如下:

修改字符串

運行結(jié)果:

result

使用dexdump可以立即檢測下新的dex文件是否有問題:

dexdump classes_new.dex

如果發(fā)現(xiàn)錯誤信息竣稽,可以到android源碼中的dalvik/libdex中囱怕,找尋相應(yīng)的提示來定位問題。

最后毫别,將新的dex文件替換掉原有apk中的dex文件娃弓,重新用zip壓縮為apk,并重新簽名岛宦。

這里提供一個mac上的簽名工具:


地址:? 鏈接: https://pan.baidu.com/s/1kXiUgFt 密碼: xy6j


使用:? signapk.sh xxx.apk xxx_signed.apk



需要完善的地方

1. 類型不完全

2. 排序功能不完全

3. 字節(jié)碼反編譯框架

4. 數(shù)據(jù)使用需要優(yōu)化



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末台丛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子砾肺,更是在濱河造成了極大的恐慌挽霉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件变汪,死亡現(xiàn)場離奇詭異侠坎,居然都是意外死亡,警方通過查閱死者的電腦和手機裙盾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門实胸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人番官,你說我怎么就攤上這事庐完。” “怎么了徘熔?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵门躯,是天一觀的道長。 經(jīng)常有香客問我酷师,道長讶凉,這世上最難降的妖魔是什么染乌? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮缀遍,結(jié)果婚禮上慕匠,老公的妹妹穿的比我還像新娘。我一直安慰自己域醇,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布蓉媳。 她就那樣靜靜地躺著譬挚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酪呻。 梳的紋絲不亂的頭發(fā)上减宣,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機與錄音玩荠,去河邊找鬼漆腌。 笑死,一個胖子當(dāng)著我的面吹牛阶冈,可吹牛的內(nèi)容都是我干的闷尿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼女坑,長吁一口氣:“原來是場噩夢啊……” “哼填具!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起匆骗,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤劳景,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后碉就,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盟广,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年瓮钥,在試婚紗的時候發(fā)現(xiàn)自己被綠了筋量。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡骏庸,死狀恐怖毛甲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情具被,我是刑警寧澤玻募,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站一姿,受9級特大地震影響七咧,放射性物質(zhì)發(fā)生泄漏跃惫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一艾栋、第九天 我趴在偏房一處隱蔽的房頂上張望爆存。 院中可真熱鬧,春花似錦蝗砾、人聲如沸先较。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闲勺。三九已至,卻和暖如春扣猫,著一層夾襖步出監(jiān)牢的瞬間菜循,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工申尤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留癌幕,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓昧穿,卻偏偏與公主長得像勺远,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粤咪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 引 odex文件是dalvik虛擬機(android 5.0以前的版本)谚中,為了優(yōu)化dex的使用(如提高查找類的速度...
    虎七閱讀 3,212評論 0 8
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,070評論 25 707
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料寥枝? 從這篇文章中你...
    hw1212閱讀 12,712評論 2 59
  • 請勿轉(zhuǎn)載宪塔,謝謝!D野荨某筐! 目標 這里的dex文件,就是android中dalvik虛擬機運行的程序格式文件冠跷;art虛擬...
    虎七閱讀 2,878評論 0 6
  • 什么是匠人精神南誊? “匠人精神”就是對工作執(zhí)著、對所做的事情和生產(chǎn)的產(chǎn)品精益求精蜜托、精雕細琢的精神抄囚。 “匠人”是技藝精...
    御涵2017閱讀 590評論 1 0