Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Criando um patcher

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial Criando um patcher

    Bem pessoal desde fevereiro sem postar nada de útil , então vamos parar de enrolação e começar.

    O que seria um Patcher ?
    De uma forma sucinta , nada mais é um programa que altera um byte de outro programa sem precisar de alguém que saiba altera-lo manualmente.

    Vocês devem conhecer , ele é também chamado de uma forma geral de Crack.

    Vou tentar dividir este tutorial em três partes:

    1-Explicação.
    2-Alteração.
    3-Programação do próprio.

    Voltando , um Patcher funciona basicamente como a técnica de patching que é basicamente alterar comandos para chegar em uma mensagem de sucesso ou algo do tipo , ou seja , você pelo menos tem que saber como é feito um patching.

    Explicações terminadas , vou começar a postar os links de referência que usei para fazer o meu patcher:

    Comandos em C para alterar um arquivo binário:
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Explicação sobre a estrutura de um executável:
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Alvo:
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    É bom ler entender todo o conteúdo dos links que mandei , além de que é fundamental saber pelo menos uma linguagem de programação , a que vou usar como podem ver é C , mas a lógica é sempre a mesma.

    Abrir o arquivo , procurar pelo OFFSET , alterar o byte e fechar.
    Last edited by Gustavo; 31-07-2009, 10:33.
    @creatinguseless
    Similar Threads

  • Font Size
    #2
    Vamos a parte da alteração , se você fez o download do nosso alvo e começou a debuga-lo deve ter conseguido chegar no JE que decide se a mensagem de sucesso será ou não exibida , senão abra nosso alvo , vá até a command bar e dê um BP MessageBoxA

    Vamos a Stack e selecionar nossa linha em execução atual e dar um ENTER nela , otimo chegamos a nosso código da Bad Message , se irmos um pouco mais acima no nosso Dissambly vamos ver na linha 401B35 um JE para 401B98 , já nesse endereço temos um JMP para o endereço 401BAB que por sua vez tem outro JMP que leva diretamente a nossa mensagem de sucesso , então devemos apenas alterar o JE localizado em 401B35 para um JMP direto.

    Até aqui tudo bem , se fossemos apenas fazer um patching nosso objetivo já teria sido feito , mas na parte anterior disse que temos que abrir o arquivo procurar o OFFSET do endereço que queremos alterar e escrever os bytes nele , então devemos localizar o OFFSET do nosso endereço a ser alterado ou seja OFFSET de 401B35.

    Se você leu sobre a estrutura de um executável deve ter percebido que há alguns cabelhaços antes do nosso código em si e esses cabelhaços equivalem a 1024 bytes (400 HEX), nosso endereço de origem começa em 401000 então o seu endereço correspondente é 400 , assim se quisermos saber o valor do OFFSET da linha 401B35 devemos pegar a diferença dessa linha entre o valor de origem e somar a 400:

    (401B35-401000)+400=F35

    O OFFSET de 401B35 é F35 , bom o endereço de alteração já temos agora precisamos saber que byte mudar , se tentar modificar agora o JE para JMP vai ver que de 74 nosso byte muda para EB.

    Bom até a ultima parte , onde iremos aplicar nossas modificações.
    @creatinguseless

    Comment


    • Font Size
      #3
      Chegamos na parte principal , ou se preferirem a parte mais divertida , se vocês olharam os links que mandei na primeira parte , lá você vê somente os comandos que vamos usar.
      Para o patcher em si vamos usar a lib <stdio.h> , devemos armazenar o nome do nosso file em um ponteiro do tipo FILE ,vou dar uma breve explicação sobre cada um dos comandos utilizados:

      fopen

      FILE * fopen ( "nome_do_ponteiro" , "modo" );



      Abre um arquivo binário ou não do tipo FILE em forma de leitura, escrita.

      Nós vamos abrir o nosso em modo de leitura e escrita para binário:

      rb+

      fseek
      fseek ( nome_do_ponteiro, OFFSET, origin);


      Procura no nosso file o OFFSET escolhido , de acordo com o origin, que pode ser :

      SEEK_SET Começo do file
      SEEK_CUR Apartir da posição atual
      SEEK_END Fim do file


      Vamos usar SEEK_CUR.

      fprintf

      fprintf ( nome_do_ponteiro, "const char * format", ... );


      Funciona como printf , só que este é especifíco pra escrever em arquivos.

      fclose
      fclose(nome_do_ponteiro);



      Fecha o nosso file.

      Agora que sabemos como cada um funciona vamos aplicar nossa parte de modificação a esse executável .

      Código:
      #include <stdio.h>
      main()
      { 
            FILE *arquivo;//Ponteiro do tipo FILE pra receber um arquivo
      
           arquivo=fopen("tsrh-kgm1.exe","rb+");//Abre o arquivo no modo leitura e escrita para binarios
       
               fseek ( arquivo , 0x00F35 ,SEEK_CUR);//Procura nosso OFFSET
      
                   fprintf(arquivo,"%c",235);//Escreve nosso EB no lugar de 74
       
           fclose(arquivo);//Fecha o arquivo
      
           printf("Patch feito com sucesso\n");
           return 0; 
      }
      Compile e execute , uma observação importante é que ele deve ser executado no mesmo lugar onde está nosso alvo , e o nome deve coincidir com o nome do alvo.

      Espero que tenham gostado.
      @creatinguseless

      Comment


      • Font Size
        #4
        ótimo Tutorial cara, fiz a leitura do nício ao fim, ficou legal mesmo esta explicação.

        Abraços!
        Eu Vim pra Revolucionar!!

        Comment


        • Font Size
          #5
          Belissimo topico amigo, ficou muito top e muito esclarecedor.

          Obrigado por compartilhar ;D

          Comment


          • Font Size
            #6
            Opa valeu pelo incentivo pessoal , vou postar mais assim que possivel
            @creatinguseless

            Comment


            • Font Size
              #7
              esse tuto ta de parabens entre os q eu ja vi dos seus gustavo...

              otimo mesmo muito bem explicado
              sigpic

              Comment


              • Font Size
                #8
                nuss...
                esta de parabéns pelo tuto mano

                vlw
                sigpic


                Comment


                • Font Size
                  #9
                  Cara um dos melhores tutos sobre pather que eu já vi, muito bem explicado e fácil de entender, vou tentar fazer o patch em Delphi pra ver se funfatambém.
                  []s
                  <<< ENGINEERING CODERZ - HACKING PROGRAMMING GROUP >>>
                  msn/mail: azurus21@gmail.com

                  Comment


                  • Font Size
                    #10
                    O linki para o alvo está quebrado... tem como arrumar?
                    Att,

                    [A]ntharaz



                    sigpic

                    Comment


                    • Font Size
                      #11
                      Valeu pessoal pelo interesse nesse assunto tão amplo que é Reversing.

                      Aqui está o link para o Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
                      @creatinguseless

                      Comment

                      X
                      Working...
                      X