Ir para conteúdo
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Posts Recomendados

 

Decidi trazer um tutorial para aqueles que não sabem como manusear a send to server ao seu favor, será passo a passo.

 

1 - Precisamos achar o endereço da CLTClient::SendToServer.

Para isso basta abrir o Engine.exe em seu IDA e pesquisar por CLTClient::SendToServer.

W15SE9B.png

 

Basta ir até onde ela está ( .rdata ) e pressionar a tecla 'x' para ver as referências ( são duas ), ambas dentro da mesma função.

1hVksrq.png

 

Como pode ver ele foi até onde a string está sendo utilizada.

1AOZpe5.png

 

Agora basta subir até o início dessa função, você verá o endereço da função em sub_ENDEREÇO e também podem ver que o this está presente no em seu primeiro argumento através da própria função ( ou dentro da cshell, pois o lt_client será movido para o ecx ).

RsVpc4R.png

 

OK, agora temos o endereço da função que é 47D880, então vamos fazer um hook, mas antes vamos ver sua sintaxe.

 

Simbol Undecorated do PDB do CA Classic: ?SendToServer@CLTClient@@UAEIPAVILTMessage_Read@@I@Z

Se utilizarem uma tool chamada undname que vem instalado junto ao Visual Studio, o simbolo decorado não apresenta this.

xEKZwgC.png

 

Mas ele está lá, e também o PDB mostra o uso da classe ILTMessage_Read quando na verdade a versão usada é a CLTMessage_Read_Client.

Como eu sei disso?

Eu peguei o ponteiro e joguei no Cheat Engine -> Tools -> Dissect Data Structures e como ele consegue recuperar o RTTI de classes, mostrou CLTMessage_Read_Client e o IDA também mostra ela sendo a versão mais derivada.

soyrsxQ.png

 

Então vamos considerar a função abaixo.

É necessário se cadastrar para acessar o conteúdo.

Vamos usar o

É necessário se cadastrar para acessar o conteúdo.
( The Minimalistic x86/x64 API Hooking Library for Windows ) para isso.

 

Antes precisamos iniciar o MinHook

É necessário se cadastrar para acessar o conteúdo.

Vamos preparar nosso alias para ponteiro de função.

É necessário se cadastrar para acessar o conteúdo.

Agora vamos criar nossa função para fazer nosso hook na SendToServer.

É necessário se cadastrar para acessar o conteúdo.

Agora criamos o hook e ativamos ele.

É necessário se cadastrar para acessar o conteúdo.

O nosso hook está feito.

 

Vamos começar aprendendo a enviar mensagem para o servidor.

Precisamos criar a mensagem utilizando uma função chamada create_message ( que vai chamar um wrapper de alloc dentro da clt_message_write_client, fora da vtable ) presente na classe CLTCommonClient.

 

Estrutura da create_message:

É necessário se cadastrar para acessar o conteúdo.

 

É necessário se cadastrar para acessar o conteúdo.

 

Se você não tem a classe CLTClient utilize meu tópico: 

 

E caso não tenha a CLTCommonClient, o index na vtable para a função create_message é o 9 ou offset 0x24.

Continuando..

 

Um adendo.

O primeiro ID da mensagem é sempre um std::uint8_t e indica do que se trata toda a mensagem ( obviamente o servidor precisa de uma referência para entender o que precisa ler ).

 

Esses dois exemplos não vão fazer nada em nenhum jogo, pois acabei de inventar para demonstrar.

É necessário se cadastrar para acessar o conteúdo.

Agora vamos entender como pegar um id dentro da SendToServer e trocar valores dele.

É necessário se cadastrar para acessar o conteúdo.

Perfeito, agora já sabemos como enviar para o servidor e como ler e editar o que vai para o servidor.

 

Mas calma ai, ainda não falei como vocês vão descobrir como a mensagem foi montada, não basta converter tudo em uint8 e achar que é o brabo..

A primeira maneira é você, dentro de sua hook na sendtoserver chamar uma função intrínseca chamada 

É necessário se cadastrar para acessar o conteúdo.
, que vai dizer o endereço de onde a SendToServer foi chamada.

É necessário se cadastrar para acessar o conteúdo.

Obviamente essa maneira não é tão fácil assim.

Uma melhor mas que ainda vai exigir engenharia reversa é você pegar o PDB do CA CLASSIC e olhar no IDA as funções, criando pattern do CABR para funcionar no CA CLASSIC em uma versão de dois anos atrás. Não é difícil mas deixa mais fácil o trabalho, pois o PDB deixa os nomes, inclusive de variáveis expostos.

Você pode encontrar o PDB em:

É necessário se cadastrar para acessar o conteúdo.

 

E além de fazer isso, você pode fazer hook em toda a VTABLE da clt_message_write_client e printar tudo que é chamado ( meu logger faz algo desse tipo ).

Depois é só usar o IDA para entender o que são os VALORES enviados na mensagem.

 

Bom, acredito que ninguém nunca fez um tutorial assim sobre SendToServer.

 

Créditos

qqshutup

 

E dê bônus para vocês, vai toda minha classe que reverti.. clt_message_read_client, clt_message_write_client, ilt_ref_count, cpacket_data, cpacket_read e cpacket_write..

Spoiler
É necessário se cadastrar para acessar o conteúdo.
É necessário se cadastrar para acessar o conteúdo.
É necessário se cadastrar para acessar o conteúdo.
É necessário se cadastrar para acessar o conteúdo.
É necessário se cadastrar para acessar o conteúdo.
É necessário se cadastrar para acessar o conteúdo.

 

 

 

 

Editado por qqshutup
  • Curtir 20
  • Amei 4
  • Uau 2

CONTA DESATIVADA

 

Link para o comentário
https://www.webcheats.com.br/topic/2275262-sendtoserver-do-zero-at%C3%A9-enviar-ao-servidor/
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.