1裆蒸、 IDA中各種命名前綴(sub、loc必峰、offset等)的含義
IDA自動生成假名字洪唐。他們用于表示子函數(shù),程序地址和數(shù)據(jù)自点。根據(jù)不同的類型和值假名字有不同前綴
sub_ 指令和子函數(shù)起點(diǎn)
locret_ 返回指令
loc_ 指令
off_ 數(shù)據(jù)桐罕,包含偏移量
seg_ 數(shù)據(jù)脉让,包含段地址值
asc_ 數(shù)據(jù)桂敛,ASCII字符串
byte_ 數(shù)據(jù),字節(jié)(或字節(jié)數(shù)組)
word_ 數(shù)據(jù)溅潜,16位數(shù)據(jù)(或字?jǐn)?shù)組)
dword_ 數(shù)據(jù)术唬,32位數(shù)據(jù)(或雙字?jǐn)?shù)組)
qword_ 數(shù)據(jù),64位數(shù)據(jù)(或4字?jǐn)?shù)組)
flt_ 浮點(diǎn)數(shù)據(jù)滚澜,32位(或浮點(diǎn)數(shù)組)
dbl_ 浮點(diǎn)數(shù)粗仓,64位(或雙精度數(shù)組)
tbyte_ 浮點(diǎn)數(shù),80位(或擴(kuò)展精度浮點(diǎn)數(shù))
stru_ 結(jié)構(gòu)體(或結(jié)構(gòu)體數(shù)組)
algn_ 對齊指示
unk_ 未處理字節(jié)
2设捐、在graph view里顯示offset
先切換到graph view借浊,然后在菜單上的“Options”、“General”里勾選
點(diǎn)擊ok萝招,即可看到效果
可以看到蚂斤,多了前面的地址,這樣就不用再graph view和text view之間來回切換了槐沼。
2曙蒸、Rebase Program
剛開始進(jìn)行逆向分析的時候捌治,我們就接觸到這個公式
偏移后模塊基地址 = 偏移前模塊基地址 + ASLR偏移
我們在每次下斷點(diǎn)的時候,都是通過先手工在IDA里查看的偏移前模塊基地址纽窟,再手工在LLDB里查看ASLR偏移肖油,最后手工在計算器里將兩者相加的方式來計算偏移后模塊基地址的,雖然結(jié)果可以保證100%正確臂港,但操作流程稍有些復(fù)雜森枪,特別是每次計算偏移后模塊基地址,每次copy趋艘,copy疲恢,然后add,這樣真的超級煩超級煩有木有瓷胧?那么显拳,有沒有簡單的方法呢?
接下來搓萧,我們一起看看杂数,如何才能只手工操作一次,就可以搞定所有斷點(diǎn)的地址瘸洛。那就是讓IDA直接顯示計算好的偏移后模塊基地址揍移。
1) 首先在LLDB里查看待分析模塊的ASLR偏移
(lldb) image list -o -f
[ 0] 0x00000000000a0000 /var/containers/Bundle/Application/046BD91B-E9FB-4C77-8EC3-908237232716/TargetApp.app/TargetApp(0x00000001000a0000)
...
這里ASLR偏移是0x00000000000a0000。
2) 打開IDA設(shè)置rebase program
首先將鼠標(biāo)光標(biāo)點(diǎn)擊到IDA右邊的界面反肋,這樣才會有我們需要設(shè)置的選項(xiàng)那伐。
在菜單上的“Edit”、“Segments”石蔗、“Rebase program...”里將“Value”的值加上TargetApp的ASLR偏移罕邀,
我們可以看到起始的地址是0x100000000
加上ASLR偏移地址
點(diǎn)擊ok,這里需要等待一會养距。完成之后現(xiàn)在IDA里面的地址就是我們想要的偏移后模塊基地址了诉探,就可以直接拿來用了。
我們走起一個試驗(yàn)一下:
我們在右邊IDA view里搜索方法名onClickButtonPressed棍厌,對這個方法進(jìn)行下斷點(diǎn)
搜索匹配到:
然后我們在調(diào)試的時候lldb下斷點(diǎn)
(lldb) br delete
About to delete all breakpoints, do you want to do that?: [Y/n] y
All breakpoints removed. (4 breakpoints)
(lldb) br s -a '0x0000000100558270'
Breakpoint 21: where = lagouhr_appstore`-[LGNavigateCompanyInfoViewController onClickButtonPressed:], address = 0x0000000100558270
(lldb)
ok肾胯,可以看到下面斷點(diǎn)的方法就是我們搜索的方法名。