無源碼apk調(diào)試

前言

這年頭仰挣,apk全都是加密啊冒冬,加殼啊伸蚯,反調(diào)試啊,小伙伴們表示已經(jīng)不能愉快的玩耍了简烤。靜態(tài)分析越來越不靠譜了剂邮,apktool、ApkIDE横侦、jd GUI挥萌、dex2jar等等等等已經(jīng)無法滿足大家的需求了。那么問題就來了枉侧,小伙伴們真正需要的是什么引瀑?好的,大家一起吶喊出你內(nèi)心的欲望吧榨馁,我們的目標是——“debug apk step by step”憨栽。

那些不靠譜的工具

先來說說那些不靠譜的工具,就是今天吭了我小半天的各種工具翼虫,看官上坐屑柔,待我細細道來。

IDA pro

IDA pro6.6之后加入了dex動態(tài)調(diào)試功能珍剑,一時間普天同慶掸宛、喜大普奔。興奮之后你才會發(fā)現(xiàn)IDA這東西在動態(tài)調(diào)試方面真的是很挫招拙,就算他是靜態(tài)反編譯之王旁涤,我也不得不說他的動態(tài)調(diào)試功能還非常需要加強。先說說使用ida調(diào)試dex的方法迫像。

IDA pro調(diào)試dex流程:

1.? ? ? ? 用apktool反編譯apk劈愚,添加android:debuggable=”true”,重打包apk并簽名

2.? ? ? ? 從apk文件中扣出class.dex文件闻妓,不管你用什么方法菌羽,7zip、unzip…whatever

3.? ? ? ? 用ida打開這個dex文件由缆,直到output window窗口顯示“xxxx finished”

4.? ? ? ? 設(shè)置debugger選項注祖,debugger->debugger options->set specific options猾蒂,按如圖1所示進行設(shè)置,然后一路確定返回

5.? ? ? ? 找到要下斷點的位置是晨,光標移到要下斷點的那一行肚菠,按f2下斷點

6.? ? ? ? 手機開啟調(diào)試選項,鏈接usb到電腦

7.? ? ? ? 選中IDA pro窗口罩缴,按f9走起蚊逢,不出意外的話應該會出現(xiàn)如圖2的畫面,成功啦~

圖 1 ida debug配置
圖 2 ida動態(tài)調(diào)試apk

觸發(fā)斷點箫章,在watch view和Locals窗口都能看到內(nèi)存變量的值烙荷,簡直就是畫美不看啊,是不是有點小興奮檬寂?终抽!我只能說高興的太早了,小伙伴們還是太天真了桶至,仔細觀察下昼伴,就算你勾選了“Hex display”,你還是無法以hex格式顯示變量的值镣屹,就是說不可顯示字符你都看不到值是什么亩码,而且我找了很久也沒找到類似windbg、od野瘦、vc6描沟、gdb、lldb那樣以各種姿勢或者命令直接查看某內(nèi)存地址值的功能鞭光,然后就出現(xiàn)了如圖3的畫面……WTF吏廉!我特么忙活了半天居然還不如直接logcat來得痛快!

圖 3??Locals窗口

apktool+eclipse

其實小生一直還是很支持eclipse的惰许,畢竟伴我度過了無數(shù)不眠之夜和懵懂的年華(當然蒼老師和windbg可能占的更多)席覆,可是這次我真的有點小失望哈。由于使用apktool+eclipse和apktool+android studio的調(diào)試方法跟apktool+idea一樣汹买,調(diào)試方法后面一起說佩伤,這里我就純吐槽了先。

當小伙伴們成功設(shè)置調(diào)試選項晦毙,帶著嗨翻的心情進入調(diào)試界面的時候生巡,我們看到了如圖4的畫面,細細觀察和各種嘗試之后见妒,我保證你的心里一定有一萬頭草泥馬奔騰而過9氯佟!!盐股。

圖 4 eclipse單步調(diào)試apk

我們都看到了啥:

?? ? ? ? debug窗口表示命中第30行的斷點

?? ? ? ? variables窗口沒有任何本地變量的值钱豁,寄存器的值也沒有

?? ? ? ? 單步步入、單步步過等調(diào)試按鈕都是灰色的疯汁,快捷鍵F5678都沒反應

我就想知道這你讓我怎么debug牲尺,難道我要設(shè)無限個斷點,拼命f9來調(diào)試幌蚊?就算是這樣谤碳,我該去哪兒看變量的值?

apktool+android studio

android studio這個東西本來是蠻不錯的霹肝,就是稍微有點卡,習慣了也還好塑煎。其實android studio本身就是用idea改的沫换,但是好像給改挫了。調(diào)試方法還是后面再說最铁,直接上成功掛載到調(diào)試界面的圖讯赏,如圖5。

圖 5 android studio單步調(diào)試apk

這次情況是這樣的:

?? ? ? ? 可以看到現(xiàn)在程序停在哪一行冷尉,雖然不明顯

?? ? ? ? 本地變量能看到漱挎,但是寄存器還是木有啊

?? ? ? ? 單步按鈕還有單步快捷鍵都能用了,看起來好多了啊

我還是想說雀哨,問題是寄存器的值還是沒法直觀的看到啊磕谅,對于有強迫癥的我還是無法接受這種設(shè)定啊,想當年vc6雾棺、od膊夹、windbg、gdb捌浩、lldb是多么的給力放刨,多么的好用!

apktool+idea

正菜來了尸饺,apktool 2.0bete9版本推出了-d選項进统,專門用來重打包apk進行單步調(diào)試的,給力浪听!apktool+idea無源碼debug apk step by step簡直不要太好用螟碎,這也是我跟小波請教之后才弄好的,這個選項也是小波等人建議apktool作者這樣做的迹栓,不禁感嘆一句抚芦,波神你為何這么屌!

3.1調(diào)試基礎(chǔ)

本小節(jié)內(nèi)容引用自看雪論壇@火翼[CCG]的文章,原文鏈接:

http://www.kanxue.com/bbs/showthread.php?p=1291716

根據(jù)android的官方文檔叉抡,如果要調(diào)試一個apk里面的dex代碼尔崔,必須滿足以下兩個條件中的任何一個:

1.? ? ? ? apk中的AndroidManifest.xml文件中的Application標簽包含屬性android:debuggable=”true”

2.? ? ? ? /default.prop中ro.debuggable的值為1

由于正常的軟件發(fā)布時都不會把android:debuggable設(shè)置為false(當然也不排除某些很2的應用偏偏就是true),所以要達成條件1需要對app進行重新打包褥民,這不僅每次分析一個apk都重復操作季春,而且很多軟件會對自身進行校驗,重打包后執(zhí)行會被檢測到消返,所以想辦法滿足第2個條件是個一勞永逸的辦法载弄。

由于default.prop是保存在boot.img的ramdisk中,這部分每次重新啟動都會重新從rom中加載撵颊,所以要到目的必須修改boot.img中的ramdisk并重新刷到設(shè)備中宇攻。修改步驟如下(我沒試過,有興趣的倒騰下):

1.? ? ? ? 從Google官方網(wǎng)站下載到boot.img

2.? ? ? ? 使用工具(abootimg倡勇,gunzip, cpio)把boot.img完全解開逞刷,獲取到default.prop

3.? ? ? ? 修改default.prop

4.? ? ? ? 把修改后的文件重新打包成boot_new.img

5.? ? ? ? 使用fastboot工具把boot_new.img刷入設(shè)備(fastboot flash boot boot_new.img)

3.2調(diào)試方法

這里我們還是用第一種方法來進行測試:

1.下載apktool2.0b9版本,下載地址:

http://connortumbleson.com/2014/02/06/apktool-2-0-0-beta-9-released/

2.使用apktool反編譯apk:

java -jar apktool_2.0.0b9.jar d -d xxx.apk -o out

加上-d選項之后反編譯出的文件后綴為.java妻熊,而不是.smali夸浅,每個.java文件立馬都偽造成了一個類,語句全都是“a=0;”這一句扔役,smali語句成為注釋帆喇,小伙伴們自己看看打開就知道了,做這些都是為了后面欺騙idea亿胸、eclipse坯钦、android studio這些ide的;

3.加入android:debuggable=”true”選項侈玄;

4.重打包apk葫笼,一定記得也使用-d選項:

java -jar apktool_2.0.0b9.jar b -d out -o debug.apk

5.對apk進行簽名并安裝apk到調(diào)試設(shè)備(這個不用我說怎么操作吧);

6.下載安裝并打開idea拗馒,新建一個空的java項目路星,本例中項目名為“DebugOnly”,將apk反編譯后的smali目錄下的所有文件拷貝到剛才新建的java項目的src/目錄下诱桂,刷新洋丐,如圖6;

圖 6 拷貝文件
圖 7 命令運行效果

此時在調(diào)試設(shè)備上會顯示等待調(diào)試器接入:

圖 8 調(diào)試設(shè)備狀態(tài)

8.從android device monitor上發(fā)現(xiàn)需要調(diào)試的程序已經(jīng)顯示在列表里面了挥等,記下端口號友绝,本例中為8700;

圖 9 android device monitor

9. 新建遠程調(diào)試:依次點擊run-> edit configuration->“+”號->Remote肝劲,選中第6步中新建的項目迁客,填寫第8步中獲得的端口號郭宝,如圖10;

圖 10 debug設(shè)置

10.找到相應位置設(shè)置斷點(在想設(shè)斷點的位置前后多設(shè)置幾個斷點)掷漱,點擊run->debug->unnamed粘室,其中unnamed是第9步中新建的遠程調(diào)試的名字;

圖 11 遠程調(diào)試名字

11.不出意外的話卜范,小伙伴們應該能看到如圖12所示的畫面衔统,恭喜你,已經(jīng)成功了海雪!此時此刻興奮之情簡直能以言表哈~good luck! have fun! enjoy~

圖12 一切都是最好的樣子

后語

另外锦爵,阿呆曾經(jīng)提到一篇文章用jdb遠程調(diào)試android程序的文章,鏈接為:http://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications/奥裸,我沒有嘗試過险掀,主要是我比較懶,用apktool+idea已經(jīng)夠用了湾宙,就沒去倒騰樟氢,有興趣的小伙伴請自行倒騰,別忘了分享创倔!

最后嗡害,其實我也不確定ida是不是真的不能以hex格式顯示變量值焚碌,或許是我不會用ida咧畦攘;我也不確定eclipse到底能不能看寄存器的值,單步按鈕和快捷鍵到底能不能用十电,或許是我eclipse版本的問題咧知押;我也不確定android studio到底能不能看到寄存器的值,或許是我android studio版本的問題咧鹃骂,再或者我用的調(diào)試設(shè)備有問題咧台盯,再或者我的臉有問題咧……以上問題,如果哪位小伙伴知道怎么解畏线,跪求告知静盅!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市寝殴,隨后出現(xiàn)的幾起案子蒿叠,更是在濱河造成了極大的恐慌,老刑警劉巖蚣常,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件市咽,死亡現(xiàn)場離奇詭異,居然都是意外死亡抵蚊,警方通過查閱死者的電腦和手機施绎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門溯革,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谷醉,你說我怎么就攤上這事致稀。” “怎么了孤紧?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵豺裆,是天一觀的道長。 經(jīng)常有香客問我号显,道長臭猜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任押蚤,我火速辦了婚禮蔑歌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揽碘。我一直安慰自己次屠,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布雳刺。 她就那樣靜靜地躺著劫灶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掖桦。 梳的紋絲不亂的頭發(fā)上本昏,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音枪汪,去河邊找鬼涌穆。 笑死,一個胖子當著我的面吹牛雀久,可吹牛的內(nèi)容都是我干的宿稀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赖捌,長吁一口氣:“原來是場噩夢啊……” “哼祝沸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起越庇,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤罩锐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后悦荒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唯欣,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年搬味,在試婚紗的時候發(fā)現(xiàn)自己被綠了境氢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蟀拷。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖萍聊,靈堂內(nèi)的尸體忽然破棺而出问芬,到底是詐尸還是另有隱情,我是刑警寧澤寿桨,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布此衅,位于F島的核電站,受9級特大地震影響亭螟,放射性物質(zhì)發(fā)生泄漏挡鞍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一预烙、第九天 我趴在偏房一處隱蔽的房頂上張望墨微。 院中可真熱鬧,春花似錦扁掸、人聲如沸翘县。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锈麸。三九已至,卻和暖如春牺蹄,著一層夾襖步出監(jiān)牢的瞬間忘伞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工钞馁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虑省,地道東北人匿刮。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓僧凰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親熟丸。 傳聞我的和親對象是個殘疾皇子训措,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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