yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4539回复:29

如何拦截gdi.dll中的api函数StartDocA或StartDocW

楼主#
更多 发布于:2004-05-26 10:59
这两个函数打印相关。
不要以为这可以在应用层做,----呵呵,我指的是98哦。
那么在内核怎么实现呢?
关于vxd,大家都知道如何截获文件的api操作如删除啦改名啦等等。
但是,打印是不一样的,这里截获的是一个进程的打印api,我也不太懂,还望高手指点啊。
yetty_forever
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-26 13:08
怎么没人能回答,是不是给钱太少。
如果能解决,10分+1000块
yetty_forever
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-27 09:19
SetWindowsHookEx这种函数不行吗
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2004-05-27 09:21
参考DDK里的PRINTMON,可以在打印监视器这里进行拦截。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-27 10:37
to SNOWSTART
不行
yetty_forever
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-05-27 16:05
wowocock,我再xpddk中没找到啊。我能够用像在应用层中截取API一样的方法实现内核中api的截取吗?我有完整的应用层截取程序,只是因为在98下,一个进程的线程无法访问另一个进程的内存,才导致我的程序无法正常运行。应用层的过程大致是,首先得到应用被监视进程的线程,然后修改动态连接库gdi32.dll中的StartDocW函数在该线程中映射的内存地址,用自定义的函数代替。这种方法在内核中能照葫芦画瓢吗?



yetty_forever
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-29 15:26
在98下一个进程是可以访问其他进程的空间的,所以从理论上来说应该更好做,根本不用远程注入之类了
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-29 16:59
楼上说的没错,比如:

HMODULE hModule=LoadLibrary(\"gdi.exe\");

FARPROC myStartDoc=GetProcAddress(hModule,\"StartDoc\");

int myStartDoc(
  HDC hdc,              // handle to DC
  CONST DOCINFO* lpdi   // contains file names
)
{
//add your code
}

不知道能不能满足你的要求

[编辑 -  5/29/04 by  snowStart]
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-05-29 18:34
to ttzwater:你说得好象有点值得怀疑,呵呵,以下一段话,觉得跟你说的不一致。

In Windows 2000, the memory belonging to the operating system itself is also hidden from the running thread, which means that the thread cannot accidentally access the operating system\'s data. In Windows 98, the memory belonging to the operating system is not hidden from the running thread. Therefore, the running thread could accidentally access the operating system\'s data and corrupt the operating system (potentially causing it to crash). It is not possible in Windows 98 for one process\'s thread to access memory belonging to another process.
yetty_forever
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-05-29 18:51
snowstart,你给出的代码很好懂,但是,你将StartDocA的地址给了MyStartDocA了,这就相当于这两个函数都用一个地址,系统调用的时候会选择哪一个呢?是不是应该将StartDocA的地址改一下,不知道你能不能补充一下。
yetty_forever
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-05-29 22:32
我靠,怎么讨论到最后全变味了?

你开始不是说一定要在VXD中做的吗?怎么讨论到最后又变成Win32的API Hook技术?

如果是WIN32 API Hook,非常Easy。具体可以参考《Windows核心编程》附带的源代码。

当然如果你Money足够多,也可以出钱请人帮你写,比如我 :D :o :D
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-05-30 11:55
是用vxd做啊。并不是所有hook api的工作都能在应用层做的,比如98下hook kernel32.dll 和gdi32.dll中的api.
上面有两位给出了一些回答,我也不知道他们是针对应用层还是针对驱动的。
yetty_forever
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-05-30 12:05
是用vxd做啊。并不是所有hook api的工作都能在应用层做的,比如98下hook kernel32.dll 和gdi32.dll中的api.
上面有两位给出了一些回答,我也不知道他们是针对应用层还是针对驱动的。


引用“.......98下hook kernel32.dll 和gdi32.dll中的api......”

谁说98下不能Hook???到www.csdn.net的VC版去问吧,答案可以把你压扁。:D

这个论坛是不会有人回复这种问题di。
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-05-30 12:25
楼上的说话听起来不太爽啊,呵呵。
没关系,想啥说啥吧,下面有一段话,不知道是不是真的
On Windows 98, the main Windows DLLs (Kernel32, AdvAPI32, User32, and GDI32) are protected in such a way that an application cannot overwrite their code pages. You can get around this by writing a virtual device driver (VxD).
yetty_forever
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-05-30 12:44
楼上的说话听起来不太爽啊,呵呵。
没关系,想啥说啥吧,下面有一段话,不知道是不是真的
On Windows 98, the main Windows DLLs (Kernel32, AdvAPI32, User32, and GDI32) are protected in such a way that an application cannot overwrite their code pages. You can get around this by writing a virtual device driver (VxD).  


呵呵,那只能说明你犯了战略性方向错误 :D :D :D

一座山挡在你前面,难道你不懂得绕山而行,非得要炸山不成???

我再次建议,仔细看看《Wnidows核心编程》,里边有你需要的全部东西。
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-05-30 12:59
好的,等我去弄个水落石出
yetty_forever
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-05-31 09:46
看了一下,感觉还是解决不了。
有没有人再说两句啊
给分了。
yetty_forever
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-05-31 10:48
当然可以解决,象pcAnywhere等就使用了相应技术,我也曾经在TOP2000 IP Class中使用了相应技术,在9x下你还需要16位的编译器(如VC++1.5和95 DDK等)。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
18楼#
发布于:2004-05-31 12:58
98下HOOK API的方法很多,也很容易.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-05-31 16:56
是的Hook一般的API是很多,但要Hook 16位的API,比如:楼主的要求就不一定了那么简单了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
上一页
游客

返回顶部