其实我想BB一下原因和解决思路的,天都快亮了废话少说。
注意:这个方法比较临时工
注意:下面的 …… 表示原有的代码,不要动
打开 LoadBlob.cpp 找到 LoadBlobFile 这个函数,修改代码,如下:
…………
for ( WORD j = 0; j <= pHeader->m_wSectionCount; j++ )
{
DWORD dwProtect;
VirtualProtect( (LPVOID)pSection[j].m_dwVirtualAddress, pSection[j].m_dwVirtualSize, PAGE_EXECUTE_READWRITE, &dwProtect );
…………
…………
}
…………
打开 metahook.cpp 在 #define CLIENTDLL_INIT_SIG_NEW (61行)下面加上:
#define NLOADBLOBFILE_SIG "\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x54\x24\x04\x53\x56\x8B\x01\x57\x6A\x00\x68\x2A\x2A\x2A\x2A\x52\xFF\x50\x28\x8B\x0D"
接着找到 MH_LoadEngine 这个函数,修改代码,如下:
…………
g_phClientDLL_Init = MH_InlineHook…………
if ( g_bEngineIsBlob )
{
void *pfnNLoadBlobFile = MH_SearchPattern( (void *)g_dwEngineBase, g_dwEngineSize, NLOADBLOBFILE_SIG, sizeof(NLOADBLOBFILE_SIG) - 1 );
if ( pfnNLoadBlobFile )
MH_InlineHook( pfnNLoadBlobFile, NLoadBlobFile, (void *&)pfnNLoadBlobFile );
}
for …………
然后编译出来的 MetaHook.exe 就可以跑3266版引擎了
注意:这个方法比较临时工
注意:下面的 …… 表示原有的代码,不要动
打开 LoadBlob.cpp 找到 LoadBlobFile 这个函数,修改代码,如下:
…………
for ( WORD j = 0; j <= pHeader->m_wSectionCount; j++ )
{
DWORD dwProtect;
VirtualProtect( (LPVOID)pSection[j].m_dwVirtualAddress, pSection[j].m_dwVirtualSize, PAGE_EXECUTE_READWRITE, &dwProtect );
…………
…………
}
…………
打开 metahook.cpp 在 #define CLIENTDLL_INIT_SIG_NEW (61行)下面加上:
#define NLOADBLOBFILE_SIG "\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x54\x24\x04\x53\x56\x8B\x01\x57\x6A\x00\x68\x2A\x2A\x2A\x2A\x52\xFF\x50\x28\x8B\x0D"
接着找到 MH_LoadEngine 这个函数,修改代码,如下:
…………
g_phClientDLL_Init = MH_InlineHook…………
if ( g_bEngineIsBlob )
{
void *pfnNLoadBlobFile = MH_SearchPattern( (void *)g_dwEngineBase, g_dwEngineSize, NLOADBLOBFILE_SIG, sizeof(NLOADBLOBFILE_SIG) - 1 );
if ( pfnNLoadBlobFile )
MH_InlineHook( pfnNLoadBlobFile, NLoadBlobFile, (void *&)pfnNLoadBlobFile );
}
for …………
然后编译出来的 MetaHook.exe 就可以跑3266版引擎了
