首页
社区
课程
招聘
代码注入后怎样调用工具条对象的方法(对象类及方法定义存放在一个DLL里)
发表于: 2010-2-5 21:13 5349

代码注入后怎样调用工具条对象的方法(对象类及方法定义存放在一个DLL里)

2010-2-5 21:13
5349
问题描述:
       我要测试的应用程序(暂且称之为Target.exe)的工具条和菜单使用了第三方的控件(BCG.dll),我有BCG的头文件以及DLL,现在我要用另外的一个exe去获取工具条具体有那几个的按钮,以及他们的状态。

我的思路:
      通过代码注入把我的函数注入到Target.exe中,通过FindWindow获得工具条的Hwnd, 通过getmodulehandle获得BCG.dll的handle,加上入口偏移可以得到具体的某个类的方法。我在自己的函数里面自定义了一个工具条对象指针,然后用Attach去得到对象指针,然后再调用对象指针的方法,可是试了很多次Target.exe都挂掉了。

疑问:
      我的目的是要获得工具条的每个button的名称,状态等信息,如果我的思路不对,可以给出你们的建议给我参考。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我的问题怎么没人回啊,有什么不清楚的地方我可以补充,谢谢了。
2010-2-6 21:05
0
雪    币: 7183
活跃值: (4150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
帮顶,我也想知道.
2010-2-7 10:05
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
继续自己再顶
2010-2-7 21:46
0
雪    币: 424
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
可以试着观察一下你的程序在调用的时候传递参数什么的和目标程序是否一样
2010-2-7 22:16
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
参数肯定是一样的,我已经校对过了,今天看了一下好像对象指针没有拿到,总是NULL, 除了Attach和FromPermanenthandle 还有什么办法吗?

我的Dll是Hook进去的,这样可行吗?
2010-2-8 19:10
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
自已注入代码,挂接GetProcAddress,把它所有获取这个控件的DLL的函数全部拦截到自已的函数中
2010-2-9 12:02
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我不清楚,学习的
2010-2-9 12:05
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个控件的DLL的函数我都能拿到,关键时调用它们的时候一定要有对象指针,今天又试了各种方法,都失败了。怎样才能获得窗体对象的指针呢?
2010-2-9 18:59
0
雪    币: 424
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
给你个暴力的方法,由于你知道hWnd,那么你可以在内存里找这个值。假设它就是窗体对象中的一部分。这样就有一部分可选的窗体了,然后再排除,比如说虚函数表中应该有哪些函数,这样来试试
2010-2-9 21:24
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
修改函数入口处的代码,让它跳到自已的函数里
2010-2-10 10:19
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
楼主的思路 可以说对,但那不是简便的方法,其实 动态库里一定存在像listctrl中的additem一样的函数的,你只要拦截这个函数就可以了
2010-2-10 10:32
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢 liuyq ,DLL里确实都是你说的那些函数,如果能拦截下来那肯定可以拿到对象指针, 让我再查些相关资料试试看, 感觉要用到汇编了,虽然不是很情愿。
2010-2-10 20:28
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
不需要,用OD,等DLL加载后,在该函数入口处下断(F2),然后运行程序就可以观察了
2010-2-10 21:22
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
如果你不知道是哪个函数,或不知道入口的话,用DLL查看器看它导出些什么 函数,慢慢猜吧
2010-2-10 21:23
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
还有另一种猜函数的方法,就是用OD打开后,在代码处右键弹出菜单中找个"查找模块间调用",这个也会对你有所帮助
2010-2-10 21:25
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
额不会上传图片,刚才看了下,在右键菜单中 "查找"->"所有模块间的调用"
2010-2-10 21:28
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
和我一样汇编没学好,一直在学习。
2010-2-10 21:29
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
谢谢liuyq, 我想这是个解决办法,祝你新年快乐。但是由于我的应用环境比较复杂。程序A(第三方)调用我的DLL接口(我在这里面实现代码注入和函数拦截)控制程序B的工具条,程序B的控件都定义在另一个DLL中。虽然我有那个DLL的source code,但还要作更多的尝试。
2010-2-11 19:15
0
游客
登录 | 注册 方可回帖
返回
//