IDA签名的制作与应用

如何生成一个.obj文件

整个编译过程分为预编译、编译和汇编,最终生成可执行文件,其中在windows下生成 .obj文件,在linux下生成 .o文件,学名叫做二进制可重定位文件

Linux

(1)预编译:

gcc -E *.c -o *.i

预编译要干的事情:如删除注释、替换宏、递归展开头文件、处理以#开头的预编译指令等,在预编译阶段不做任何 有效信息的类型检查。

(2)编译:

gcc -S *.i -o *.s

词法分析、语法分析和语义分析、代码的优化、编译、汇总所有的所有的符号

(3)汇编:

gcc [-m64] [-O2] -c *.s -o *.o

将汇编指令转换为特定平台下的机器语言、构建*.o文件组成格式。

整个编译过程分为预编译、编译和汇编,最终生成可执行文件,其中在windows下生成 .obj文件,在linux下生成 .o文件,学名叫做二进制可重定位文件

windows
cl -c [/O2] *.c 

会生成和源文件同名的obj文件,cl是vs自带的编译器

注意由于sig文件的原理是记住这个函数的部分字节,所以当平台(x86和x64)和是否优化(debug和release)的不同都会影响sig文件,如果是x86平台和release的二进制文件,那么就要用 x86的cl和/O2编译选项来生成obj文件

将obj打包成lib文件

lib -out:*.lib *.obj

lib 在vs的本地工具命令提示符中

将obj和lib制作成pat文件

pcf *.obj
pcf *.lib

将pat文件制作成 sig 文件

sigmake *.pat <signame>.sig

可能会出现以下错误

See the documentation to learn how to resolve collisitions.
: modules/leaves: 41362018/5, COLLISIONS: 4

这是由函数冲突了,并且生成了后缀为exc的文件

;--------- (delete these lines to allow sigmake to read this file)
;add '+' at the start of a line to select a module
;add '-' if you are not sure about the selection
;do nothing if you want to exclude all modules

这些代码的目的是告诉你如何解决冲突,以成功生成签名。你需要做的头件大事是删除4行以分号开头的代码,否则,sigmake将无法在随后的执行过程中解析排斥文件。下一步是告诉sigmake你希望如何解决冲突。

  • 为最大限度地减少冲突,请删除排斥文件开头的4个注释行。
  • 最多只能给冲突函数组中的一个函数附加+/-
  • 如果一个冲突函数组仅包含一个函数,不要在该函数前附加+/-,让它保持原状即可。
  • sigmake连续运行失败会将数据(包括注释行)附加到现有的任何排斥文件后。在再次运行sigmake之前,你必须删除这些额外的数据,并更正原始数据(如果这些数据是正确的, sigmake将不会再次运行失败)。

更改排斥文件后,你必须保存这个文件,并使用你最初使用的命令行参数

pcf.exe 和 sigmake.exe 都是IDA自带的

为sig文件添加描述

sigmake -n"<描述>" *.pat <signame>.sig

加载sig文件

将生成的sig文件放入ida目录的sig\pc目录下即可加载

应用符号

点击左上角菜单 View -> open SubViews-> Signatures,打开符号窗口

右键 然后选择 apply new signature,然后选择你要加载的符号

posted @ 2021-10-16 23:07  乘舟凉  阅读(280)  评论(0编辑  收藏  举报