我用下面的程序进行hook
RandomHDID();
g_hInstance = hModule;
//创建事务
g_hSendEvent = CreateEvent( NULL, FALSE, TRUE, NULL );
//重写API开头的8字节
HMODULE hCreateFile = LoadLibrary( L"WSOCK32.DLL" );
if (NULL == hCreateFile)
{
MessageBoxA(NULL,"无法加载WSOCK32.DLL",NULL,MB_OK);
return FALSE;
}
g_oldsend = ( DWORD )GetProcAddress( hCreateFile, "socket" );
if(NULL == g_oldsend)
{
MessageBoxA(NULL,"无法定位CreateFileA函数入口地址",NULL,MB_OK);
return FALSE;
}
//保存原始字节
if (0 == ReadProcessMemory( INVALID_HANDLE_VALUE, ( void * )g_oldsend,
( void * )g_dwOldBytes[0], sizeof( DWORD )*2, NULL ))
{
MessageBoxA(NULL,"无法读取地址",NULL,MB_OK);
return FALSE;
}
//将00400000改写为我们函数的地址
*( DWORD* )( g_btNewBytes + 1 ) = ( DWORD )mysocket;
WriteProcessMemory( INVALID_HANDLE_VALUE, ( void * )g_oldsend,
( void * )g_btNewBytes, sizeof( DWORD )*2, NULL );
//MessageBoxA(NULL,"成功加载DLL","正确",MB_OK|MB_ICONINFORMATION);
MessageBoxA(NULL,"成功加载",NULL,MB_OK);
有的程序就能进入我的mysocket函数,而像QQ(还有一些别的程序)就无法进入到我的mysocket函数当中。WSOCK32.DLL和WS2_32.DLL两个文件我都试过,都不行。
难道可以有不通过soket进行通信的方法么?
(其实我是想截获某个程序的send函数发送的内容,结果hook不到send。情急之下试着hook了socet函数,居然也失败了~!)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课