# 关于恢复符号表这件事 2
前言
由于 rizzo 恢复符号表真滴一言难尽,于是重拾之前如何恢复符号表这个任务
在这个阶段,鄙人确实找到了一个办法去进行符号表恢复
使用 FLAIR,由于网上的资料晦涩难懂,于是鄙人打算亲自写一篇去自己去理解
# FLAIR
flair 通过对库文件中的函数生成签名,并生成对应的签名文件,然后和程序中的函数进行签名匹配找到匹配的函数来帮助我们还原库函数。
这是此项目需要用到的 linux 文件,因为鄙人习惯使用 linux 系统,所以会用 linux 系统下的 elf 文件用法去讲解
先给出一篇网上的文章
这篇文章使用的是 libc.a,鄙人在使用这个文件时,会生成 pat 文件,但是并不是 pat 文件。也就是说它生成 pat 的文件是错误的 pat 文件,而且它也是使用的 libc.a 文件,说明你需要网上去找(不好寻找,另一种方法是下载此类系统,我想是个聪明人都会觉得这是小题大作了吧。
由此鄙人寻找另外一种办法去配合 sigmake 文件去生成 sig 文件
https://github.com/mandiant/flare-ida/tree/master
项目连接在上面
使用的 ida 脚本如上,只需要将 libc.so.6 文件拖入 IDA 只用,然后使用 IDA 脚本,就会生成 pat 程序。
接下来在使用 sigmake 生成符号表即可
如果生成 err 文件,我们需要在 exc 删除前面几句话再次执行一次 sigmake 即可
# 效果演示
gcc -s -static a.c -o test | |
#include <stdio.h> | |
int main() { | |
printf("Hello, World!\n"); | |
return 0; | |
} |
# 未加符号表之前
# 过程
# 生成 pat 文件
首先拿到相关程序版本的 libc.so.6 文件,放入 ida 中
# 生成 sig 文件
./sigmake libc-2.27.pat libc-2.27.sig
删掉所选内容
再次生成 sigmake 文件
此时就生成了 sig。
# 恢复符号表
将其放进 sig 下的 pc 下
在要恢复符号的程序下按下 shift + F5
导入符号表
双击即可
加符号表之后
可见恢复的还是比较多
https://github.com/push0ebp/sig-database