我在加载自己写的dll时候,修改了CreateFileW的前8个字节,把他改成了自己的Hook函数,在函数中有个处理过程(写了个MessageBox),然后后面把API的前8个字节改回去了,再执行CreateFileW这个函数,写了个测试对话框(单击按钮创建文件将)问题现如下:
1、若是没有加处理语句,单击按钮能够创建出文件,一旦加入处理语句(即使是简单的一个语句),文件就无法创建出来。
请各位大大帮帮小弟。
hook函数如下:
int _stdcall hook_CreateFileW(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile)
{
WaitForSingleObject( g_hSendEvent, INFINITE );
//恢复API头8个字节
WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pNtCreate,
( void* )g_dwOldBytes[0], sizeof( DWORD )*2, NULL ); //处理过程
//MessageBox(NULL,"处理过程",NULL,0);
//真正执行API函数
HANDLE hFile=CreateFileW((unsigned short*)lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes,
dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
if (hFile==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"文件创建失败",NULL,0);
}
//写入跳转语句,继续Hook
WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pNtCreate,
( void* )g_btNewBytes, sizeof( DWORD )*2, NULL );
SetEvent(g_hSendEvent);
return 0;
}
1、若是没有加处理语句,单击按钮能够创建出文件,一旦加入处理语句(即使是简单的一个语句),文件就无法创建出来。
请各位大大帮帮小弟。
hook函数如下:
int _stdcall hook_CreateFileW(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile)
{
WaitForSingleObject( g_hSendEvent, INFINITE );
//恢复API头8个字节
WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pNtCreate,
( void* )g_dwOldBytes[0], sizeof( DWORD )*2, NULL ); //处理过程
//MessageBox(NULL,"处理过程",NULL,0);
//真正执行API函数
HANDLE hFile=CreateFileW((unsigned short*)lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes,
dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
if (hFile==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"文件创建失败",NULL,0);
}
//写入跳转语句,继续Hook
WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pNtCreate,
( void* )g_btNewBytes, sizeof( DWORD )*2, NULL );
SetEvent(g_hSendEvent);
return 0;
}
建议楼主不要这样写hook函数,在多线程环境下不安全。使用detours就没有这些问题了,微软都帮你做好了。
http://topic.csdn.net/u/20110429/16/83adff9c-a8b3-4058-adfc-65e60f0058b4.html
那位楼主就是用了DETOUR方式HOOK API
然后用CreateRemoteThread方式注入这是最好的做法了,兼容性比较好