【逆向】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

posted @ 2020-02-02 15:57  SunsetR  阅读(3141)  评论(1编辑  收藏  举报