天天看點

IDA中應用SIG檔案

SIG檔案在IDA的作用中相當于符号檔案。如果是自己寫的PE檔案,在編譯過程中會産生OBJ檔案,可以通過工具為它生成SIG檔案。先把SIG檔案拷貝到IDA目錄的sig檔案夾中,加載PE檔案後依次點選view-"Open subview"-Signatures(快捷鍵shift+F5)打開已應用的簽名視窗:

IDA中應用SIG檔案
IDA中應用SIG檔案

在"List of applied library modules"右鍵添加sig檔案,IDA反彙編視窗中的函數名會變為原本的函數名,以便于檢視。下面兩張圖是應用SIG檔案前後IDA對release版程式的函數名的解析,可以看到一部分函數名已經被正确解析:

IDA中應用SIG檔案
IDA中應用SIG檔案

    那麼,怎麼才能生成SIG檔案呢?分2種情況:

1.通過obj生成sig:

pcf filename.obj //生成pat檔案
sigmake filename.pat filename.sig //生成sig檔案      

2.為lib生成sig:

步驟略微複雜,是以我參考網上現有的bat檔案

md %1_objs
cd %1_objs
for /f %%i in ('link -lib /list %1.lib') do link -lib /extract:%%i %1.lib
for %%i in (*.obj) do pcf %%i
sigmake -n"%1.lib" *.pat %1.sig
if exist %1.exc for %%i in (%1.exc) do find /v ";" %%i > abc.exc 
if exist %1.exc for %%i in (%1.exc) do > abc.exc more +2 "%%i"
copy abc.exc %1.exc
del abc.exc
sigmake -n"%1.lib" *.pat %1.sig
copy %1.sig ..\%1.sig
cd ..
del %1_objs /s /q
rd %1_objs      

SIG幫助IDA解析函數名的原理:

先提出一個大家都熟悉的詞語:特征碼。來看個例子,system函數的特征:

IDA中應用SIG檔案

特征就是固定的二進制代碼,是固定的二進制代碼,打死都不會變的。比如上面的push ebp的機器代碼,是55但是注意,偏移不是,比如最後的一個紅框後面的偏移,因為這個受很多因素幹擾。而pcf則是用來提取特征碼的工具。它提取的特征碼有如下的形式:

IDA中應用SIG檔案

前邊都是機器碼,後面的2E 2E 2E 2E...代表的是偏移,用來做補充。比如機器碼55 68 FF 25 00 00 40 00那麼寫到檔案中就是55 68 FF 2E 2E 2E 2E 2E 2E 2E 2E 其中兩個2E代表一個"."