做了一道题,虽然没做出来,但是学到了很多。
使用IDA导入头文件
在IDA中按Ctrl+F9,导入对应的头文件即可。这个最好在对应的操作系统下导入。
导入函数签名
使用Shift+F5键可以导入使用已经存在的函数签名
如果没有已经存在的函数签名,要自己使用Flair制作
以下教程使用libgmp.a做例子
使用pelf制作pat
1
./pelf libgmp.a gmp.pat
如果出现
1
Fatal [PATH_TO_libgmp.a] (mp_set_fns.o): Unknown relocation type 42 (offset in section=0x2b).
就增加选项
1
./pelf -r42:0:0 libgmp.a gmp.pat
或者使用ar删除报错的地址,直到错误消失(未测试)
使用sigmake制作签名
1
./sigmake gmp.pat gmp.sig
如果出现
1
2gmp.sig: modules/leaves: 475/517, COLLISIONS: 2
See the documentation to learn how to resolve collisions.说明有冲突,此时在目录下会生成一个gmp.exc,打开这个文件,删除注释,然后在你想保留的函数前面增加一个+
如果一切顺利,则会生成sig文件
把sig文件复制到IDA_INSTALL_PATH/sig/pc目录下,打开IDA
Shift+F5,打开函数签名页面,右键,选择你刚刚添加的签名
注意:不同版本的gcc编译出的静态链接库不同,有时导入了函数还是不起作用,可能就是版本问题。
可以使用别人制作好的sig签名库
https://github.com/Maktm/FLIRTDB
https://github.com/push0ebp/sig-database
匹配最佳sig
其它确定函数名的方法
调试 = =,gdb会显示使用了哪个库。如果要对对应的库调试,使用dir命令。
参考资料(不分先后)
[1] https://bbs.pediy.com/thread-175607.htm
[2] https://xz.aliyun.com/t/4484
[3] https://blog.csdn.net/qq_33438733/article/details/79968964