popdes 发表于 2022-8-12 21:59

怎样hook拦截修改ocx的函数和返回值?手里有个ocx内部调用了mscomm32.ocx进行通信

本帖最后由 popdes 于 2022-8-12 22:38 编辑

我的目的:
现有的软件用的是[设备A]提供数据, 想要通过hook方式来改为[设备B]来提供数据,
这样就可以用手头现成的[设备B]来使用软件, 不用另外去买设备了.


手里有一个demo.ocx组件, 这个组件里调用了mscomm32.ocx控件对[设备A]进行串口数据采集,
目前我想要将这个串口通信转移到另外一个[设备B]上面,
当demo.ocx里通过mscomm32对串口请求数据的时候,
hook住mscomm32里面的函数, 先采集[设备B]的数据 , 经过一系列的格式化,
让它满足demo原来的串口收发数据格式, 修改函数的数据返回值

使得demo还是以为这个数据来自[设备A] , 但是其实上数据已经由[设备B]提供了,
这样也就达到了移花接木的目的.


以前有用过raw.apihook , hook住Pcomm.dll里面的串口函数, 利用上面的办法可以很容易的实现移花接木,
但是现在遇到的mscomm32.ocx就不知道该怎么处理了.....


目前, 还有个思路 :
就是按照自己手动重写一个函数名和参数都和mscomm32.ocx内部的函数一模一样的ocx, GUID和IID都一模一样, 用来替代这个系统的mscomm32.ocx
但是这样有两个问题 1. 有很多程序会调用mscomm32.ocx ,如果我给替换掉, 电脑上的其他软件就完蛋了.
2. 我发现这个mscomm32里面有个put函数还有一些其他的问题, 手撸一个一模一样的感觉还是有点难度, 汗

另外用过虚拟串口进行搭桥手术,就是专门做个软件采集设备B,然后连上虚拟串口的1口,虚拟串口的2口连上demo软件,1和2口通过虚拟串口接通,这样就可以在demo上使用设备B了。但是这样做需要在电脑上装上虚拟串口并且所有的连接都要手动接好,对普通使用者来说稍显麻烦,并且不利于批量使用。所以此方法放弃。


不知道大家有没有更好的办法或者思路
谢谢

iawyxkdn8 发表于 2022-8-13 09:09

加         油!

sam喵喵 发表于 2022-8-13 10:13

等待大佬来给你帮忙,标记一下

popdes 发表于 2022-8-13 15:57

感谢楼上帮顶,让更多大佬看到:lol
实在没办法只能手动写一个函数名相同的ocx了

qsdya01 发表于 2022-8-15 16:25

过来帮你顶一下

blgzs 发表于 2022-8-23 12:21

popdes 发表于 2022-8-24 18:03

blgzs 发表于 2022-8-23 12:21
和dll一样hook就行, ocx本身也是dll.找到加载ocx的浏览器进程,hook进去,定位到ocx的代码,inline hook , o ...

求指教 ,
例如我上面说的mscomm32.ocx是个串口控件, 我是要拿到demo.exe的进程? 怎么hook进去, 是需要注入一个dll吗?

blgzs 发表于 2022-9-5 16:25

页: [1]
查看完整版本: 怎样hook拦截修改ocx的函数和返回值?手里有个ocx内部调用了mscomm32.ocx进行通信