-
-
翻译:给OllyDbg写一个VB插件[TT]
-
发表于:
2005-2-7 02:45
8947
-
给OllyDbg写一个VB插件[TT]
有些人问为什么,我将感到烦恼(译者注:为什么宁愿使用VB而非其它语言)...但是,VB真正地使接口制作变得轻而易举,超快调试,因此我已写的所有代码基础都是用它。
因此,本文重点叙述为OllyDbg(后面简称OD)制作VB插件的一个方法。该技术同样适用用IDA插件 [(例子1)]。
OD是用C语言写成,因此其插件API使用了cdel调用习惯。为了能将其与VB结合,我们需要使用stdall函数并使VB运行时(runtime)恰当地被加载和初始化。
完成这两件事情的最容易的快速方法是:用Cpp为OD创建一个小的stub DLL插件来加载。该stub将处理插件初始化、添加菜单项到OD和当运行插件时启动VB代码。
该插件stub用一套stdcall函数也响应于提供给VB app,因此它可以访问OD的cdel插件API。
当正好运行插件时,我们的Cpp代码创建了VB COM服务器的一个实例并在其主要接口上调用了一个方法。该加载和初始化VB运行时,并传送其执行到我们的VB代码。
通过VB声明函数机制,VB代码从Cpp的dll依次使用stdcall输出。一个基本的模块图如下:
该例插件将从OD提取所有用户输入的注释。感谢Joe Stewart和他的LabelMaster插件,该插件展示了怎样使用OD插件API取出注释的范例。
要安装插件,仅需拷贝这两个dll到你的OD插件目录。确保用regsvr32注册VB dll(VbOllyPlugin.dll),因为它是一个COM服务器。这两个DLL必须在同一个目录下以使VB DLL能从stub加载输出。
我想,下一步就是在OD中结合和使用,使Cpp stub能计数、动态加载和初始化多个VB插件。这里,Cpp OD插件将依次支持其自己的插件框架,该框架围绕VB模块设计以结合到OD中。
无论如何,我只想怎样结合一个VB UI作为一个OD 插件,因此,下面给出了一个例子:P [例子2]
-dzzie
-旁注1,这并不仅限于在两个DLL之间运作,你也可以从你的VC EXE输出函数[例子3],并使用相同的技巧
-旁注2,相同的基本技术也可以用于创建.NET插件。下面是用于IDA的C#插件[例子4]。我曾试图为OD做同样的事情,但很快地,创建的对象总是报错,mscoree试图加载两次。一定是在某个时刻,OD所确定的某些东东与它做了更多的事情:)。
[课程]FART 脱壳王!加量不加价!FART作者讲授!