Pedido Hookar no Gs

mudominio21

Honrado XPZ
6 de Janeiro de 2015
39
4
8
pessoal é o seguinte não acho um tutorial que preste em lugar algum então to aprendendo a criar source sozinho, já que muitos programadores (PARECE QUE TEM MEDO DE ENSINA OU AJUDA OUTRAS PESSOAS) que tenho aqui não pode me ajuda resolvi posta minha duvida aqui não to conseguindo hokar minha source no GAMESERVER , alguem poderia me da uma ajuda ? adiciona no skype


Obrigado desde já
 
Editado por um moderador:

WalaceR

Delta XPZ
11 de Maio de 2014
553
1,000
93
25
É uma coisa tao complicada e ao mesmo tempo dificil por isso ninguem ajuda mais eu sei hockar a dll na GS qualquer coisa manda MP
 

s00x

my life, my style.
Estagiario
15 de Abril de 2011
443
127
43
30
Cara não é questão de medo, é questão de que já tem tutorias MUITO bem explicados na internet, e ajudar é uma coisa, fazer pra você é outra totalmente diferente.

Se você não tem capacidade de realizar um hook em um GameServer, como espera fazer todo o resto, sendo que o hook esta entre os mais simples dos passos?

Mais para não ficar apenas jogando palavras ao vento e ainda ser taxado como arrogante, vou tentar facilitar as coisas pra você.

No seu projeto, inclua esses dois arquivos aqui.
MuMsg.cpp
 


#include "Library.h"

#include "MuMsg.h"

CMsg::CMsg()
{
memset(&this->MsgDefault, 0x00, sizeof(this->MsgDefault));
this->MsgHead = NULL;
strcpy(this->MsgDefault, "Msg Error");
}

CMsg::~CMsg()
{
this->MsgFree();
}

void CMsg::LoadWTF(LPSTR File)
{
FILE* FileWTF;
fopen_s(&FileWTF, File, "rb");

if(FileWTF == NULL)
{
MessageBoxA(NULL, File, "Error", MB_OK|MB_APPLMODAL);
return;
}

if(this->MsgListInit() != NULL)
{
fread(&this->LoadHeader, 28, 1, FileWTF);

if(this->LoadHeader.HeadCode != 0xCC)
{
MessageBoxA(NULL, "TextCode Type Wrong.", "Error", MB_OK|MB_APPLMODAL);
}
else if((this->LoadHeader.Version - 1) != 0)
{
MessageBoxA(NULL, "Áö¿øÇÏÁö ¾Ê´Â ¹öÁ¯ µ¥ÀÌÅÍ ÀÔ´Ï´Ù.", "Error", MB_OK|MB_APPLMODAL);
}
else
{
this->DataFileLoad(FileWTF);
}
fclose(FileWTF);
}
}

LPSTR CMsg::Get(BOOL Index)
{
if(Index >= 0 && Index < 32768)
{
if(this->MsgIndex[Index] == 0)
{
return this->MsgDefault;
}

if(this->MsgIndex[Index]->Msg == 0)
{
return this->MsgDefault;
}

if(*this->MsgIndex[Index]->Msg == 0)
{
return this->MsgDefault;
}

return (LPSTR)this->MsgIndex[Index]->Msg;
}
return (LPSTR)this->MsgDefault;
}

void CMsg::MsgFree()
{
for(int n = 0; n < 32768; n++)
{
if(this->MsgIndex[n] != 0)
{
delete[] this->MsgIndex[n]->Msg;
delete this->MsgIndex[n];
}
}
}

void CMsg::MsgListPrint()
{
for(int n = 0; n < 32768 ;n++)
{
if(this->MsgIndex[n] != 0)
{
MessageBoxA(NULL, (LPSTR)this->MsgIndex[n]->Msg, "Message", MB_OK);
}
}
}

DWORD CMsg::MsgListInit()
{
MSGSTRUCT* Msg = new MSGSTRUCT;

if(Msg == NULL)
{
MessageBoxA(NULL, "Memory Allocation Error (MuMsg)", "Error", MB_OK);
return FALSE;
}

Msg->Next = NULL;
Msg->Number = NULL;
Msg->Msg = NULL;
memset(&this->MsgIndex, 0x00, sizeof(this->MsgIndex));

return TRUE;
}

DWORD CMsg::MsgListAdd(DWORD Index, LPBYTE Msg)
{
char* Pointer;
int MsgLen;
MsgLen = strlen((LPSTR)Msg);

if(MsgLen >= 1)
{
this->MsgIndex[Index] = new MSGSTRUCT;// this->MsgListNew();

if(this->MsgIndex[Index] == NULL)
{
MessageBoxA(NULL, "Memory Allocation Error #2(MuMsg)", "Error", MB_OK);
return FALSE;
}

Pointer = new char[MsgLen+1];

if(Pointer != NULL)
{
this->MsgIndex[Index]->Number = Index;

if(Index >= NULL || Index < 32767)
{
this->MsgIndex[Index]->Msg = (LPBYTE)Pointer;
strcpy((char*)this->MsgIndex[Index]->Msg, (char*)Msg);
return TRUE;
}
else
{
MessageBoxA(NULL, "Message Index Table Make Error", "Error", MB_OK);
return FALSE;
}
}
}
return TRUE;
}

void CMsg::XorBuffer(LPSTR Buffer, DWORD Len)
{
if(Len <= NULL)
return;

for(unsigned int i = 0; i < Len; i++)
Buffer = Buffer^0xCA;
}

void CMsg::DataFileLoad(FILE* File)
{
BYTE Temp[255];
DWORD Max;
WORD Index;
WORD Len;

Max = this->LoadHeader.Count;

if(Max <= NULL)
{
MessageBoxA(NULL, "Modification error data while reading", "Error", MB_OK|MB_APPLMODAL);
return;
}

while(Max--)
{
memset(&Temp, 0, sizeof(Temp));

fread(&Index, 2, 1, File);
fread(&Len, 2, 1, File);
fread(Temp, Len, 1, File);
Temp[Len] = 0;

this->XorBuffer((LPSTR)Temp, Len);
this->MsgListAdd(Index, (LPBYTE)Temp);
}
}


MuMsg.h


#pragma once

struct MSGSTRUCT
{
MSGSTRUCT* Next; // 0
DWORD Number; // 4
LPBYTE Msg; // 8
};

struct CHeader
{
BYTE HeadCode; // 0
BYTE Version; // 1
char Caption[21];// 2
DWORD Count; // 18
};

class __declspec(dllexport) CMsg
{
private:
void MsgFree();
void MsgListPrint();
DWORD MsgListInit();
DWORD MsgListAdd(DWORD, LPBYTE);
//
void XorBuffer(LPSTR, DWORD);
void DataFileLoad(FILE*);
protected:
MSGSTRUCT* MsgHead; // 0
MSGSTRUCT* MsgCurr; // 4
MSGSTRUCT* MsgIndex[32768]; // 8
//
CHeader LoadHeader; // 20008
//
char MsgDefault[50];// 20024
public:
CMsg();
~CMsg();
//
void LoadWTF(LPSTR);
LPSTR Get(BOOL);
};


no seu projeto crie também um arquivo chamado: 
Exports.def (se liga na extensão, ele é .DEF) e insira o seguinte código


LIBRARY MuMsg



Agora na raiz do seu projeto, recolhendo todas as pastas, até ficar assim:
img1.png


Clique com o Botão Auxiliar sobre ele, e vá em Properties.
Na aba da sua lateral esquerda, procure por Linker, e dentro de Linker navegue até Input.
Em Input, no lado direito abrirá as seções, procure por Module Definition File
img2.png


Nele coloque o nome do seu arquivos de Exportação, aquele com o formato .DEF agora quando compilar sua dll, mude o nome dela para mumsg.dll, ou já compile com o nome MuMsg.dll


Fazendo isso, não haverá necessidade de você realizar o hook pelo olly, e nesse caso não terá necessidade de usar Assembly.
Se a versão que você for trabalhar não for 97d, esqueça esse método e vai quebrar a cabeça com Assembly mesmo, já tem muitos tutorias explicando na internet, e alguns muito bem explicados, se não tiver aqui, use o Google.
 
Editado por um moderador:
  • Like
Reactions: MazziTo

mudominio21

Honrado XPZ
6 de Janeiro de 2015
39
4
8
heeladm Gostei muito do seu tutorial só que igual você falo esse é o passo mais fácil e o tutorial que estou seguindo é do CHRIS05 e não é questão de ser facil ou nao, sim estou aprendendo por conta própria estou me virando pra entender e o unico tutorial pra mim usar é o do mesmo pois nao achei outro tutorial com link que funciona !! 
 

s00x

my life, my style.
Estagiario
15 de Abril de 2011
443
127
43
30
heeladm Gostei muito do seu tutorial só que igual você falo esse é o passo mais fácil e o tutorial que estou seguindo é do CHRIS05 e não é questão de ser facil ou nao, sim estou aprendendo por conta própria estou me virando pra entender e o unico tutorial pra mim usar é o do mesmo pois nao achei outro tutorial com link que funciona !! 
Carinha, o método que a Chris usava é simples também e eficaz, primeiro, você esta modificando qual GameServer?


#Edit - Explicando o texto acima:



Quando disse para esquecer o método que expliquei acima, caso não fosse 97d, não é porque não funciona, e sim porque o MuMsg.h e MuMsg.cpp que te passei é da 97d.
Se você esta trabalhando com GameServer .18, te aconselho usar a próprio decompilação, mais caso não queira, pode usar o MuMsg.h e MuMsg.cpp que vou disponibilizar nesse tópico, esse MuMsg é o que usou no meu GameServer .18, ele já foi corrigido a leitura do arquivo message(lang).wtf, e se for utilizar meus arquivos, te aconselho usar o message(lang).wtf que acompanha o arquivo .rar.


Obs: se seu gameserver não for KOR, simplesmente mude para a linguagem entre os parenteses, e lembrando o message(lang).wtf fica na pasta Data do seu MuServer.

Download aqui: Ver anexo MuMsg.rar
 
Editado por um moderador:
  • Like
Reactions: MazziTo