Ir para conteúdo
🥇 [Exclusivo] Seja um Membro VIP EXTREME! ×
  • Quem está por aqui   0 membros estão online

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

Como usar um SDK para Cheating - Tutorial


Posts Recomendados

Antes de tudo, antes de começar, você deve saber alguma coisa.

Pré-requisitos:
- C++ (obviamente) 😎
- O que é um Hook e como usá-lo. (

É necessário se cadastrar para acessar o conteúdo.
 )
- Pare o C&P e entenda este tutorial

Antes de começar na parte de codificação, você deve saber que o Unreal Engine 3 é baseado quase no ProcessEvent.
Todas as funções do jogo passam pelo ProcessEvent (que é outra função) que executa todas as funções dentro do jogo.
Então, nosso objetivo de hackear é conectar este ProcessEvent e usar um ProcessEvent Func modificado, para que possamos ver TODAS as funções que passam por ele e usá-las a nosso favor.
Podemos usar muitos métodos de hooking... do JMP Hook ao IAT Hook...
Sugiro que você comece com Detour (já que o JMP Hook é detectado por quase todos os AntiCheats)

Para começar, você deve criar uma DLL vazia projeto em C++.
Depois de fazer isso, você deve incluir apenas os cabeçalhos do SDK completos no projeto. (C/C++ -> Geral -> Diretório de inclusões adicionais)

Depois de ter feito isso, você pode começar a codificar seu cheat.
Então crie um Main.cpp
E comece a incluir todos os cabeçalhos necessários e inclua também apenas o PRIMEIRO cabeçalho do SDK (SdkHeader.h) que inclui automaticamente todos os outros cabeçalhos do SDK.
Como isso:

Spoiler
Código:
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <fstream>
  4. #include "detours.h" //Necessário para a parte de Hooking.
  5. #include "SdkHeaders.h" //Cabeçalho do SDK
  6.  
  7. #pragma comment ( lib , "detours.lib" ) //Biblioteca necessária para a parte de Hooking.

 

Agora que você fez isso, você obviamente deve criar o DllMain que iniciará a dll no jogo. Assim:

Spoiler
Código:
  1. void OnAttach()
  2. {
  3. Beep(1000, 500);
  4. return;
  5. }
  6.  
  7. BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpvReserved)
  8. {
  9. switch (dwReason)
  10. {
  11. case DLL_PROCESS_ATTACH:
  12. CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)OnAttach, NULL, NULL, NULL);
  13. }
  14.  
  15. return TRUE;
  16. }

 

Agora você pode iniciar a parte Hooking de ProcessEvent dentro de OnAttach().
Antes de iniciar o hooking você deve saber o endereço do ProcessEvent, que está contido dentro do SDK em algum lugar... Normalmente está dentro do Core_Classess.h, no meio de VirtualFunctions de UObjects (comentado à direita)... o endereço e comece a definir seu ProcessEvent globalmente (fora do OnAttach) assim:

Spoiler
Código:
  1. typedef void ( __thiscall * tProcessEvent )( class UObject *, class UFunction *, void *, void *);
  2. tProcessEvent ProcessEvent=(tProcessEvent)0xXXXXXXX;

Onde 0xXXXXXX é o endereço do seu ProcessEvent.

Depois de definir seu ProcessEvent, você pode iniciar a parte do hooking, então volte na função OnAttach e use o detour para iniciar o hooking assim:

Spoiler
Código:
  1. void OnAttach ()
  2. {
  3. DetourTransactionBegin ();
  4. DetourUpdateThread ( GetCurrentThread ()); //Este comando define o thread de trabalho atual para o thread atual do jogo.
  5. DetourAttach (&( PVOID &) ProcessEvent , HookedPE ); //Este comando iniciará seu Hook.
  6. DetourTransactionCommit ();
  7. }

(estou usando o Detour da Microsoft neste exemplo)


Como você pode ver, usamos "HookedPE" dentro da função DetourAttach... É nossa função hooked que substituiremos para o ProcessEvent original, então devemos começar a codificar a função HookedPE....
Então vamos começar:
a função de ProcessEvent de O Unreal Engine 3 SEMPRE tem estes 4 argumentos:
- UObject *pObject (este é o objeto da função que é passado pelo PE original)
- UFunction *pFunction (esta é a função passada pelo PE original)
- void *pParms (este é o parâmetros da função)
- void *pResult (este é o resultado da função)
Então apenas defina nossa função hooked como esta:

Spoiler
Código:
  1. void __fastcall HookedPE ( UObject * pObject , void * edx , UFunction * pFunction , void * pParms , void * pResult )
  2. {
  3. ProcessEvent(pObject, pFunction, pParms, pResult);
  4. }

 

Como você pode ver, passamos também um void *edx porque ele é gerado por nossa chamada ( 

É necessário se cadastrar para acessar o conteúdo.
 ) que salva dados na memória, então quando chamamos novamente o ProcessEvent original (no final do nosso PE ligado) passamos apenas o principal quatro argumentos.

Agora o gancho está feito. Basta começar a implementar e usar nosso SDK.
Antes de tudo, devemos encontrar todas as Functions Name porque precisamos da função de PostRender (isso existe em todos os jogos).
Quando encontrarmos o nome da nossa função PostRender, podemos pegar seus parâmetros e usar o parâmetro UCanvas* para desenhar dentro do jogo 😉

Então vamos fazer algo assim:

Spoiler
Código:
  1. void __fastcall HookedPE ( UObject * pObject , void * edx , UFunction * pFunction , void * pParms , void * pResult )
  2. {
  3. char * szName = pFunction -> GetFullName ();
  4.  
  5. FILE * fp = fopen ( "C:\\Users\\YouUser\\Desktop\\Functions.txt" , "w+" );
  6. fprintf ( fp , "%s\n" , szNome );
  7.  
  8. ProcessEvent(pObject, pFunction, pParms, pResult);
  9. }


Agora é só compilar isso e injetar no seu jogo (enquanto estiver no lobby ou jogando).
Vamos executar a dll por 10-15 segundos e depois feche o jogo.
Vá em sua área de trabalho e abra Functions.txt também com o bloco de notas e procure por:

Spoiler

 

Código:
  1. . Pós-Renderização


    E você encontrará a função Engine do PostRender ... no meu caso é:

    Spoiler
    Código:
    1. FunctionEngine.GameViewportClient.PostRender

    (Esta função é igual em quase todos os jogos)

    Agora vá no seu HookedPE e delete a parte de impressão da função e podemos começar a filtrar todas as funções para selecionar apenas a nossa função necessária (PostRender)...
    Então vamos usar strcmp para fazer isso...

    Spoiler
    Código:
    1. void __fastcall HookedPE ( UObject * pObject , void * edx , UFunction * pFunction , void * pParms , void * pResult )
    2. {
    3. char * szName = pFunction -> GetFullName ();
    4.  
    5. if ( strcmp ( szName , "Function Engine.GameViewportClient.PostRender" ) == 0 )
    6. //Agora filtramos apenas nossa função necessária.
    7.  
    8. ProcessEvent(pObject, pFunction, pParms, pResult);
    9. }


      Agora vá em "Engine_functions.h" e procure por "Function Engine.GameViewportClient.PostRender"
      e você encontrará algo assim:

      Spoiler
      Código:
      1. FunctionEngine.GameViewportClient.PostRender
      2. // [0x00020802] ( FUNC_Event )
      3. // Informações dos parâmetros:
      4. // class UCanvas* Canvas ( CPF_Parm )
      5.  
      6. void UGameViewportClient :: eventPostRender ( class UCanvas * Canvas )
      7. {
      8. UFunction estático * pFnPostRender = NULL ;
      9.  
      10. if ( ! pFnPostRender )
      11. pFnPostRender = ( UFunction *) UObject :: GObjObjects ()-> Data [ 19766 ];
      12.  
      13. UGameViewportClient_eventPostRender_Parms PostRender_Parms ;
      14. PostRender_Parms . Tela = Tela ;
      15.  
      16. ProcessEvent((UObject*)this, pFnPostRender,&PostRender_Parms, NULL );
      17. };


        Como você pode ver, o único parâmetro desta função é UCanvas* que podemos pegar de dentro da estrutura "UGameViewportClient_eventPostRender_Parms" definida como abaixo:

        Spoiler
        Código:
        1. // Function Engine.GameViewportClient.PostRender
        2. // [0x00020802] ( FUNC_Event )
        3. struct UGameViewportClient_eventPostRender_Parms
        4. {
        5. classe UCanvas * Canvas ; // 0x0000 (0x0004) [0x0000000000000080] ( CPF_Parm )
        6. };


          Portanto, devemos antes de todas as outras coisas definir uma nova função em nossa dll, então vamos escrevê-la:

          Spoiler
          Código:
          1. void PostRender ( UCanvas * canvas )
          2. {
          3. if (! canvas ) return ; //Verifica se canvas é um ponteiro válido
          4. }


            Em nossa função PostRender passamos o argumento UCanvas* que vamos pegar da função passada pelo nosso HookedPE.
            Então agora é só voltar no seu HookedPE e adicionar isto:

            Spoiler
            Código:
            1. if ( strcmp ( szName , "Function Engine.GameViewportClient.PostRender" ) == 0 )
            2. {
            3. PostRender ((( UGameViewportClient_eventPostRender_Parms *)( pParms ))-> Canvas );
            4. }

               

              E agora fizemos .... para testar nosso hack, vá em PostRender func e adicione isto:

              Spoiler
              Código:
              1. if (! canvas ) return ;
              2.  
              3. tela -> SetPos ( 10 , 10 , 0 ); //define a posição da tela para (10,10)
              4. canvas -> DrawText ( L "Tutorial por dano20zoo" , false , 1.0f , 1.0f , NULL );


                Agora compile sua Dll e injete no jogo... espere alguns segundos e você verá a string
                "Tutorial by dano20zoo" no canto superior esquerdo da tela.

                Este é o código completo se você não entendeu alguma coisa:

                Spoiler

                main.cpp

                Código:
                1. #include <windows.h>
                2. #include <iostream>
                3. #include <fstream>
                4. #include "detours.h"
                5. #include "SdkHeaders.h"
                6.  
                7. #pragma comment(lib, "detours.lib")
                8.  
                9. typedef void(__thiscall *tProcessEvent)(class UObject *, class UFunction *, void *, void *);
                10. tProcessEvent ProcessEvent = (tProcessEvent)0xXXXXXXX;
                11.  
                12. void PostRender(UCanvas *canvas)
                13. {
                14. if (!canvas) return;
                15.  
                16. canvas->SetPos(10, 10, 0); //define a posição da tela para (10,10)
                17. canvas -> DrawText ( L "Tutorial por dano20zoo" , false , 1.0f , 1.0f , NULL );
                18. }
                19.  
                20. void __fastcall HookedPE(UObject *pObject, void *edx, UFunction *pFunction, void *pParms, void *pResult)
                21. {
                22. char *szName = pFunction->GetFullName();
                23.  
                24. if (strcmp(szName, "Function Engine.GameViewportClient.PostRender") == 0)
                25. {
                26. PostRender(((UGameViewportClient_eventPostRender_Parms*)(pParms))->Canvas);
                27. }
                28.  
                29. ProcessEvent(pObject, pFunction, pParms, pResult);
                30. }
                31.  
                32. void OnAttach()
                33. {
                34. DetourTransactionBegin();
                35. DetourUpdateThread(GetCurrentThread());
                36. DetourAttach(&(PVOID&)ProcessEvent, HookedPE);
                37. DetourTransactionCommit();
                38. }
                39.  
                40. BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpvReserved)
                41. {
                42. switch (dwReason)
                43. {
                44. case DLL_PROCESS_ATTACH:
                45. CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)OnAttach, NULL, NULL, NULL);
                46. }
                47.  
                48. return TRUE;
                49. }

                   

                  Isso é apenas para entender como o SDK funciona! Se você quiser algum código fonte do Aimbot, Wallhack etc, esta seção do fórum está CHEIA de exemplos de código...
                  Basta ligar PlayerController (no ProcessEvent) e usá-lo para fazer quaisquer outros hacks.

                  Isso é tudo. Feliz hacking pessoal!

                   

                   Créditos: dano20zoo

                  Editado por Zary
                  • Curtir 31
                  • Amei 1

                  ♔ Player not Prayer ♔

                  Twitch - Discord - Youtube

                   

                  sgzqPw8.gif

                   

                  Link para o comentário
                  https://www.webcheats.com.br/topic/2283291-como-usar-um-sdk-para-cheating-tutorial/
                  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.