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.