Bom galera, eu tentei criar uma .dll com base em arquivos open source na internet e com os offsets do gameserver.
Tudo se encaixa, porém ao executar o GameServer, ele carrega a dll mas não abre.
Fecha sem dar nenhum erro.
Gostaria de saber o que estou errando?
Hookei a dll da seguinte forma no olly:
Código:
005E5D9E - PUSH GameServ.005E5D7B ; /FileName = "fixes.dll"
005E5DA3 - CALL DWORD PTR DS:[<&KERNEL32.LoadLibrar>; \LoadLibraryA
005E5DA9 - OR EAX,EAX
005E5DAB - JE GameServ.0059AF95
005E5DB1 - PUSH GameServ.005E5D8D ; /ProcNameOrOrdinal = "Main"
005E5DB6 - PUSH EAX ; |hModule
005E5DB7 - CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; \GetProcAddress
005E5DBD - CALL EAX
005E5DBF - JMP GameServ.0059AF95
E existe outra dll hookada no gameserver...
O que eu fiz foi o seguinte... No fim da outra DLL eu dei JMP 005E5D9E (que vai pra essas linhas aí em cima)
O que eu errei?
O código principal da dll é:
Código:
//=======================================================================================
//= Main.cpp
//=======================================================================================
#include "StdAfx.h"
//------------------------------------------------------
//- Start
//------------------------------------------------------
extern "C"__declspec(dllexport) void Main()
{
DWORD OldProtect;
if (VirtualProtect(LPVOID(0x401000), 3543191, PAGE_EXECUTE_READWRITE, &OldProtect))
{
HookThis((DWORD)&ProtocolCore, 0x00403314);
NovosFixes();
}
else
{
Tools.MessageBoxShow(NULL, "Falha na inicializacao da DLL.", "Fixes DLL", NULL);
Exit;
}
}
void NovosFixes()
{
NewFixes();
}
No StdAfx.h estão todos os includes.
---------- Post added at 07:20 PM ---------- Previous post was at 07:02 PM ----------
Eu peguei o mesmo código usado na outra DLL, que por sinal funciona.
Código:
005E5D9E - PUSH GameServ.005E5D7B ; /FileName = "fixes.dll"
005E5DA3 - CALL DWORD PTR DS:[<&KERNEL32.LoadLibrar>; \LoadLibraryA
005E5DA9 - OR EAX,EAX
005E5DAB - JE GameServ.0059AF95
005E5DB1 - PUSH GameServ.005E5D8D ; /ProcNameOrOrdinal = "Main"
005E5DB6 - PUSH EAX ; |hModule
005E5DB7 - CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; \GetProcAddress
005E5DBD - CALL EAX
005E5DBF - JMP GameServ.0059AF95
Acredito que seja o entrypoint correto do gameserver.
Pois todos os lugares que explicam como hookar, dizem que o entrypoint é aonde o ollydbg para, mas o meu para em cima da DLL.
Então coloquei os mesmos códigos da outra DLL.
E quanto a linha:
Código:
if (VirtualProtect(LPVOID(0x401000), 3543191, PAGE_EXECUTE_READWRITE, &OldProtect))
Não muito bem o que o vermelho significa, peguei da mesma DLL do meu servidor, que é open source, porém de uma versão mais antiga.
Poderiam me dizer exatamente o que ela significa?
---------- Post added at 07:45 PM ---------- Previous post was at 07:20 PM ----------
Esqueci de dizer também.
O GameServer é o 1.00.18, se quiserem posso anexar ele aqui.