背景

最近比赛遇到了一个题目, 32位静态链接去符号了. 所以用IDA分析的时候很多libc的库函数都无法识别, 就需要在 IDA 中引入 sig 文件. 从而可以识别诸如 read, write, malloc, free 这些库函数. 虽然网上已经有很多制作好的sig文件, 但是还是应该学会自己制作sig文件以备不时之需.

有了 sig 文件后静态分析是没问题了, 但是动态调试的时候因为没有符号还是很麻烦, 比如这题我就需要查看 _IO_FILE_plus 这个结构体的内容就会很麻烦

pwndbg> p *(struct _IO_FILE_plus *) 0xf7ffdbe9

No struct type named _IO_FILE_plus.

所以我们还需要在gdb中导入libc中的符号表.

下面就是具体解决方案

一. 制作 sig 文件

需要使用 idasdk, 下载链接在本文底部.

我是在windows下制作的, 建议下载解压后添加到系统路径中:idasdk70\flair70\bin\win

1.获取libc.a

我的系统是 ubuntu 16.04 server. 这个系统上 32位 libc.a 的位置是 /usr/libx32/libc.a, 64位的我没找到

制作pat文件

需要用到上面找到的libc.a 以及 idasdk70\flair70\bin\win\ 下的 pelf.exe:

pelf.exe .\libc.a .\libc.pat

根生成 sig文件

需要用到上一步生成的 pat文件以及 idasdk70\flair70\bin\win\下的 sigmake.exe

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

这一步可能会报错

.\libc.sig: modules/leaves: 1306/1575, COLLISIONS: 14

See the documentation to learn how to resolve collisions.

猜测是因为有些函数会对应好几个符号, 为了保证函数和符号一一对应, 就需要人为干预一下.

解决方法就是修改当前目录下的 libc.exec 文件, 具体操作文件里有提示.

修改之后再执行一遍

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

即可得到 libc.sig 文件.

导入IDA

首先将上一步得到的 sig 文件复制到 IDA安装目录的sig/pc下.

然后打开IDA , shift+F5,右键添加新的签名文件, 选择 libc.sig即可

二. gdb 导入符号表

方法很简单

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

pwn 是去符号静态链接的文件.

libc.so 是本地带符号的动态链接库.

libc.so和pwn所使用的libc的架构得一致.

如果想在pwntools里面使用的话可以这样

io = process("./pwn")

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

实例(凑字数):

➜ 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 ,

_IO_read_end = 0x524c03e851558b00 ,

_IO_read_base = 0x6ca018 "ЮC",

_IO_write_base = 0x400c66 "\211\307\350", ,

_IO_write_ptr = 0x0,

_IO_write_end = 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 ,

_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 = ,

_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>

注意:

需要使用带符号的libc, 然而ubuntu自带libc.so的是去符号的. 需要自行下载带符号libc或者自己编译, 编译方式可以参考我之前一篇博客

Appendix

下载idasdk:

arm ida 伪代码 安卓 符号表_IDA 制作 sig文件 gdb 导入符号表相关推荐

  1. arm ida 伪代码 安卓 符号表_IDA调试界面介绍及快捷键

    点击蓝字默默关注 首先,打开IDA工具,进入IDA的调试界面. 1IAD调式界面介绍 1.IDA-view-PC:反汇编窗口,如图1.1所示. (图1.1) 2.Hex-View:十六进制编辑窗口,如 ...

  2. arm ida 伪代码 安卓 符号表_使用IDA动态调试及ARM指令学习笔记

    本文介绍如何用IDA进行动态调试及部分ARM指令的学习. 环境:已root的安卓手机一部,IDA pro 6.8,win7系统. 下载样本app,并已确认可调试(debuggable = true), ...

  3. arm ida 伪代码 安卓 符号表_每天一个IDA小技巧(一): 序言

    前言 Native逆向大概是每个逆向人都敬畏又心存挑战的存在,但是又不知道从何下手,得益于汇编的繁琐,简单的高级语言在反编译成汇编指令之后分析起来复杂膨胀了无数倍,再加上对IDA Pro的一无所知,反 ...

  4. mysql的innodb表生成的物理文件_MySQL innodb表使用表空间物理文件复制或迁移表

    MySQL InnoDB引擎的表通过拷贝物理文件来进行单表或指定表的复制,可以想到多种方式,今天测试其中2种: 将innodb引擎的表修改为Myisam引擎,然后拷贝物理文件 直接拷贝innodb的表 ...

  5. 写入多个表_制作属于自己的教学工作表

    Worksheet Crafter Premium Edition是一款十分出色的教学工作表制作软件,能够为小学,中学和特殊学校创建差异化的工作表.这款软件除了输入自由文本之外,还可以利用软件自身带有 ...

  6. java 植入 form_pdf form表单制作以及用java程序填充表单

    程序代码如下 import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import ...

  7. php+大于的特殊符号,CSS_网页制作基础知识:html特殊符号,一些特殊符(如小于号和大于 - phpStudy...

    一些特殊符(如小于号和大于号)经常用在html代码里面.为了显示这些特殊字符,你必须在代码里面输入html实际存在的符号.比如,显示小于号( 用特殊符号而不用图片的好处 1.它下载更快,因为是基于字体 ...

  8. ajax 表单提交传文件,Ajax提交Form表单及文件上传

    刚刚申请下来的博客,写得第一篇.有点小激动,本人以前是一名工业3D设计师突然有些变故做上了JavaWeb开发: 前几天,发现了一些小问题.我在写后台管理页面时,需要上传一张图片.于是我就用很普通的Fo ...

  9. 【注册表】编辑REG文件基本语句——注册表的增删改

    前言 我们知道regedit是注册表编辑器,通过注册表我们可以完成电脑中的各种设置功能.这篇文章主要是对reg文件的探索,它是注册表文件,就是你可以在这个文件中写一个指令来修改相应的注册表项,实现对注 ...

最新文章

  1. git 拉去merged 仓库的代码步骤
  2. 腐蚀单机怎么进_华强北淘来的iPhone6S,进水后严重腐蚀,小伙飞线拯救又赚到了!...
  3. 使用getopts处理长和短命令行选项
  4. ASP.Net中实现中英文复合检索文本框
  5. HTML如何做个播放器图表,Web绘图神器之ECharts-ts文件播放器
  6. python 合并excel 自动更新_手把手教你4种方法用Python批量实现多Excel多Sheet合并
  7. 主成分分析碎石图_ISLR读书笔记十九:主成分分析(PCA)
  8. java nio 消息_java nio消息半包、粘包解决方案
  9. Win32项目生成的程序exe图标显示异常的问题
  10. 台积电9月14日起不向华为供货;315曝光50多款App涉嫌内置SDK窃取隐私;Micronaut 1.3.7发布 | 极客头条...
  11. docker 中文文档_Kubernetes将弃用Docker,不必恐慌
  12. Java-根据经纬度计算距离
  13. python爬虫豆瓣推理书籍及链接
  14. 笔记本主板如何测试软件,笔记本硬件检测,小编教你笔记本怎么检测硬件
  15. python抽奖教程_python实现抽奖小程序
  16. python抓包超星网课试卷_2020网络数据采集与Python爬虫【带实验】高校邦网课答案...
  17. 错误 请再次按下快门释放按钮
  18. xp 无法关闭计算机,电脑xp系统关不了机,一直显示在正在关机为什么 除了重装,还能怎么办...
  19. CF1528B Kavi on Pairing Duty(dp)
  20. 未来量子计算机运算速度,中国科学家实现 “量子霸权”,计算速度比超级计算机快100万亿倍...

热门文章

  1. 阿里上市,四大洲8个国家的十位代表敲锣;全球首款支持5G双卡双待的芯片发布;撕裂者3990X:桌面史上第一次64核128线程……...
  2. 面试官问我:你们的数据库是怎么架构的?
  3. 使用AWS CloudWatch 调优Lambda函数 | 技术头条
  4. 企业大咖教你解决Kubernetes的挑战
  5. Cloud一分钟 | 电商月将至,腾讯云DCDB助力电商企业应对支付洪峰
  6. c语言spi测试代码,spi_test.c的spi跟踪(spi 数据传送流程)
  7. linux格式化usb设备,如何在 usb linux下格式化磁盘
  8. antd autoplay按f12才会轮播_涨知识了!原来这才是电脑键盘上,F1到F12的正确用法...
  9. KAFKA SpringBoot2 Nacos 消息异步发送和消费消息(进阶篇)
  10. Linux Shell脚本_历史命令显示操作时间