VBKiller使用说明
Killer是一个VB辅助逆向分析的工具。首先声明,它不能帮你把VB程序反编译到VB源代码,只能使得VB程序的反汇编看起来更接近VB代码。
配合IDA使用,可以建立VB程序几乎所有的类结构、方法表、函数体,并建立方法表结构体;可以识别VB程序中引用的COM的CLSID,并使用ProgID命名;可以建立任意COM程序(非VB编译的也可以)的方法表、函数体,并建立方法表结构体,可以在待分析的VB程序中使用这些结构体。经过这些处理,待分析的VB程序在IDA中就形成了多个很规范类、方法,离逆向到源码已经不远了。
说用方法:
点击浏览按钮选中一个COM程序,DLL或者Exe或者ocx,如果不是VB程序,要在“非VB程序”那里打勾,点击查看。左边的框框就列出了所选程序的所有COM接口,如果还要看类和枚举,可以选中“显示接口以外的所有类”。点击任意一个接口,右边就显示了该接口的所有方法,在方法表中地址、方法体的真实地址。如果要显示前面七个基本方法,则需要选中“显示基本接口的方法”。如果是非VB程序,右边有映像基址和虚拟基址,映像基址就是程序的ImageBase,而虚拟基址就是分配到内存空间里面的起始地址,程序默认大概计算了这个地址,如果不正确,就需要手工修改,因为程序得到的方法表地址是运行空间里面的,必须知道这两个基址才能转成静态文件中的地址,所以很重要,不能填写,否则就会识别错误。点击生成IDC,就可以生成当前选中的接口所对应的IDC文件,类和枚举是不能生成IDC的,把这个IDC加载到IDA中,就可以自动识别处理相应的方法地址了。点击全部生成,就可以生成所有接口的IDC文件(放到同一个文件里面)。选中“生成结构体”,再使用两个生成按钮,就可以生成这个COM对应的结构体建立脚本,把这个结构体IDC载入IDA,就会在IDA中生成一批对应的结构体,比如:分析的一个程序用到了数据库操作和加解密操作,一般要载入ADO和CAPICOM的结构体脚本。
VBKiller还有一个扫描识别COM的功能尚未完成。
同一个目录下,还有另外几个c文件。
其中,header.c是上面的IDC文件所要包含的,这是公用函数文件;
vb.c是网络上流传的那个vb.idc修改后的版本,没有改多少,感觉很多地方没有起作用。可以利用该脚本建立VB程序的类结构和事件表;
vboop.c是专门辅助分析VB面向对象功能的脚本。
里面的Do_BasicOOP方法主要是根据vb.c建立好的事件表,处理对应的函数体,如果函数没有建立,则建立函数,并把该函数改名为与事件表的名字一致,同时建立每个类的方法表结构体,方面以后分析。
ParseAPI用于处理VB内部函数,它将扫描所有指定的函数的交叉引用,给该函数加上可重复注释,尝试识别参数,并给各个参数加上注释,如果参数是寄存器,则再往上寻找寄存器数据的来源,并加上注释。扫描的函数和注释是代码里面指定的,目前指定了大多数函数,大家可以根据自己需要加上新的函数。
ParseNew方法用于扫描所有的_vbaNew和_vbaNew2的交叉引用,并尝试识别相应的CLSID,如果能识别,则修改为相应的程序名,以方便查看。识别是内置实现的,目前内置的不多,大家可以根据需要添加自己的。扫描是,如果发现无法识别的CLSID,程序将会把该CLSID写入到同目录下的UnKnown.txt中,分析一遍后可以去查看该文件,如果发现有未识别的CLSID,则到注册表中搜索该CLSID,得到程序名后,在程序相应地方加上即可。