阅读:4541回复:29
如何拦截gdi.dll中的api函数StartDocA或StartDocW
这两个函数打印相关。
不要以为这可以在应用层做,----呵呵,我指的是98哦。 那么在内核怎么实现呢? 关于vxd,大家都知道如何截获文件的api操作如删除啦改名啦等等。 但是,打印是不一样的,这里截获的是一个进程的打印api,我也不太懂,还望高手指点啊。 |
|
|
沙发#
发布于:2004-06-13 18:38
但我想MS应该吸取以前的教训,做的聪明些
这样就会比16位到32位简单了 |
|
|
板凳#
发布于:2004-06-13 18:37
是呀,但是当64位真正大规模使用时,32位到64位转换也成为一个很大的事了。
|
|
|
地板#
发布于:2004-06-02 21:14
16位和32位同时处理,很麻烦的,所以在64位以后,所有的内核64位的,避免了无谓的烦琐。。。。。。
|
|
|
地下室#
发布于:2004-06-02 12:51
惭愧,你说的很多我都不知道是什么东西,毕竟是一月前真正开始编程,读硕的年代都是用matlab做数学计算。当然也是自己不学无术。
离题了。。。。。。 |
|
|
5楼#
发布于:2004-06-02 11:54
另外需要将自己的代码注入修改的模块,这也有很多办法,
如果对16位和32位同时处理,需要使用thunk等老掉牙的技术 |
|
|
6楼#
发布于:2004-06-02 11:51
实现思路(当然也有其它方法)是在函数入口增加一条跳转指令,跳到你的函数地方,然后你处理,然后恢复指令并执行,执行后修改为跳转。
这只是实现该方法的一个办法,当然还有很多其他方法。 |
|
|
7楼#
发布于:2004-06-02 10:19
再顶一下
下面是SnowStart得到api的地址方法,我知道这是在应用层才能用,没关系,我的想法是现在应用层得到api的地址,然后再vxd中去写内存,所以这段代码还是可以借鉴的。但是一个新的问题出现了,就是gdi32.dll被进程调用的时候,它是映射到该进程的地址空间的,所以寻找api的地址,是不是应该和调用它的进程联系起来呢?实际上我是想屏蔽某个进程的打印功能,不知道修改api地址如何与改进诚联系起来,还望大家指点。---------给多少分都愿意,只要我有 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 } |
|
|
8楼#
发布于:2004-06-01 13:18
我也很想知道,ring0级还是很难的。
|
|
9楼#
发布于:2004-05-31 22:48
由于该技术已经过失,并且很繁琐,所以这里不想多说了。
只是提供一个实现实现需要注意的地方。 首先需要vc1.5恐怕现在很少有人有了,95ddk,还有对DPMI非常熟悉,对16位的内存管理熟习等等。 |
|
|
10楼#
发布于:2004-05-31 19:40
还是AllenZh说的对。
其实也不是16位与32位的区别,只是98与2000的区别。 对于2000,核心编程那本书上讲得非常详细,我也实现了。 但是核心编程书上同时也说了很多2000与98区别,结果我用同样的办法在98下实现,却出现系统崩溃现象。 就是常见的什么你做了非法操作,什么即将关闭那个框。 核心编程那本书上说可以用vxd来解决这个98应用层完成不了的问题,所以我就选择了vxd。 现在的问题时,如何在vxd中像应用层得到函数在模块中的地址并交换呢? 唉,有时候不亲自做就是不会发现问题所在的。 |
|
|
11楼#
发布于:2004-05-31 16:56
是的Hook一般的API是很多,但要Hook 16位的API,比如:楼主的要求就不一定了那么简单了
|
|
|
12楼#
发布于:2004-05-31 12:58
98下HOOK API的方法很多,也很容易.
|
|
|
13楼#
发布于:2004-05-31 10:48
当然可以解决,象pcAnywhere等就使用了相应技术,我也曾经在TOP2000 IP Class中使用了相应技术,在9x下你还需要16位的编译器(如VC++1.5和95 DDK等)。
|
|
|
14楼#
发布于:2004-05-31 09:46
看了一下,感觉还是解决不了。
有没有人再说两句啊 给分了。 |
|
|
15楼#
发布于:2004-05-30 12:59
好的,等我去弄个水落石出
|
|
|
16楼#
发布于:2004-05-30 12:44
楼上的说话听起来不太爽啊,呵呵。 呵呵,那只能说明你犯了战略性方向错误 :D :D :D 一座山挡在你前面,难道你不懂得绕山而行,非得要炸山不成??? 我再次建议,仔细看看《Wnidows核心编程》,里边有你需要的全部东西。 |
|
17楼#
发布于: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). |
|
|
18楼#
发布于: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。 |
|
19楼#
发布于:2004-05-30 11:55
是用vxd做啊。并不是所有hook api的工作都能在应用层做的,比如98下hook kernel32.dll 和gdi32.dll中的api.
上面有两位给出了一些回答,我也不知道他们是针对应用层还是针对驱动的。 |
|
|
上一页
下一页