IDA使用技巧--导入头文件和导入函数签名

做了一道题,虽然没做出来,但是学到了很多。

使用IDA导入头文件

在IDA中按Ctrl+F9,导入对应的头文件即可。这个最好在对应的操作系统下导入。

导入函数签名

使用Shift+F5键可以导入使用已经存在的函数签名

如果没有已经存在的函数签名,要自己使用Flair制作

以下教程使用libgmp.a做例子

  1. 使用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删除报错的地址,直到错误消失(未测试)

  2. 使用sigmake制作签名

    1
    ./sigmake gmp.pat gmp.sig

    如果出现

    1
    2
    gmp.sig: modules/leaves: 475/517, COLLISIONS: 2
    See the documentation to learn how to resolve collisions.

    说明有冲突,此时在目录下会生成一个gmp.exc,打开这个文件,删除注释,然后在你想保留的函数前面增加一个+

  3. 如果一切顺利,则会生成sig文件

  4. 把sig文件复制到IDA_INSTALL_PATH/sig/pc目录下,打开IDA

  5. Shift+F5,打开函数签名页面,右键,选择你刚刚添加的签名

注意:不同版本的gcc编译出的静态链接库不同,有时导入了函数还是不起作用,可能就是版本问题。

可以使用别人制作好的sig签名库

https://github.com/Maktm/FLIRTDB

https://github.com/push0ebp/sig-database

匹配最佳sig

https://github.com/maroueneboubakri/lscan

其它确定函数名的方法

调试 = =,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

[4] https://blog.csdn.net/dupei/article/details/99835255