iOS逆向:動(dòng)態(tài)調(diào)試

目錄
一已球,Xcode動(dòng)態(tài)調(diào)試的原理
二臣镣,終端動(dòng)態(tài)調(diào)試的原理
三,建立連接
四智亮,LLDB常用命令
五忆某,ASLR

一,Xcode動(dòng)態(tài)調(diào)試的原理

1鸽素,圖解
2褒繁,說明
  • LLDB是Xcode自帶的調(diào)試器
  • 在真機(jī)調(diào)試時(shí),Xcode會(huì)自動(dòng)將debugserver安裝到iPhone上
  • 執(zhí)行過程

1>LLDB將調(diào)試命令發(fā)送給debugserver
2>debugserver將調(diào)試命令執(zhí)行到APP上
3>APP將調(diào)試信息反饋給debugserver
4>debugserver將調(diào)試信息轉(zhuǎn)發(fā)給LLDB

  • Xcode只能調(diào)試通過Xcode安裝的APP

二馍忽,終端動(dòng)態(tài)調(diào)試的原理

1棒坏,圖解
2,說明
  • 需要手動(dòng)啟動(dòng)LLDB
  • 需要手動(dòng)建立LLDBdebugserver之間的連接

  • 需要手動(dòng)建立debugserver和APP之間的連接

  • 建立好連接后就可以用終端調(diào)試任何APP了

三遭笋,建立連接

1坝冕,debugserver和APP的連接
  • debugserver授予調(diào)試所有APP的權(quán)限

1>從iPhone中導(dǎo)出debugserver,再從debugserver中導(dǎo)出權(quán)限文件

2>在權(quán)限文件中添加兩個(gè)字段:get-task-allow瓦呼,task_for_pid-allow

3>將權(quán)限文件重新添加到debugserver

4>將授權(quán)后的debugserver添加到iPhone的/usr/bin目錄下(原目錄中的無法替換)

  • 連接APP

1>方法一:debugserver *:[非保留端口號(hào)] -a [APP進(jìn)程名稱](先手動(dòng)啟動(dòng)APP)

2>方法二:debugserver -x auto *:[非保留端口號(hào)] [APP可執(zhí)行文件路徑](會(huì)自動(dòng)啟動(dòng)APP)

2喂窟,LLDB和debugserver的連接
  • 端口映射(10011是Mac端口,222是iPhone端口)
  • 連接debugserver:process connect connect://localhost:[非保留端口號(hào)](需要先連接APP)
  • 放開斷點(diǎn)(連接成功后會(huì)自動(dòng)打一個(gè)斷點(diǎn))
3央串,圖解

四磨澡,LLDB常用命令

1,frame
  • frame variable:打印方法內(nèi)部所有局部變量的信息
  • frame variable [變量名]:打印方法內(nèi)部某個(gè)局部變量的信息
2质和,expression
  • expression [表達(dá)式](簡(jiǎn)寫:p [表達(dá)式]):打印信息或執(zhí)行代碼
  • expression -O -- [表達(dá)式](簡(jiǎn)寫:po [表達(dá)式]):打印信息或執(zhí)行代碼
3稳摄,thread
  • thread backtrace(簡(jiǎn)寫:bt):打印當(dāng)前線程的堆棧信息
  • thread return [返回值]:讓方法直接返回,不執(zhí)行斷點(diǎn)后面的代碼
  • thread continue(簡(jiǎn)寫:continuec):跳過當(dāng)前斷點(diǎn)饲宿,繼續(xù)運(yùn)行
  • thread step-over(簡(jiǎn)寫:nextn):?jiǎn)尾竭\(yùn)行厦酬,遇到方法不會(huì)進(jìn)入
  • thread step-in(簡(jiǎn)寫:steps):?jiǎn)尾竭\(yùn)行胆描,遇到方法會(huì)進(jìn)入
  • thread step-out(簡(jiǎn)寫:finish):直接執(zhí)行完當(dāng)前方法,回到方法調(diào)用的位置
  • thread step-inst-over(簡(jiǎn)寫:nextini):?jiǎn)涡袇R編運(yùn)行仗阅,遇到函數(shù)不會(huì)進(jìn)入
  • thread step-inst(簡(jiǎn)寫:stepisi):?jiǎn)涡袇R編運(yùn)行昌讲,遇到函數(shù)會(huì)進(jìn)入
4,breakpoint
  • breakpoint set -n [方法名]:設(shè)置斷點(diǎn)
  • breakpoint set -a [方法地址]:設(shè)置斷點(diǎn)
  • breakpoint set -r [方法關(guān)鍵詞]:設(shè)置斷點(diǎn)
  • breakpoint list:列出所有斷點(diǎn)
  • breakpoint disable [斷點(diǎn)編號(hào)]:禁用斷點(diǎn)
  • breakpoint enable [斷點(diǎn)編號(hào)]:?jiǎn)⒂脭帱c(diǎn)
  • breakpoint delete [斷點(diǎn)編號(hào)]:刪除斷點(diǎn)
  • breakpoint command add [斷點(diǎn)編號(hào)]:給斷點(diǎn)添加命令减噪,當(dāng)觸發(fā)斷點(diǎn)時(shí)短绸,這些命令就會(huì)按順序執(zhí)行
  • breakpoint command list [斷點(diǎn)編號(hào)]:列出所有斷點(diǎn)命令
  • breakpoint command delete [斷點(diǎn)編號(hào)]:刪除斷點(diǎn)命令
5,watchpoint
  • watchpoint set variable [變量名]:給變量設(shè)置斷點(diǎn)筹裕,當(dāng)變量被修改時(shí)觸發(fā)
  • watchpoint set expression [變量地址]:給變量設(shè)置斷點(diǎn)鸠按,當(dāng)變量被修改時(shí)觸發(fā)
6,image
  • image lookup -t [類型]:查看某個(gè)類型的信息
  • image lookup -n [方法名]:根據(jù)方法名查找方法的位置
  • image lookup -a [方法地址]:根據(jù)方法地址查找方法的位置
  • image list:列出所有已加載的動(dòng)態(tài)庫
7饶碘,help(查看命令的用法)

五目尖,ASLR

1,Mach-O基本結(jié)構(gòu)
  • Header:文件類型扎运、架構(gòu)類型等信息
  • Load commands:描述文件數(shù)據(jù)在內(nèi)存中是如何分布的
  • data:文件數(shù)據(jù)在內(nèi)存中的具體分布
2瑟曲,Data基本結(jié)構(gòu)
  • _PAGEZERO:預(yù)留的內(nèi)存空間
  • _TEXT:代碼段,存儲(chǔ)編譯之后的代碼
  • _DATA:數(shù)據(jù)段豪治,存儲(chǔ)字符串常量洞拨、全局變量和靜態(tài)變量
3,字段介紹
  • VM Address:在虛擬內(nèi)存中的位置
  • VM Size:在虛擬內(nèi)存中的大小
  • File Offset:在Mach-O文件中的位置
  • File Size:在Mach-O文件中的大小
4负拟,使用ASLR前的內(nèi)存布局
  • 圖解
  • 說明

1>_PAGEZERO在Mach-O文件中的大小為0x0烦衣,加載進(jìn)內(nèi)存后大小為0x100000000(arm64架構(gòu)下)
2>HeaderLoad commands都是描述信息,存儲(chǔ)在_TEXT中掩浙,所以內(nèi)存空間從_PAGEZERO開始分配
3>代碼編譯完成后花吟,_TEXT中方法的位置和_DATA中變量的位置就是固定的,這樣很容易進(jìn)行動(dòng)態(tài)調(diào)試厨姚,為了增加安全性衅澈,從iOS4.3開始就引入了ASLR技術(shù)

5,使用ASLR后的內(nèi)存布局
  • 圖解
  • 說明

1>ASLRAddress Space Layout Randomization(地址空間布局隨機(jī)化)的縮寫
2>引入ASLR技術(shù)后谬墙,當(dāng)Mach-O文件加載進(jìn)內(nèi)存時(shí)今布,會(huì)隨機(jī)生成一個(gè)內(nèi)存地址,然后從該地址開始進(jìn)行內(nèi)存空間的分配
3>雖然方法和變量的位置是固定的拭抬,但是內(nèi)存地址就變得隨機(jī)了部默,這樣就會(huì)增加動(dòng)態(tài)調(diào)試的難度,從而提高了安全性

6造虎,獲取方法的真實(shí)內(nèi)存地址
  • ASLR虛擬內(nèi)存地址
  • ASLR隨機(jī)內(nèi)存地址(Mach-O文件加載進(jìn)內(nèi)存的起始地址)
  • 真實(shí)內(nèi)存地址(調(diào)試其他APP時(shí)傅蹂,需要用真實(shí)內(nèi)存地址來設(shè)置斷點(diǎn),用方法名是無效的)
0x1000055b8 + 0xb4000 = 0x1000b95b8
本文章僅供學(xué)習(xí)交流累奈,如有侵權(quán)贬派,請(qǐng)聯(lián)系刪除,謝謝澎媒!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搞乏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子戒努,更是在濱河造成了極大的恐慌请敦,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镣奋,死亡現(xiàn)場(chǎng)離奇詭異具伍,居然都是意外死亡锅锨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門匣椰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人端礼,你說我怎么就攤上這事禽笑。” “怎么了蛤奥?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵佳镜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我凡桥,道長(zhǎng)蟀伸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任缅刽,我火速辦了婚禮啊掏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衰猛。我一直安慰自己脖律,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布腕侄。 她就那樣靜靜地躺著小泉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冕杠。 梳的紋絲不亂的頭發(fā)上微姊,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音分预,去河邊找鬼兢交。 笑死,一個(gè)胖子當(dāng)著我的面吹牛笼痹,可吹牛的內(nèi)容都是我干的配喳。 我是一名探鬼主播酪穿,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼晴裹!你這毒婦竟也來了被济?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤涧团,失蹤者是張志新(化名)和其女友劉穎只磷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泌绣,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钮追,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阿迈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片元媚。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖苗沧,靈堂內(nèi)的尸體忽然破棺而出惠毁,到底是詐尸還是另有隱情,我是刑警寧澤崎页,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布鞠绰,位于F島的核電站,受9級(jí)特大地震影響飒焦,放射性物質(zhì)發(fā)生泄漏蜈膨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一牺荠、第九天 我趴在偏房一處隱蔽的房頂上張望翁巍。 院中可真熱鬧,春花似錦休雌、人聲如沸灶壶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驰凛。三九已至,卻和暖如春担扑,著一層夾襖步出監(jiān)牢的瞬間恰响,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工涌献, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胚宦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像枢劝,于是被迫代替她去往敵國(guó)和親井联。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361