阅读:1448回复:6
请教:在VXD中如何调用32位API函数
首先感谢fracker的帮助,上次DeviceIoControl的失败是由于CreateFile的第一个参数前没加 \\\\\\\\.\\\\。再请教一个问题:
我想在我的VXD中调用常用的API函数,但无法使用LoadLibraryA 和 GetProcAddress ,所以也就无法使用常用的API函数,我把VC6下的USER32.LIB和KERNEL32.LIB都包含在工程中,在VXD中将LoadLibraryA声明为外部函数,我的VXD是在VC6下编译的。(有篇文章介绍了如何在VC6下编译VtoolsD的VXD) |
|
最新喜欢:![]() |
沙发#
发布于:2002-03-28 14:49
好象这是不可能的吗
|
|
|
板凳#
发布于:2002-03-29 21:47
哈哈本站有呀
http://www.driverdevelop.com/read.php?t=D&id=24 |
|
|
地板#
发布于:2002-03-30 10:16
本站那篇文章太老啦,16位的API谁不会调用,VtoolsD中有详细的说明,我要问的是如何调用32位的API。我是这样做的,通过DeciceIOControl将User32.dll的地址传给VXD,然后根据PE格式找倒MessageBoxA,MessageBeep等等这些函数的输出表位置,将它改成MyMessageBox的地址,这样别的程序调用MessageBoxA就变成调用我的MyMessageBox。我发现,如果MyMessageBox只调用VXD里的函数,一切正常,若调用MessageBoxA,MessageBeep这些函数(我先保存了这些函数的地址),别的程序也能弹出消息框,但按确定后就异常,每次都如此。
|
|
地下室#
发布于:2002-03-30 11:15
你是动态修改还是修改输出节表?
你如果是动态修改你确定没有死循环吗? 如果你的目的只是HOOK API进行处理,你可分配一页空间把代码COPY 进去,然后修改API头几字节,转发到你的页面。在你的HOOK中调用原API,必须换原你所调用API头几字节。不然的话可是死循环! 可参看CIH代码。 |
|
|
5楼#
发布于:2002-03-30 13:36
请高人指点:
我是修改输出节表的,将输出节表里API函数地址改成我的函数地址,并保存原来的地址,在我的函数里调用了原来的函数,目的当然就是HOOK API 啦。 若按你的方法,分配一页空间把代码COPY进去,然后修改API头几字节,转发到我的页面。我想知道我怎么知道该COPY多少进去呢?如果API函数里面又调用了别的函数,这怎么拷?而且地址也变化了,怎么能拷? |
|
6楼#
发布于:2002-03-30 14:00
再请教一下:
若用JMP的方法修改API函数的前5个字节,输入的参数和输出的结果怎么控制呢?比如说,我将MessageBoxA代码的前5个字节改成 JMP MyMessageBox,并保存了原来的前5个字节。我的MyMessageBox怎么获得MessageBoxA的参数,然后再用该参数调用MyMessageBoxA呢? |
|