社区
其它技术问题
帖子详情
如何使用detours hook类成员函数
kunpengwang
2010-07-20 09:41:17
我现在要在一个进程中创建另一个进程,然后hook这个新创建的进程调用的类成员函数,不知道这样可行与否,请哪位用过detours的大牛帮忙指点一下,非常感谢啦!我的邮箱是815592850@qq.com。
...全文
301
5
打赏
收藏
如何使用detours hook类成员函数
我现在要在一个进程中创建另一个进程,然后hook这个新创建的进程调用的类成员函数,不知道这样可行与否,请哪位用过detours的大牛帮忙指点一下,非常感谢啦!我的邮箱是815592850@qq.com。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kunpengwang
2010-07-28
打赏
举报
回复
#include <stdio.h>
#include <windows.h>
#include "detours.h"
#pragma comment(lib,"detoured.lib")
#pragma comment(lib,"detours.lib")
class CMember
{
public:
void Target(void);
};
void CMember::Target(void)
{
printf(" CMember::Target! (this:%p)\n", this);
}
//////////////////////////////////////////////////////////////// Detour Class.
//
class CDetour /* add ": public CMember" to enable access to member variables... */
{
public:
void Mine_Target(void);
static void (CDetour::* Real_Target)(void);
// Class shouldn't have any member variables or virtual functions.
};
void CDetour::Mine_Target(void)
{
printf(" CDetour::Mine_Target! (this:%p)\n", this);
(this->*Real_Target)();
}
void (CDetour::* CDetour::Real_Target)(void) = (void (CDetour::*)(void))&CMember::Target;
int main(int argc, char **argv)
{
(void)argc;
(void)argv;
//////////////////////////////////////////////////////////////////////////
//
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)CDetour::Real_Target,
(PVOID)(&(PVOID&)CDetour::Mine_Target));
LONG l = DetourTransactionCommit();
printf("DetourTransactionCommit = %d\n", l);
printf("%p\n",((PVOID&)(CMember::Target)));
//////////////////////////////////////////////////////////////////////////
//
CMember target;
printf("Calling CMember (w/o Detour):\n");
(((CDetour*)&target)->*CDetour::Real_Target)();
printf("Calling CMember (will be detoured):\n");
target.Target();//在本程序中调用类成员函数能够HOOK成功。
//创建新的进程,希望能HOOK到该进程中调用的类成员函数Target(),但不能成功。
STARTUPINFO ss;
memset(&ss,0,sizeof(STARTUPINFO));
ss.cb = sizeof(STARTUPINFO);
ss.dwFlags = STARTF_USESHOWWINDOW;
ss.wShowWindow = SW_SHOW;
PROCESS_INFORMATION pp; //必备参数设置结束
TCHAR commandline[100]=L"test.exe";//在该程序中调用了类成员函数Target(),但不能HOOK成功。
int r = CreateProcess(NULL,commandline,NULL,NULL,FALSE,0,NULL,NULL,&ss,&pp);
printf("%d\n",GetLastError());
return 0;
}
kunpengwang
2010-07-28
打赏
举报
回复
不好意思,第一次发贴,马上把例子整理一下发上来。
[Quote=引用 1 楼 wgw2011 的回复:]
帮顶!最好发个例子,大家更清楚!
[/Quote]
kunpengwang
2010-07-28
打赏
举报
回复
不好意思,第一次发贴,马上把例子整理一下发上来。
[Quote=引用 1 楼 wgw2011 的回复:]
帮顶!最好发个例子,大家更清楚!
[/Quote]
wgw2011
2010-07-22
打赏
举报
回复
帮顶!最好发个例子,大家更清楚!
Detours
使用
说明
本文详细介绍如何
使用
Detours
库进行API
Hook
操作,包括Winsock函数的
Hook
、自定义C函数的
Hook
、
类
成员函数
的
Hook
及按地址
Hook
的方法,并演示了如何通过DetourCreateProcessWithDll注入DLL。
Detours
本文详细介绍了
Detours
库的原理、API钩子机制、
使用
方法,包括如何
hook
DLL中的函数、自定义C函数、
类
成员函数
以及通过DetourCreateProcessWithDll注入DLL,并提供了实操案例。
detours
介绍与
使用
本文深入探讨了
Detours
库的
使用
方法,包括如何动态
Hook
系统API、自定义函数、
类
成员函数
等,并提供了实际应用案例。此外,还介绍了如何
使用
Detours
库中的DetourCreateProcessWithDll函数实现进程间通信,以及如何处理非标准API的
Hook
方法。
Microsoft
Detours
2.1简介 (支持64位)
本文介绍了Microsoft
Detours
库的基本
使用
方法及注意事项,包括
Hook
和Un
hook
Windows API函数的具体步骤,以及如何
Hook
类
成员函数
。
Detour
Hook
COM
成员函数
present和
Hook
类
成员函数
本文介绍如何
使用
Detours
库
Hook
IDirect3DDevice9::Present函数,并展示了两种实现方式,一种是通过__stdcall调用,另一种是采用__declspec(naked)方式。此外还详细解释了
Hook
类
成员函数
时需要注意的问题。
其它技术问题
3,881
社区成员
9,044
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章