IDA介绍
IDA是一款强大的静态分析(程序不需要运行时直接查看汇编)工具,OD相反,OD是强大的动态追踪(程序运行时分析)工具
IDA签名的作用
因为有些版本的IDE在release版本下IDA识别不了库的函数名,如我在vc6.0下选择MT(多线程静态编译),release版本编译一个pritnf的程序
代码如下:
int main(int argc, char* argv[])
{
printf("%d\r\n", argc / 8);
return 0;
}
用IDA加载反汇编如下:
注意:这个时候可以自己提取库中对应的.obj来生成sig文件了,通过sig文件来识别库函数名,记住你的库中的实现也就是二进制一定要和你要识别的函数名是一样的,如上面的call sub_401020对应的是vc6.0的printf实现,你就必须要从vc6.0的lib中查找这个实现,这样你才能保证实现是一样的,这样的话生成的sig才能生成对应识别的函数名,因为sig文件也是通过函数实现的特征码去辨别的,所以要一样
IDA签名生成的步骤
那上面的举例
1需要两个工具,一个是pcf.exe来提取.obj的特征码,一个是sigmake.exe来生成.sig文件
2命令:lib /extract: xxxxx.obj lib文件名 提取你想要的.obj,可以通过命令:lib /list xxx.lib 来显示有哪些.obj
3使用pcf.exe(特征提取工具)生成.pat 命令:pcf xxxx.obj 默认生成xxx.pat文件
4使用sigmake生成.sig文件. 命令:sigmake xxxx.pat xxxx.sig 生成.sig文件
5把生成的.sig文件添加到IDA对应的sig—pc目录下,我用的是7.0,打开文件autoload.cfg添加一行.sig的文件名,如下图
6打开IDA 加载PE文件后 点击view-“Open subview”-Signatures(快捷键shift+F5)打开已应用的签名窗口
7右键点击“Apply new signature”,搜索刚添加的.sig文件,我的是printf.sig,点击OK
8成功命中函数后如下图,会显示函数命中几个,然后回到刚刚的代码查看就有了名称
你也可以写脚本或者写代码自动生成sig文件