VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 461|回复: 3

[原创] vb6拦截控件调用HOOK COMDLL不死VB新技术--全球首创

[复制链接]

8

主题

0

听众

76

积分

初级程序员

Rank: 2Rank: 2

擂点
0
人气
0
威望
0
注册时间
2016-8-1
精华
0
帖子
23
发表于 2017-1-24 23:16:13 |显示全部楼层
本帖最后由 自动化软件开发 于 2017-1-25 00:40 编辑

钟爱VB呀,没办法,哈哈,以前研究了HOOK标准DLL的API,现在在研究如何HOOK一个COM DLL或OCX控件,HOOK对象方法调用或函数调用。

其实一开始我的目标是是研究如何从从内存中加载DLL或OCX然后调用(不把DLL保存到硬盘)
用途:无盘方式播放电影,资源文件中加载一个flash.OCX控件和 test.swf,然后用这个控件播放视频FLASH.

现在正在研究的是如何把这个控件中的事件转发出来。纯粹调用他的方法或函数已经实现。
另外一个是用OLELIB.tlb技术,加载二进制DLL到变量bt() as byte,调用"DllGetClassObject",然后创建对象。
主要问题在于用IClassFactory,IUnknown方式创建的对象,不支持事件,所以只能另想办法把事件HOOK出来或者修改函数表或指针地址等方法实现。
另外,创建的控件他自动在本线程中创建了一个隐藏的窗口,但是没显示出来。
也就是不知如何让他显示到我的一个VB窗口上。
假如这个控件类型是有句柄的,那可以把这个句柄Setparent到我的窗口或PICTUREBOX里面
HOOK跳转代码如下:
  1. Function Myjia(ByVal voObjPtr As Long, a As Long, b As Long) As Long
  2. Dim A1 As Long, B1 As Long, voObjPtr1 As Long
  3. A1 = a
  4. B1 = b
  5. voObjPtr1 = voObjPtr
  6. MsgBox "HOOK到COM对象中的JIA函数,对象地址:" & voObjPtr1 & "," & a & "," & b
  7.     Myjia = Myjia_back(voObjPtr1, A1, B1)
  8. End Function
  9. Function Myjia_back(ByVal voObjPtr As Long, a As Long, b As Long) As Long
  10. '
  11. End Function
复制代码
现在有一个问题,没法返回值。
HOOK到一个函数时,需要返回值,这里却不返回。

hook com easy.rar

18.97 KB, 下载次数: 14

8

主题

0

听众

76

积分

初级程序员

Rank: 2Rank: 2

擂点
0
人气
0
威望
0
注册时间
2016-8-1
精华
0
帖子
23
发表于 2017-1-25 00:46:22 |显示全部楼层
希望 有高手来改一下看看。如果有别的方法更好。
edit_connpoints.rar (216.23 KB, 下载次数: 15)
这个是另一种方法:
这种方法好像是创建一个服务,然后接管COM DLL等事件,但是速度很慢,不知什么原因,一般要5秒左右,是我电脑原因?
回复

使用道具 举报

8

主题

0

听众

76

积分

初级程序员

Rank: 2Rank: 2

擂点
0
人气
0
威望
0
注册时间
2016-8-1
精华
0
帖子
23
发表于 2017-1-25 21:07:58 |显示全部楼层
Function Myjia(ByVal voObjPtr As Long,byref a As Long,byref b As Long,byref result as long) As Long
这样就好了,在result这里直接改就可以了,COM DLL他好像全是SUB类型一样,在原有函数上面前面多加了一个对象地址,后面加了一个返回值变量。

现在主要问题就是HOOK到数据后,在本过程中
如何让他继续执行原来的函数?
现在用了另外一种方法,汇编去调用,代码也是不少,主要是花在汇编造出一个CALL等代码上吧?
回复

使用道具 举报

8

主题

0

听众

76

积分

初级程序员

Rank: 2Rank: 2

擂点
0
人气
0
威望
0
注册时间
2016-8-1
精华
0
帖子
23
发表于 2017-1-26 00:27:26 |显示全部楼层
HOOK API 标准DLL时,目标程序调用就能拦截下来
而这种COM DLL,不知如果把程序注入到其他进程
是不是就可以目标进程上这些OCX或对象,就能被拦截下来参数了?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

文字版|手机版|VBGood

GMT+8, 2017-2-23 08:34

VB爱好者乐园(VBGood)
回顶部