【逆向】IDA sig签名文件制作
前言
使用IDA分析程序时,目标程序通常都没有pdb符号文件,这时候如果IDA没有对应的sig签名文件,就会有很多库函数和自定义函数无法识别。如果类似的函数有很多,就没有办法很好的分析。本文将介绍如何创建和使用IDA sig签名文件。
步骤
1、获取要创建签名文件的静态库文件(.lib)
2、利用FLAIR解析器为该库创建一个模式文件(.pat)
3、运行sigmake.exe处理创建的模式文件,生成一个签名文件(.sig)
4、复制签名文件到<IDA DIR>/sig目录,Shift+F5应用新签名文件
示例
使用vs2013编写一个测试静态库
1 //lib库函数声明 2 int sum(int a, int b); 3 4 //lib库函数实现 5 #include "stdafx.h" 6 #include "static.h" 7 #include "stdio.h" 8 #include <windows.h> 9 10 int sum(int x, int y) 11 { 12 int s; 13 s = (x + y)*1; 14 15 CloseHandle(NULL); 16 return s; 17 } 18 19 //lib库函数调用 20 #include "stdafx.h" 21 #include "static.h" 22 23 int _tmain(int argc, _TCHAR* argv[]) 24 { 25 int num = 0; 26 num = sum(1,2); 27 printf("sum = %d\n", num); 28 29 return 0; 30 }
注意:生成的时候不管是Debug模式还是Release模式,属性设置里的“全程序优化”必须是“无全程序优化”,
默认的“使用链接时间代码生成”选项生成的lib库在生成sig文件时会报错(不知道具体原因,先这么设置吧)
创建lib静态库后,使用IDA“flair68.zip”工具包中的“pcf.exe”创建模式文件(pat)
使用“sigmkae.exe”生成IDA可以识别的签名文件(sig)
IDA分析加载签名前的代码
将sig签名文件放入IDA/sig文件夹,Shift+F5加载签名文件
IDA分析加载签名后的代码
总结
IDA sig文件的工作原理和PEID等工具其实是差不多的,都是通过硬编码特征的方式来匹配和识别指定的函数或者程序入口,通过查看pat模式文件可以证明这一点。
参考
https://bbs.pediy.com/thread-75422.htm
https://www.cnblogs.com/17bdw/p/7286234.html
https://blog.csdn.net/Solena/article/details/79399019