IDA PRO是目前应用最广的静态反汇编分析工具,功能十分强大,但其自带的IDC脚本语言却十分丑陋,写起脚本来非常不方便。有两位大牛就写了两个工具来方便大家编写IDC的脚本,一个是Gergely Erdelyi 写的IDApython,另一个是RedPlait 写的IDAperl。总的说来,IDApython写出来的脚本非常漂亮,也非常简单,但IDAperl有一项功能是IDApython不具有的,那就是IDAperl的脚本支持debug功能。下面我们分别简单的介绍一下这两个强大的插件。
ea = 0x4011f6 (一个函数的开始地址,这里idapython好像有点问题,应该用ChooseFunction,但老是说不对) funcend = FindFuncEnd(ea) for ea in range(ea,funcend): x = Rfirst0(ea) while x <> BADADDR : Message( str(hex(x)) + " refers to " + Name(x) + " : " + str(hex(x)) + " "); x = Rnext0(ea,x); Message("End of output. ");
跟标准的IDC脚本比较一下:
#include
static main(){
auto ea,x,f_end;
ea = ChooseFunction("Select a function to parse:");
func = choose_func("test",1) print "begin print refs" for funcea in range(func.startEA,func.endEA): ref = get_first_fcref_from(funcea) while ref != BADADDR: print " called from 0x%x(%s)" % (funcea,get_name(BADADDR,ref))
ref = get_next_fcref_from(funcea, ref)
最后用idautils.py函数来一次:
from idautils import * func = choose_func("test",1) print "begin print refs" for funcea in range(func.startEA,func.endEA): reflist = CodeRefsFrom(funcea,0) for ref in reflist :
print " called from 0x%x(%s)" % (funcea,get_name(BADADDR,ref))
IDAPerl 安装:不是很简单喔,先安装perl for windows,再到一个俄文的网站上去下载IDAperl: http://www.wasm.ru/pub/23/files/perl_src.zip,这些东西需要有相应的IDAsdk才能编译,我编译好了,放到了http://www.team509.com/download/tools/security/idaperl.rar,把pm/下的内容放到perl的lib里去,把perl_dbg.plw和rp_vc.plw拷到IDA4.7的plugins目录下,这样就可以了。这时候打开ida4.7的时候,选择一个pe的windows程序,就会弹出一个”perl script for
debugger”的对话框,就可以加载你的perl for debugger的脚本了,同时edit菜单的plugins子菜单会有embedded perl 菜单,这里你可以加载一般的非debugger的分析脚本。