Jump to content

Turbine o seu Perfil

Confira a atualização e participe do clube!
Clique e saiba mais

Junte-se ao Clube de Membros VIP

Tenha destaque e diversos benefícios!
Confira Aqui

Acesse nosso Discord

Conheça nossos canais interativos
Confira Aqui
Notícia
  • Adquira já o seu VIP!
Sign in to follow this  
gabrielalbin0

[TUTORIAL] COMO COMEÇAR A CRIAR HACKS - COMO FAZE HACK DE NO FLASH

Recommended Posts

Olá galera, Sei que muitos de vocês gostaria de criar seus próprios hacks para CSGO, então vou dar uma introdução para vocês aqui

 

ITENS NECESSÁRIOS

-Conhecimento em Programação - Para criar hacks é muito importante saber programar, e isso, infelizmente, eu não vou cobrir a fundo NESSE tutorial, talvez mais pra frente eu faça um explicando o básico

Para a área de game hacking você pode utilizar qualquer linguagem de programação que tenha acesso a manipulação de memória (C++ preferível, mas se você já souber c ou phyton, não precisa, dá pra fazer nelas também). Nos meus tutoriais usarei a linguagem C++, caso você não saiba, aprenda :D pegue um bom livro ou um bom tutorial no youtube (Se souber inglês recomendo a série do THENEWBOSTON).

-Visual Studio 2015 Community - É uma IDE (Ambiente de desenvolvimento Integrado), que é basicamente usado para você criar o código-fonte do seu hack, ele conta com um compilador integrado, então é bem útil, e o melhor: Grátis! pode ser baixado diretamente pelo site da Microsoft (https://www.visualstudio.com/downloads/ )

Como ele é um programa bem complexo, não cobrirei ele nesse tutorial, mas os próprios desenvolvedores da Microsoft tem uma série de vídeos explicativos no site deles :D

 

-OFFSET DUMPER - Explicarei depois

 

-CSGO - Nesse tutorial utilizarei o jogo Counter-Strike: Global-Offensive para explicar, mas o que ensinarei pode ser aplicado a qualquer jogo caso você entenda o conceito :D

 

-Um cérebro e dedicação - Você não vai se tornar um profissional do dia pra noite, então paciência, TUDO PODE SER "HACKEAVEL", só depende do esforço que você coloca para tornar possível :D

COMEÇANDO

A partir desse ponto vou assumir que você já sabe programar!

 

Para os primeiros tutoriais vou começar explicando como criar hacks externos (programas .exe), depois talvez eu passe para programas internos (dlls)

 

Em C++ e em C nós temos a biblioteca <Windows.h>, ela permite

  • Criar janelas e botões.
  • Enumerar arquivos de um diretório.
  • Consultar informações sobre o sistema(ex processos, serviços, janelas).
  • Coisas do gênero.

Desses itens nós iremos nos aprofunda no "Consultar informações sobre o sistema", que é basicamente, ler e escrever na memória do computador.

 

Todo programa tem um endereço de memória inicial e que muda toda vez que ele é iniciado, por isso nós classificamos os endereços de memoria em dois tipos: Dinâmicos e Estáticos

Os dinâmicos são os endereços que nós procuramos, que são as famosas "OFFSETS", basicamente, imagine o seguinte código abaixo

class Player(){

   int health;
   float position[3];
   int isAlive;
}

Basicamente, se você procurar pela vida no Cheat Engine você vai encontrar ela associada a um endereço de memória, mas se você fechar o jogo e abrir de novo, aquele endereço de memória não vai mais funcionar, porque ele é alocado dinamicamente, ou seja, a cada execução do programa o Windows procura um local para o programa, que varia toda vez, porem, essa classe (Player) sempre estará a X bytes a frente do endereço inicial de memória, e esse endereço não muda, no nosso exemplo, o endereço da vida está na posição inicial da classe (Player + 0x0), o vetor "position" está a 4 bytes do inicio da classe (Player + 0x4), assim por diante (na prática é mais fácil de entender e por agora essa explicação serve pra explicar a diferença)

ou seja, nós teríamos que pegar o endereço inicial + o endereço da classe player e armazenar em algum lugar, depois pegar esse endereço e acionar o endereço do "position" e aí sim nós teríamos a nossa posição (x, y e z)

 

Então, é aí que entra o OFFSET DUMPER, basicamente, ele é um programa que localiza por meio de PatterScan todas as offsets do jogo e te mostra, sem você precisar por a mão na massa pra achar. O link pra baixar o dumper que utilizarei nesse tutorial está no fim do tópico :D (TODOS OS CRÉDITOS DO DUMPER VAI PARA O ZAT!)

PS: OS OFFSETS MUDAM EM TODA ATUALIZAÇÃO! ENTÃO VOCÊ TEM QUE USAR O DUMPER DNV QUANDO O CS ATUALIZAR

 

Para utilizar você abre o CS no modo inseguro (VAC Disable) (pesquise no google se não souber), entra numa partida com bots e abre o programa, ele vai mostrar isso:

c4qz9qr.png

 

Dessas offsets a gente só precisa de duas pra criar o no : a do localplayer e a do FlashMaxDuration

 

Basicamente, a localPlayer é a responsável por guardar todos os dados relacionados ao nosso jogador, e a FlashMaxDuration é responsável por armazenar por quanto tempo a gente fica cego pela flashbang, então, para criar o noflash, basta falar pro jogo que a gente tem que ficar 0.0000 segundos cego :D

 

Como a gente faz isso você me pergunta?

usando a Windows.h eu te respondo..

 

Abaixo deixo o codigo de um NOFLASH com comentários pra você entender direitinho como funciona :D

Basicamente, nossos dados (o localplayer) está armazenado dentro do modulo "Client.dll", e, para acessarmos o endereço desse modulo a gente vai precisar de uma função, e como estou sem tempo agora, vou simplesmente dar a função pra vocês e depois eu crio um tópico explicando o que ela faz..

também adcionei a função de pegar a HANDLE e o id do processo, depois faço um video explicando tudo certinho

 

NÃO SE ESQUEÇA DE MUDAR O PROJETO PARA MULTI-BYTE CHARACTER AO INVÉS DE UNICODE (CLICA COM O BOTÃO DIREITO NO PROJETO NO SOLUTION EXPLORER E DEPOIS EM PROPRIEDADES E DEPOIS EM "CHARACTER SET" COLOCA MULTIBYTE

 

#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>

//SINTESE
//OBJETIVO: Abrir uma handle em um processo
//PARÂMETRO: nome do processo
//RETORNO: handle para o processo
HANDLE PegarHandle(char* ProcessName) { //PRA QUEM QUISER ENTENDER: https://msdn.microsoft.com/pt-br/library/windows/desktop/ms682489(v=vs.85).aspx procure as funções que eu utilizei!!!
   //declarações
   PROCESSENTRY32 pEntry;
   HANDLE tempH, gameHandle;
   //instruções
   pEntry.dwSize = sizeof(PROCESSENTRY32);
   tempH = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
   if (Process32First(tempH, &pEntry)) {
       while (Process32Next(tempH, &pEntry)) {
           if (!strcmp(pEntry.szExeFile, ProcessName)) {
               gameHandle = OpenProcess(PROCESS_ALL_ACCESS, NULL, pEntry.th32ProcessID);
               CloseHandle(tempH);
               return gameHandle;
           }
       }
   }
   return 0;
}

//SINTESE
//OBJETIVO: Achar o ProcessID do processo
//PARÂMETRO: nome do processo
//RETORNO: ID do processo
DWORD AcharID(char* ProcessName) {
   //declarações
   PROCESSENTRY32 pEntry;
   HANDLE tempH;
   DWORD gamePID;
   //instruções
   pEntry.dwSize = sizeof(PROCESSENTRY32);
   tempH = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
   if (Process32First(tempH, &pEntry)) {
       while (Process32Next(tempH, &pEntry)) {
           if (!strcmp(pEntry.szExeFile, ProcessName)) {
               gamePID = pEntry.th32ProcessID;
               CloseHandle(tempH);
               return gamePID;
           }
       }
   }
   return 0;
}

//SINTESE
//OBJETIVO: Achar o endereço do modulo
//PARÂMETRO: nome do modulo
//RETORNO: endereço do modulo
DWORD acharModulo(char* moduleName, DWORD pID) {
   //declarações
   MODULEENTRY32 pEntry;
   HANDLE tempH;
   DWORD ModuleAddress;
   //instruções
   pEntry.dwSize = sizeof(MODULEENTRY32);
   tempH = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pID);
   if (Module32First(tempH, &pEntry)) {
       while (Module32Next(tempH, &pEntry)) {
           if (!strcmp(pEntry.szModule, moduleName)) {
               ModuleAddress = (DWORD)pEntry.modBaseAddr;
               CloseHandle(tempH);
               return ModuleAddress;
           }
       }
   }
   return 0;
}

int main() {
                               //VARIÁVEL QUE ARMAZENARÁ O ID DA JANELA DO JOGO (NECESSÁRIO PARA ACHARMOS O ID DO PROCESSO)
   DWORD IDdoJogo = AcharID("csgo.exe");                              //VARIAVEL QUE ARMAZENARÁ O ID DO JOGO (NECESSÁRIO PRA CRIAR MOS A HANDLE
   HANDLE gameHandle = PegarHandle("csgo.exe");                                        //HANDLE DO PROCESSO (NECESSARIA PARA EDITARMOS A MEMORIA
   DWORD dwClient;                                                //VARIAVEL QUE A GENTE VAI ARMAZENAR O ENDEREÇO DO "CLIENT.DLL"
   dwClient = acharModulo("client.dll", IDdoJogo);              //ACHA O ENDEREÇO DO CLIENT.DLL E ARMAZENA NO dwClient
                                                        
   DWORD localPlayerOffset = 0x00A8C53C;                              //OFFSET DO LOCALPLAYER QUE A GENTE PEGOU DO DUMPER
   DWORD FlashMaxDurationOffest = 0x0000A308;                         //OFFSET DO TEMPO DA FLASHBANG QUE A GENTE PEGOU DO DUMPER

   DWORD conteudoPlayer = NULL;                                          //VARIAVEL QUE A GENTE VAI ARMAZENAR O CONTEUDO DO NOSSO PLAYER
                                        

   float novoTempo = 0;                                               //VALOR QUE A GENTE VAI ESCREVER NO TEMPO DA FLASH (0 = N FICA CEGO/FICA CEGO 0 SEGUNDOS)


                  

   ReadProcessMemory(gameHandle, LPVOID(dwClient + localPlayerOffset), &conteudoPlayer, sizeof(conteudoPlayer), NULL); //LÊ O CONTEUDO DA OFFSET DO LOCALPLAYER E ARMAZENA DENTRO DA
                                                                                                                    //variavel chamada "CONTEUDOPLAYER"
   while (1) {                                                                                                         //loop infinito!!
       WriteProcessMemory(gameHandle, LPVOID(conteudoPlayer + FlashMaxDurationOffest), &novoTempo, sizeof(novoTempo), NULL); //ACESSA O CONTEUDOPLAYER+OFFSET DA FLASH E ESCREVE O QUE TEM DENTRO DA VARIAVEL "novoTempo", ou seja, escreve 0 naquela variável.

       Sleep(1);                                                                                  //Sleep pro nosso process não consumir muita memoria!
   }
   return 0;
}

 

Enfim galera, é isso por hoje, semana que vem faço um vídeo explicando tudo isso mais detalhado e edito aqui :D

espero que ajude, qualquer dúvida comenta aí que tento responder, se quiser só copiar esse codigo, compilar e execultar vai funcionar!!

 

DOWNLOAD DO OFFSET DUMPER:

 

SCAN: https://www.virustotal.com/pt/file/34d459e0dbeebc24129cc3d1a916a848df7d9a2a91ae6715503dbe5898fa145b/analysis/1477012731/

DOWNLOAD: https://www.dropbox.com/s/pzaykubxhhcscsr/Zats%20CSGO-Dumper.exe?dl=0

  • Like 3

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×
×
  • Create New...