想做一个简单的api钩子,做一下试验 现在有两个DLL,分别是1.DLL和2.DLL(都是MFC的),接口函数都只有一个,就是输出一个MessageBox消息框,当然标题和内容是不一样的。现在怎么才能在A.exe中调用1.DLL时,让弹出2.DLL中的消息框。请大虾抽点宝贵的时间,较详细的讲解一下,万分感谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用detours把?勾a.exe进程的MessageBoxA和MessageBoxW,然后调用1.dll的messagebox接口函数 您说的 detours 是一个开发包吗?粗略的搜了一下,好像目前还没有2.1专业版。您有没有用它做的类似这样的简单的例子?我还没接触过这个,邮箱[email protected],谢谢 不客气已经给你发过去了:)可以参考一下sample里的traceapi.cpp 应该是调用2.dll的messagebox接口函数~ 看了一通,有点晕,没看明白,那个detours到底怎么使用啊?能针对我这个实验较详细的说一下吗?实在是看不明白了 #include "detours.h"这个是要包含的首先- -然后吧,这个函数用来制造一个API的副本以后可以调用,后面的是API,前面的是你的函数DETOUR_TRAMPOLINE(int __stdcall Real_AbortDoc(HDC a0), AbortDoc);在dll attach时掉用这个,就把AbortDoc API劫持到Mine_Abort_Doc函数里了DetourFunctionWithTrampoline((PBYTE)Real_AbortDoc, (PBYTE)Mine_AbortDoc);后者的实现:int __stdcall Mine_AbortDoc(HDC a0){ _PrintEnter("AbortDoc(%lx)\n", a0); int rv = 0; __try { rv = Real_AbortDoc(a0); } __finally { _PrintExit("AbortDoc() -> %lx\n", rv); }; return rv;}可以看到调用Real_AbortDoc可以实现原API的功能.你要不调用当然就不会实现了- - detours是把要Hook的函数入口的代码复制出来,再把函数入口改为一条跳转指令,跳到自己的函数入口处,当要执行原函数时先执行复制出来的代码,然后再跳转到原函数中被复制出来的代码的后面继续执行。这种方法不能Hook某些特殊函数,与函数的入口代码有关。此外还有其它Hook DLL的方法,你可以在网上搜索一下API HOOK,不过都有缺陷。 楼主说的是MessageBox应该是没问题的,貌似对小于5字节的函数不能替换吧,另外替换输入表这一HOOK方法有啥缺陷? 3.1 改写IAT导入表法 修改可执行文件的IAT表(即输入表)因为在该表中记录了所有调用API的函数地址,则只需将这些地址改为自己函数的地址即可,但是这样有一个局限,因为有的程序会加壳,这样会隐藏真实的IAT表,从而使该方法失效。 不止这个缺陷,比如后方代码有 jmp到前5字节的也是不行的 大家好像说的都是比较深的理论知识,我是越听越懵了。在网上找了一篇文章,带有一个截获MessageBoxA()系统api的例子,看看先,再次感谢大家的回复! A.exe中调用1.DLL时用管道发消息给2.DLL让其弹出消息框 现在的问题是在用detours的时候,编译不通过(只有一个错误),错误信息是: detours.lib(disasm.obj):fatal error LINK1103:debugging information corrupt;recompile module error executing link.exe.--------------查了一下,好像是需要在 vc工程里添加一些路径,我就把detours中的3个路经分别包含进目录中,可还是不行。好像说要编译一下detours,不知道怎么编译。哪位用过detours的大虾给说说? 没那么复杂,包含detours.lib输入库就行了你是不是把它放到directory里了?是的话,调整一下顺序,放到最后面 不行啊,我在工程-〉设置-〉链接中填了 detours.lib了,在directory里也放了,都放在最后了,还是老样子 是在VC6里用么?我在vs2003一切正常,这个问题是lib编译版本和link.exe版本不一致 是在vc6.0,用的是你发的那个detours1.5回楼上:这个我知道,不会搞错的:) 自己把detours的代码全部添加到工程里面。 重写树控件,在对话框使用树控件的右键消息?//怎么没法使用? MFC的ActiveX控件中如果需要使用xml文件,网页中安装后应该如何使用该xml文件? 有人使用VC 2008吗小弟有几个问题问下 怎么用HOOK拦截WM_CTLCOLOR消息呀? 高分(100)请教:截屏问题 用VC做的.exe应用程序生成的文件保存问题 在线等待:有没有办法通过cfile得到FILE *? 打开数据库一次成功,多次失败?? 线程问题---》请进! 怎样disable主菜单和工具按钮 很急!!各位大哥进来看看?MFC类问题 我现在有个股票接口文件,请问如何使用呢?
勾a.exe进程的MessageBoxA和MessageBoxW,然后调用1.dll的messagebox接口函数
可以参考一下sample里的traceapi.cpp
应该是调用2.dll的messagebox接口函数~
这个是要包含的首先- -然后吧,这个函数用来制造一个API的副本以后可以调用,后面的是API,前面的是你的函数
DETOUR_TRAMPOLINE(int __stdcall Real_AbortDoc(HDC a0),
AbortDoc);在dll attach时掉用这个,就把AbortDoc API劫持到Mine_Abort_Doc函数里了
DetourFunctionWithTrampoline((PBYTE)Real_AbortDoc,
(PBYTE)Mine_AbortDoc);后者的实现:
int __stdcall Mine_AbortDoc(HDC a0)
{
_PrintEnter("AbortDoc(%lx)\n", a0); int rv = 0;
__try {
rv = Real_AbortDoc(a0);
} __finally {
_PrintExit("AbortDoc() -> %lx\n", rv);
};
return rv;
}可以看到调用Real_AbortDoc可以实现原API的功能.你要不调用当然就不会实现了- -
另外替换输入表这一HOOK方法有啥缺陷?
不止这个缺陷,比如后方代码有 jmp到前5字节的也是不行的
detours.lib(disasm.obj):fatal error LINK1103:debugging information corrupt;recompile module error executing link.exe.
--------------
查了一下,好像是需要在 vc工程里添加一些路径,我就把detours中的3个路经分别包含进目录中,可还是不行。好像说要编译一下detours,不知道怎么编译。哪位用过detours的大虾给说说?
回楼上:这个我知道,不会搞错的:)