SlideShare uma empresa Scribd logo
Patch de Emergência

   Wanderley Caloni

       2012-07
wanderley at caloni at low level
•   Programador entusiasta (Basic YES!): 1 ano
•   C/C++ Maniac: 2 anos
•   Segurança da Informação: 10 anos
•   Mercado Financeiro: 1 ano
wanderley at caloni at low level
Patch de Emergência
Espaço de memória do processo



    CriticalService.exe



                                EvenOdd.dll


            DoProcess           IsEven
Patch de Emergência
              IsEven                      IsEven

         1001001001010                 mov ebx, esp
         1010010101010                    add esp
         0010101011010                mov eax, dword
         0101001101010                   ptr[ebx]
         0010100101011                      ret



windbg -pvr -pn CriticalService.exe

               noninVasively
               Resume threads
Patch de Emergência                 2.0!!




    IsEven                         IsEven

 mov ebx, esp                   mov ebx, esp
    add esp                       add esp+8
mov eax, dword                 mov eax, dword
   ptr[ebx]                      ptr[ebx+8]
      ret                            ret



                  WinDbg
                 a [address]
Patch de Emergência
Espaço de memória do processo



    CriticalService.exe         EvenOdd.dll
            DoProcess            IsEven




                                EvenOdd3.dll
                                 IsEven
Patch de Emergência
Patch de Emergência                         3.0!!


Espaço de memória CS.exe   Espaço de memória RmT.exe



    CriticalService.exe         RmThread.exe
         LoadLibrary           CreateRemoteThread




      EvenOdd3.dll
Patch de Emergência

      Técnicas testadas           KMJ: Keep My Job

   Técnicas documentadas

   Técnicas automatizadas


    Jumps incondicionais        XGH: eXtreme
                                Go Horse Programming
Carregamento dinâmico de DLLs

   Escrita de assembly live
Patch de Emergência                 4.0!!




EvenOdd.dll
      IsEven
               EvenOdd2.dll
                     IsEven
                              EvenOdd3.dll
                                    IsEven



                                  ...
Patch de Emergência                    5.0!!




EvenOdd.dll              EvenOdd.pdb
   100100100
                         IsEven(int)
   100100101
   100100100                   !!!
                            ON
                    (IsEvenUpdate*)(int)
                         TI
   100100101
                       DIIsEvenUpdateReady
                    EE
   100100100
                   bool
                 AT
   100100101

             TI M
           UL

               DbgHelp.lib
O que aprendemos?
Dúvidas? Eu tenho várias.
          e-mail


 wanderley@caloni.com.br
            twitter

                      saite

Mais conteúdo relacionado

Mais de Wanderley Caloni

Vcpkg e vc td a ver
Vcpkg e vc td a verVcpkg e vc td a ver
Vcpkg e vc td a ver
Wanderley Caloni
 
Stack overflow
Stack overflowStack overflow
Stack overflow
Wanderley Caloni
 
Apresentação da BitForge
Apresentação da BitForgeApresentação da BitForge
Apresentação da BitForge
Wanderley Caloni
 
Debug Remoto com WinDbg: Um Resumo
Debug Remoto com WinDbg: Um ResumoDebug Remoto com WinDbg: Um Resumo
Debug Remoto com WinDbg: Um Resumo
Wanderley Caloni
 
GitIndex e SourceServer
GitIndex e SourceServerGitIndex e SourceServer
GitIndex e SourceServer
Wanderley Caloni
 
Antidebugging eu não quero que você mexa no meu código
Antidebugging   eu não quero que você mexa no meu códigoAntidebugging   eu não quero que você mexa no meu código
Antidebugging eu não quero que você mexa no meu código
Wanderley Caloni
 
Entendendo a Compilação
Entendendo a CompilaçãoEntendendo a Compilação
Entendendo a Compilação
Wanderley Caloni
 
Engenharia Reversa para Principiantes
Engenharia Reversa para PrincipiantesEngenharia Reversa para Principiantes
Engenharia Reversa para Principiantes
Wanderley Caloni
 
Como Não Desenvolver Pôquer Online ou Como Explorar a Pseudo-Aleatoriedade
Como Não Desenvolver Pôquer Online ou Como Explorar a Pseudo-AleatoriedadeComo Não Desenvolver Pôquer Online ou Como Explorar a Pseudo-Aleatoriedade
Como Não Desenvolver Pôquer Online ou Como Explorar a Pseudo-Aleatoriedade
Wanderley Caloni
 
Depurando até o fim do mundo: técnicas e truques de WinDbg
Depurando até o fim do mundo: técnicas e truques de WinDbgDepurando até o fim do mundo: técnicas e truques de WinDbg
Depurando até o fim do mundo: técnicas e truques de WinDbg
Wanderley Caloni
 

Mais de Wanderley Caloni (10)

Vcpkg e vc td a ver
Vcpkg e vc td a verVcpkg e vc td a ver
Vcpkg e vc td a ver
 
Stack overflow
Stack overflowStack overflow
Stack overflow
 
Apresentação da BitForge
Apresentação da BitForgeApresentação da BitForge
Apresentação da BitForge
 
Debug Remoto com WinDbg: Um Resumo
Debug Remoto com WinDbg: Um ResumoDebug Remoto com WinDbg: Um Resumo
Debug Remoto com WinDbg: Um Resumo
 
GitIndex e SourceServer
GitIndex e SourceServerGitIndex e SourceServer
GitIndex e SourceServer
 
Antidebugging eu não quero que você mexa no meu código
Antidebugging   eu não quero que você mexa no meu códigoAntidebugging   eu não quero que você mexa no meu código
Antidebugging eu não quero que você mexa no meu código
 
Entendendo a Compilação
Entendendo a CompilaçãoEntendendo a Compilação
Entendendo a Compilação
 
Engenharia Reversa para Principiantes
Engenharia Reversa para PrincipiantesEngenharia Reversa para Principiantes
Engenharia Reversa para Principiantes
 
Como Não Desenvolver Pôquer Online ou Como Explorar a Pseudo-Aleatoriedade
Como Não Desenvolver Pôquer Online ou Como Explorar a Pseudo-AleatoriedadeComo Não Desenvolver Pôquer Online ou Como Explorar a Pseudo-Aleatoriedade
Como Não Desenvolver Pôquer Online ou Como Explorar a Pseudo-Aleatoriedade
 
Depurando até o fim do mundo: técnicas e truques de WinDbg
Depurando até o fim do mundo: técnicas e truques de WinDbgDepurando até o fim do mundo: técnicas e truques de WinDbg
Depurando até o fim do mundo: técnicas e truques de WinDbg
 

Último

PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 

Último (8)

PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 

Patch de Emergencia

  • 1. Patch de Emergência Wanderley Caloni 2012-07
  • 2. wanderley at caloni at low level • Programador entusiasta (Basic YES!): 1 ano • C/C++ Maniac: 2 anos • Segurança da Informação: 10 anos • Mercado Financeiro: 1 ano
  • 3. wanderley at caloni at low level
  • 4. Patch de Emergência Espaço de memória do processo CriticalService.exe EvenOdd.dll DoProcess IsEven
  • 5. Patch de Emergência IsEven IsEven 1001001001010 mov ebx, esp 1010010101010 add esp 0010101011010 mov eax, dword 0101001101010 ptr[ebx] 0010100101011 ret windbg -pvr -pn CriticalService.exe noninVasively Resume threads
  • 6. Patch de Emergência 2.0!! IsEven IsEven mov ebx, esp mov ebx, esp add esp add esp+8 mov eax, dword mov eax, dword ptr[ebx] ptr[ebx+8] ret ret WinDbg a [address]
  • 7. Patch de Emergência Espaço de memória do processo CriticalService.exe EvenOdd.dll DoProcess IsEven EvenOdd3.dll IsEven
  • 9. Patch de Emergência 3.0!! Espaço de memória CS.exe Espaço de memória RmT.exe CriticalService.exe RmThread.exe LoadLibrary CreateRemoteThread EvenOdd3.dll
  • 10. Patch de Emergência Técnicas testadas KMJ: Keep My Job Técnicas documentadas Técnicas automatizadas Jumps incondicionais XGH: eXtreme Go Horse Programming Carregamento dinâmico de DLLs Escrita de assembly live
  • 11. Patch de Emergência 4.0!! EvenOdd.dll IsEven EvenOdd2.dll IsEven EvenOdd3.dll IsEven ...
  • 12. Patch de Emergência 5.0!! EvenOdd.dll EvenOdd.pdb 100100100 IsEven(int) 100100101 100100100 !!! ON (IsEvenUpdate*)(int) TI 100100101 DIIsEvenUpdateReady EE 100100100 bool AT 100100101 TI M UL DbgHelp.lib
  • 14. Dúvidas? Eu tenho várias. e-mail wanderley@caloni.com.br twitter saite

Notas do Editor

  1. Quando o CriticalService é carregado tanto o EXE quanto a DLL EvenOdd compartilham o mesmo espaço de endereçamento. A tabela de importações do PE CriticalService.exe contém uma referência dentro da função DoProcess para a função IsEven que está localizada na DLL. No momento em que o loader/carregador do sistema operacional monta o espaço de memória para execução do processo ele faz essa ligação entre eles.
  2. O que existe dentro da função IsEven compilada, como tudo em computação digital, são zeros e uns. Esses zeros e uns podem ser interpretados de diversas formas: binário, hexadecimal, string, double. O processador e o depurador (WinDbg) enxergam o que o compilador montou: uma sequência de instruções em assembly.
  3. O que existe dentro da função IsEven compilada, como tudo em computação digital, são zeros e uns. Esses zeros e uns podem ser interpretados de diversas formas: binário, hexadecimal, string, double. O processador e o depurador (WinDbg) enxergam o que o compilador montou: uma sequência de instruções em assembly.
  4. Depois que o processo é carregado e já está executando nada impede que uma nova DLL seja carregada em seu espaço de memória. A partir do carregamento de uma nova versão da mesma DLL podemos modificar as chamadas das funções que utilizam a versão original. Essa modificação é feita em memória apenas, mas podemos renomear as DLLs para que novas instâncias do mesmo processo já carreguem a DLL atualizada.
  5. RmThread é um projeto de algumas décadas atrás que fiz para execução remota de código e que acabou virando um artigo no CodeProject.
  6. A função da RmThread é simplesmente localizar o processo-alvo e obter um handle que permite com que ele possa criar uma thread remota com o ponto inicial na função API LoadLibrary, passando como parâmetro o endereço da nova DLL. Dessa forma a DLL atualizada pode ser carregada no espaço de memória do processo CriticalService.
  7. Depois que o processo é carregado e já está executando nada impede que uma nova DLL seja carregada em seu espaço de memória. A partir do carregamento de uma nova versão da mesma DLL podemos modificar as chamadas das funções que utilizam a versão original. Essa modificação é feita em memória apenas, mas podemos renomear as DLLs para que novas instâncias do mesmo processo já carreguem a DLL atualizada.
  8. Depois que o processo é carregado e já está executando nada impede que uma nova DLL seja carregada em seu espaço de memória. A partir do carregamento de uma nova versão da mesma DLL podemos modificar as chamadas das funções que utilizam a versão original. Essa modificação é feita em memória apenas, mas podemos renomear as DLLs para que novas instâncias do mesmo processo já carreguem a DLL atualizada.
  9. Sem um dicionário, uma DLL e um EXE são apenas coleções de bits e bytes. A função de um arquivo PDB, ou arquivo de símbolos, é prover informações de tipos, objetos e funções para que o depurador consiga visualizar a localização de cada elemento de um arquivo binário.