前言
使用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