-
-
[求助]如何使用detours挂一些未公开文档的函数
-
发表于: 2008-12-25 23:26 5834
-
题目描述不准确,准确地说是没有在Windows.h中声明的函数
我为了挂住进程的创建,挂CreateProcessA(...)等等不够,尝试着挂PFNCreateProcessInternalW这个函数却没有成功。
另外,还有个问题不太理解,如下代码:
这里的OpenProcess可以直接当作一个值赋给前面的指针,这时候它的地址是从哪来的?
如果它没有在某些头文件中声明,又该怎么用,下面是我的代码:
然后在DllMain里面动态导出,代码如下:
但是测试没有成功,不知道错在哪里,期待会的人帮忙解答一下,谢谢了。
我为了挂住进程的创建,挂CreateProcessA(...)等等不够,尝试着挂PFNCreateProcessInternalW这个函数却没有成功。
另外,还有个问题不太理解,如下代码:
static HANDLE (WINAPI* Old_OpenProcess)(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId) = OpenProcess;
这里的OpenProcess可以直接当作一个值赋给前面的指针,这时候它的地址是从哪来的?
如果它没有在某些头文件中声明,又该怎么用,下面是我的代码:
typedef BOOL (*PFNCreateProcessInternalW)(HANDLE hToken, LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation, PHANDLE hNewToken); static PFNCreateProcessInternalW Old_CreateProcessInternalW;
然后在DllMain里面动态导出,代码如下:
// 取得所在模块路径 ::GetModuleFileName(NULL, szCurrentApp, sizeof(szCurrentApp)); // 导出相关函数 HMODULE hModule = ::LoadLibrary("kernel32.dll"); if(hModule != NULL) { PFNCreateProcessInternalW CreateProcessInternalW = (PFNCreateProcessInternalW)::GetProcAddress(hModule,"CreateProcessInternalW"); }
但是测试没有成功,不知道错在哪里,期待会的人帮忙解答一下,谢谢了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
赞赏
雪币:
留言: