易截截图软件、单文件、免安装、纯绿色、仅160KB

一次猜谜的过程:在VB里调用没有接口说明的DLL函数

本文来自qingye2008所发的此帖的讨论,感谢陈辉、马云剑、qingye的耐心指点和分享。
1、引言
话说qingye同学得到了一个用于加解密的Dll(该动态库在这里下载),通过Dll Export Viewer看到dll有2个导出函数分别是Dll_EncIn和Dll_EncOut,qingye同学想在VB中使用这两个函数。因为搞不到接口说明,只好通过查看汇编代码来猜测参数数量和类型。通过同学们的一番摸索,大致的过程小结如下:
 
(1)先用IDA之类的静态反汇编工具看函数的参数有几个、有没有返回值;(确定是两个、没有返回值)
(2)再用OD之类的动态反汇编调试工具看寄存器里存的参数具体是啥,并根据函数的预定功能,来猜测参数应该声明成什么类型的、应该传什么内容。
      a) 比如这个函数的功能是加密,那根据功能猜测要传进去的参数至少应该有明文、也可能还有长度。另外函数应该还有个办法来返回加密后的密文,既然函数没有返回值,那有可能还有个传地址的参数是密文。所以,初步猜测应该有两个参数,一个传明文字符串,一个用来接收密文字符串。
      b) 用OD跟进去看寄存器里的内容,发现传字符串“123”,寄存器里写的是“03313233”;再传字符串“123123”,寄存器里写的是“06313233313233”。这就可以确定,这个参数是字符串,字符串的编码是ANSI的(因为&H31是数字1的ANSI编码),字符串缓冲区之前的首字节是这个ANSI字符串的字节长度。
      c) 考虑到这是个用Delphi实现的动态库,所以查阅Delphi的相关文档,确认Delphi中有一种叫做Short String的字符串符合b)里描述的特征,所以印证了这种猜测。
      d) 两个参数,是密文在前还是明文在前呢?根据OD观察的结果,并且记住第一个参数后入栈,可以确定是密文在前,明文在后。
(3)根据以上猜测构造在VB里的声明。这就要用到这篇博文和这篇博文里提到的知识了。
 
2、传结构指针
先来看陈辉写的代码,我觉得是最好最简捷的写法了。
Option Explicit
Private Declare Function Dll_EncIn Lib "d:\EncryptionA.dll" (ByVal lpstrOutput As Long, _
ByVal lpstrInput As Long) As Long
Private Declare Function Dll_EncOut Lib "d:\EncryptionA.dll" (ByVal lpstrOutput As Long, _
ByVal lpstrInput As Long) As Long
Private


相关文档:

VB中字符串匹配的多种方式

   这段时间在移植项目的过程中,起初我想判断一个字符串中是否存在某字符(串),直接的使用方法是用instr(start,string1,string2,VB compare),但经过分析在VB中可以只用一下方法来判断!
   1.常用的INStr方法
    Function InStr([Start], [String1], [String2], [Compare A ......

VB 资料导出

在很多 VB 的资料库书籍中,都会很完整的提到:如何由其他种类的文件中将资料导入资料库,但是却很少有书提到:如何将资料库中的资料,导出到各种不同的文件类型的文件中,连 VB 的 Help 中也是这样!
或许是大家都认为资料库主题的重点是在资料库本身吧!
但是,在实际的资料库程序运用中,却常常需要将资料库导出到各种 ......

VB显示透明FLASH效果

VB显示透明FLASH效果
  演示效果:
 
    代码如下:
公共声明区域
Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetW ......

VB无所不能之六:对程序运行的监控 转

作者: 佚名,  出处:IT专家网, 责任编辑: 谢妍妍, 
2010-04-23 11:20
  本文介绍VB对程序运行的监控。
  转眼间,本系列文章已经写到了第六个,今天写点什么呢?
  还是得写,看似VB做不到的事情,那么今天起就写写VB对操作系统的控制吧。
  首先,说一说,VB对于被调用后的程序的监控方法。
  原型函数简 ......

详解VB调用C#类库的方法步骤(转载)

使用c#语言在.net平台生成的dll是基于MSIL的二进制代码,通常情况下是无法被native的语言和程序调用的(例如vb,vc,delphi)。但是一般来说windows上native的程序都是可以直接使用com对象的。通过.net平台提供的一些工具,可以为其伪造一个com接口并注册到系统中。此时,可以在native的程序里,通过这个伪com接口来实现此. ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号