制作sig文件

来源:互联网 发布:unity3d 动态生成模型 编辑:程序博客网 时间:2024/06/06 08:44

本文为在学习过程中的笔记,写的不好请见谅.


在使用IDA的过程中,由于缺少符号文件,有些库函数不能识别.

int main(int argc, char* argv[]){printf("Hello World!\n");return 0;}

.text:00401000 _main           proc near               ; CODE XREF: start+AFp.text:00401000                 push    offset aHelloWorld ; "Hello World!\n".text:00401005                 call    sub_401010.text:0040100A                 add     esp, 4.text:0040100D                 xor     eax, eax.text:0040100F                 retn.text:0040100F _main           endp

库函数printf并没有识别出来,而是

call    sub_401010

以上述为例,制作printf.sig文件


查找printf.obj

在命令行输入 link-lib /list libc.lib

可以查看该库文件中所包含的所有obj文件,期中有一项为

build\intel\st_obj\printf.obj


提取printf.obj

在命令行输入link-lib /EXTRACT:build\intel\st_obj\printf.obj libc.lib

在当前目录下会产生一个printf.obj的文件


提取printf.obj特征码

在命令行中输入pcf printf.obj

在当前目录下会产生一个printf.pat的文件


制作sig文件

在命令行中输入sigmakeprintf.pat printf.sig

在当前目录下会产生一个printf.sig的文件


将printf.sig拷贝到IDA中的sig文件夹中,sig文件制作完成

在IDA中添加printf.sig文件后,printf即可识别

.text:00401000 _main           proc near               ; CODE XREF: start+AFp.text:00401000                 push    offset aHelloWorld ; "Hello World!\n".text:00401005                 call    _printf.text:0040100A                 add     esp, 4.text:0040100D                 xor     eax, eax.text:0040100F                 retn.text:0040100F _main           endp

批处理

由于lib里边有很多OBJ所以这里用批处理文本来写,从《C++反汇编与逆向分析》得到以下代码

md %1_objscd %1_objsfor /F %%i in ('link -lib /list %1.lib') do link -lib /extract:%%i %1.libfor %%i in (*.obj) do pcf %%isigmake -n"%1.lib" *.pat %1.sigif 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.excdel abc.excsigmake -n"%1.lib" *.pat %1.sigcopy %1.sig ..\%1.sigcd ..del %1_objs /s /qrd %1_objs


0 0
原创粉丝点击