IDA 制作 sig文件 && gdb 導(dǎo)入符號(hào)表

背景

最近比賽遇到了一個(gè)題目, 32位靜態(tài)鏈接去符號(hào)了. 所以用IDA分析的時(shí)候很多l(xiāng)ibc的庫(kù)函數(shù)都無法識(shí)別, 就需要在 IDA 中引入 sig 文件. 從而可以識(shí)別諸如 read, write, malloc, free 這些庫(kù)函數(shù). 雖然網(wǎng)上已經(jīng)有很多制作好的sig文件, 但是還是應(yīng)該學(xué)會(huì)自己制作sig文件以備不時(shí)之需.

有了 sig 文件后靜態(tài)分析是沒問題了, 但是動(dòng)態(tài)調(diào)試的時(shí)候因?yàn)闆]有符號(hào)還是很麻煩, 比如這題我就需要查看 _IO_FILE_plus 這個(gè)結(jié)構(gòu)體的內(nèi)容就會(huì)很麻煩

pwndbg> p *(struct _IO_FILE_plus *) 0xf7ffdbe9
No struct type named _IO_FILE_plus.

所以我們還需要在gdb中導(dǎo)入libc中的符號(hào)表.

下面就是具體解決方案

一. 制作 sig 文件

需要使用 idasdk, 下載鏈接在本文底部.
我是在windows下制作的, 建議下載解壓后添加到系統(tǒng)路徑中:idasdk70\flair70\bin\win

1.獲取libc.a
我的系統(tǒng)是 ubuntu 16.04 server. 這個(gè)系統(tǒng)上 32位 libc.a 的位置是 /usr/libx32/libc.a, 64位的我沒找到

  1. 制作pat文件
    需要用到上面找到的libc.a 以及 idasdk70\flair70\bin\win\ 下的 pelf.exe:
pelf.exe .\libc.a .\libc.pat
  1. 根生成 sig文件
    需要用到上一步生成的 pat文件以及 idasdk70\flair70\bin\win\下的 sigmake.exe
sigmake.exe .\libc.pat .\libc.sig

這一步可能會(huì)報(bào)錯(cuò)

.\libc.sig: modules/leaves: 1306/1575, COLLISIONS: 14
See the documentation to learn how to resolve collisions.

猜測(cè)是因?yàn)橛行┖瘮?shù)會(huì)對(duì)應(yīng)好幾個(gè)符號(hào), 為了保證函數(shù)和符號(hào)一一對(duì)應(yīng), 就需要人為干預(yù)一下.

解決方法就是修改當(dāng)前目錄下的 libc.exec 文件, 具體操作文件里有提示.
修改之后再執(zhí)行一遍

sigmake.exe .\libc.pat .\libc.sig

即可得到 libc.sig 文件.

  1. 導(dǎo)入IDA
    首先將上一步得到的 sig 文件復(fù)制到 IDA安裝目錄的sig/pc下.

然后打開IDA 部脚, shift+F5瞎抛,右鍵添加新的簽名文件, 選擇 libc.sig即可

二. gdb 導(dǎo)入符號(hào)表

方法很簡(jiǎn)單

gdb -e ./pwn -s ./libc.so

pwn 是去符號(hào)靜態(tài)鏈接的文件.
libc.so 是本地帶符號(hào)的動(dòng)態(tài)鏈接庫(kù).
libc.so和pwn所使用的libc的架構(gòu)得一致.

如果想在pwntools里面使用的話可以這樣

io = process("./pwn")
gdb.attach(io, "add-symbol-file ./libc.so 0")

實(shí)例(湊字?jǐn)?shù)):

?  test gcc ./test.c  -s --static -o pwn
?  test gdb ./pwn
pwndbg> r
Starting program: /mnt/hgfs/ctf/ctf_games/test/pwn
^C
Program received signal SIGINT, Interrupt.

pwndbg> p *(struct _IO_FILE_plus *) $rsp
No struct type named _IO_FILE_plus.

pwndbg> add-symbol-file ./libc_2.23.so 0
Reading symbols from ./libc_2.23.so...done.

pwndbg> p *(struct _IO_FILE_plus *) $rsp
$1 = {
  file = {
    _flags = 4196856,
    _IO_read_ptr = 0x10e1000004d2 <error: Cannot access memory at address 0x10e1000004d2>,
    _IO_read_end = 0x524c03e851558b00 <error: Cannot access memory at address 0x524c03e851558b00>,
    _IO_read_base = 0x6ca018 "ЮC",
    _IO_write_base = 0x400c66 "\211\307\350", <incomplete sequence \337>,
    _IO_write_ptr = 0x0,
    _IO_write_end = 0x100000000 <error: Cannot access memory at address 0x100000000>,
    _IO_buf_base = 0x7fffffffe3a8 "#\346\377\377\377\177",
    _IO_buf_end = 0x4009ae "UH\211\345H\203\354\020dH\213\004%(",
    _IO_save_base = 0x4002c8 "H\203\354\bH\213\005\035\235,",
    _IO_backup_base = 0xba1f4e1aa56a16b1 <error: Cannot access memory at address 0xba1f4e1aa56a16b1>,
    _IO_save_end = 0x4016d0 "AVA\276?l",
    _markers = 0x401760,
    _chain = 0x0,
    _fileno = 0,
    _flags2 = 0,
    _old_offset = 5035219255199143601,
    _cur_column = 5809,
    _vtable_offset = 24 '\030',
    _shortbuf = <incomplete sequence \375>,
    _lock = 0x0,
    _offset = 0,
    _codecvt = 0x0,
    _wide_data = 0x0,
    _freeres_list = 0x0,
    _freeres_buf = 0x0,
    __pad5 = 4196782,
    _mode = 1,
    _unused2 = "\000\000\000\000\250\343\377\377\377\177\000\000\320\026@\000\000\000\000"
  },
  vtable = 0x0
}
pwndbg>

注意:

需要使用帶符號(hào)的libc, 然而ubuntu自帶libc.so的是去符號(hào)的. 需要自行下載帶符號(hào)libc或者自己編譯, 編譯方式可以參考我之前一篇博客

Appendix

下載idasdk:

鏈接:https://pan.baidu.com/s/1M4LxMiRMrzvw8UKio2ed7w
提取碼:'6c366471'.decode(' ') :P

制作sig文件 參考: https://thinkycx.me/2019-07-15-how-to-use-signature-file-in-IDA.html
gdb導(dǎo)入符號(hào) 參考: http://blog.chinaunix.net/uid-13746440-id-5578584.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末似踱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌擦耀,老刑警劉巖件舵,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颤练,死亡現(xiàn)場(chǎng)離奇詭異碍舍,居然都是意外死亡柠座,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門片橡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妈经,“玉大人,你說我怎么就攤上這事捧书〈蹬荩” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵经瓷,是天一觀的道長(zhǎng)爆哑。 經(jīng)常有香客問我,道長(zhǎng)舆吮,這世上最難降的妖魔是什么揭朝? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮色冀,結(jié)果婚禮上潭袱,老公的妹妹穿的比我還像新娘。我一直安慰自己锋恬,他們只是感情好屯换,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著与学,像睡著了一般彤悔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上索守,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天晕窑,我揣著相機(jī)與錄音,去河邊找鬼蕾盯。 笑死幕屹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的级遭。 我是一名探鬼主播望拖,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼挫鸽!你這毒婦竟也來了说敏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤丢郊,失蹤者是張志新(化名)和其女友劉穎盔沫,沒想到半個(gè)月后医咨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡架诞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年拟淮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谴忧。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡很泊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沾谓,到底是詐尸還是另有隱情委造,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布均驶,位于F島的核電站昏兆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妇穴。R本人自食惡果不足惜爬虱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腾它。 院中可真熱鬧饮潦,春花似錦、人聲如沸携狭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逛腿。三九已至,卻和暖如春仅颇,著一層夾襖步出監(jiān)牢的瞬間单默,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工忘瓦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搁廓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓耕皮,卻偏偏與公主長(zhǎng)得像境蜕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凌停,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354