SlideShare uma empresa Scribd logo
1 de 36
Engenharia reversa para 
principiantes 
Conhecimentos e habilidades 
necessárias para iniciar-se na arte 
da escovação de bits 
v1 
Wanderley Caloni
Objetivos 
• Iniciante 
o Apontar caminhos de aprendizado 
• Intermediário 
o Preencher lacunas de conhecimento 
o Gerar dúvidas e questões para serem respondidas
O que é engenharia reversa 
Descobrir os princípios tecnológicos de um dispositivo, um 
objeto ou um sistema (programa). 
Sem palavras bonitas: descobrir como funciona.
Onde a engenharia reversa é usada 
• Empresas de antivírus (vacina) 
• Análise de vulnerabilidades (service-packs) 
• Debugging (e.g. blogue do Mark Russinovich) 
• Formatos proprietários (e.g. OpenOffice) 
• SOs fechados (e.g. projeto Wine)
Conhecimentos necessários 
• Programação 
o Conceitos básicos 
o APIs 
o Arquitetura
Conhecimentos necessários 
• Sistema operacional 
o Sistema de janelas 
o Processos e threads 
o Gerenciamento de memória
Conhecimentos necessários 
• Ferramentas 
o Depuradores 
o Disassemblers 
o Loggers
Programação 
• Conceitos básicos 
• APIs 
• Arquitetura
Conceitos básicos de programação
Conceitos básicos de programação 
• Aprenda lógica 
• Aprenda C 
o C Completo e Total (Schildt) 
o Treinamento em linguagem C (Mizrahi) 
o C - A Linguagem de Programação (R&K) 
• Programe 
o Programe 
 Programe
APIs
APIs 
• Aprenda a programar para seu SO preferido 
o Programming Windows (Petzold) 
o Advanced Programming In The UNIX Environment 
(Stevens) 
• Use a documentação como referência 
o MSDN 
• Programe 
o Programe 
 Programe
Arquitetura
Arquitetura 
• Aprenda os conceitos básicos da arquitetura preferida 
o Introdução a microprocessadores 
o Guia do Programador para IBM PC (Norton) 
• Memória e pilha 
• Assembly 
o The Art of Assembly Language (Hyde) 
• Faça programas simples em assembly
Sistema operacional 
• Arquitetura 
• Sistema de janelas 
• Processos e threads 
• Gerenciamento de memória
Arquitetura do sistema operacional 
• Divisão modular do sistema operacional 
o Microsoft Windows Internals (Russinovich) 
• Testes no funcionamento interno do SO 
o Ferramentas da Sysinternals (sysinternals.com) 
• Funcionamento de drivers 
o DriverEntry.com.br
Sistema de janelas 
Cada sessão possui d desktops e cada desktop possui w 
janelas. Cada sessão possui p processos, que possuem n 
threads, que controlam w janelas.
Sistema de janelas
Sistema de janelas 
• Programar para Windows 
o Programming Windows (Petzold) 
• Testar relação e mensagens entre janelas e threads 
o Ferramenta Spy++ (Microsoft Visual Studio)
Processos e threads 
• Um processo é um espaço de memória no sistema que 
contém uma ou mais linhas de execução (thread). 
• Uma thread é uma linha de execução que roda no contexto 
de um determinado processo.
Processos de um mesmo executável
Criação de um processo
Gerenciamento de memória 
• É função do sistema operacional gerenciar a memória 
física e torná-la disponível para as aplicações. 
• A visão de uma aplicação quanto à memória se trata de 
uma abstração chamada de memória virtual.
Gerenciamento de memória
Gerenciamento de memória 
Um endereço virtual é um índice que se traduz em um bloco de 
memória física alocada.
Gerenciamento de memória
Gerenciamento de memória 
• Mais informações: 
o 1bit.com.br (palestra "Por dentro do Windows: 
Gerenciamento de Memória")
Ferramentas 
• Depuradores 
o WinDbg 
o OllyDbg 
• Disassemblers 
o IDA 
o OllyDbg 
• Loggers 
o File Monitor 
o Registry Monitor 
o Process Monitor 
o Adicionais 
o HxD 
o Process Explorer
WinDbg
WinDbg 
• Vem com o pacote "Debugging Tools" 
• Interface amigável para depuradores console 
• Depura kernel mode (núcleo do SO) 
• Extensões poderosas
IDA
IDA 
• Disassembler estático e dinâmico 
• Analisa código de acordo com chamadas da API 
• Facilita reconstrução de código 
• Cria patches (remendos para o executável original) 
• Gera gráfico de chamadas
Process Monitor
Process Monitor 
• Monitora registro, arquivos e processos 
• Possui filtros extremamente poderosos 
• Consegue monitorar boot do SO
Tarefas de aprimoramento 
• Resolver problemas em seu sistema operacional 
o Travamento de programas 
o Lentidão não esperada 
o Crash do SO 
• Quebrar proteção de programas (para aprendizado) 
o Antidebugging 
o Telas com senha 
o Licenciamento 
• Entender funcionamento de vírus 
o Fontes de vírus conhecidos 
o Ataques recebidos por email 
o Desenvolvimento de ataques (para aprendizado) 
• Faça você mesmo (não espere por ajuda)
Dúvidas? 
http://www.caloni.com.br/blog 
2007-10-10

Mais conteúdo relacionado

Mais procurados

Documentação
DocumentaçãoDocumentação
Documentação
Luiz China
 
Aula 03 de engenharia de software uespi 2011-1
Aula 03 de engenharia de software uespi 2011-1Aula 03 de engenharia de software uespi 2011-1
Aula 03 de engenharia de software uespi 2011-1
Erivelton Silva Rocha
 
Introducao a analise de testes de softwares
Introducao a analise de testes de softwaresIntroducao a analise de testes de softwares
Introducao a analise de testes de softwares
Intellecta
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de Software
Cloves da Rocha
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geral
paulo peres
 

Mais procurados (20)

Documentação
DocumentaçãoDocumentação
Documentação
 
Engenharia de Software - Unimep/Pronatec - Aula 2
Engenharia de Software - Unimep/Pronatec - Aula 2Engenharia de Software - Unimep/Pronatec - Aula 2
Engenharia de Software - Unimep/Pronatec - Aula 2
 
[CEFETMG][ESw] Aula 2 - Processos de software
[CEFETMG][ESw] Aula 2 - Processos de software[CEFETMG][ESw] Aula 2 - Processos de software
[CEFETMG][ESw] Aula 2 - Processos de software
 
Aula 03 de engenharia de software uespi 2011-1
Aula 03 de engenharia de software uespi 2011-1Aula 03 de engenharia de software uespi 2011-1
Aula 03 de engenharia de software uespi 2011-1
 
Teste de software - Processo de Verificação e Validação
Teste de software - Processo de Verificação e ValidaçãoTeste de software - Processo de Verificação e Validação
Teste de software - Processo de Verificação e Validação
 
Introducao a analise de testes de softwares
Introducao a analise de testes de softwaresIntroducao a analise de testes de softwares
Introducao a analise de testes de softwares
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de Software
 
Processo de software individual
Processo de software individualProcesso de software individual
Processo de software individual
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de Software
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geral
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Testes de software
Testes de softwareTestes de software
Testes de software
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Apostila s7
Apostila s7Apostila s7
Apostila s7
 
Testes de Caixa Branca e Métricas de Código
Testes de Caixa Branca e Métricas de CódigoTestes de Caixa Branca e Métricas de Código
Testes de Caixa Branca e Métricas de Código
 
Teste de Software
Teste de SoftwareTeste de Software
Teste de Software
 
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
 
Testes de Software - Fundamentos
Testes de Software - FundamentosTestes de Software - Fundamentos
Testes de Software - Fundamentos
 
Teste Unitários e TDD
Teste Unitários e TDDTeste Unitários e TDD
Teste Unitários e TDD
 

Destaque (12)

Entendendo a Compilação
Entendendo a CompilaçãoEntendendo a Compilação
Entendendo a Compilação
 
Palestra 7 - Aplicações tecnológicas de engenharia reversa e prototipagem
Palestra 7 - Aplicações tecnológicas de engenharia reversa e prototipagemPalestra 7 - Aplicações tecnológicas de engenharia reversa e prototipagem
Palestra 7 - Aplicações tecnológicas de engenharia reversa e prototipagem
 
Palestra - Introdução à Engenharia Reversa
Palestra - Introdução à Engenharia ReversaPalestra - Introdução à Engenharia Reversa
Palestra - Introdução à Engenharia Reversa
 
Workshop de Quiromancia de 4 horas
Workshop de Quiromancia de 4 horasWorkshop de Quiromancia de 4 horas
Workshop de Quiromancia de 4 horas
 
A força dos relacionamentos afetivos em 2012
A força dos relacionamentos afetivos em 2012A força dos relacionamentos afetivos em 2012
A força dos relacionamentos afetivos em 2012
 
Engenharia Reversa no Linux
Engenharia Reversa no LinuxEngenharia Reversa no Linux
Engenharia Reversa no Linux
 
Limpeza e proteção de ambientes com o simbolismo de 2013
Limpeza e proteção de ambientes com o simbolismo de 2013Limpeza e proteção de ambientes com o simbolismo de 2013
Limpeza e proteção de ambientes com o simbolismo de 2013
 
Removal of boron from aqueous solution using reverse osmosis
Removal of boron from aqueous solution using reverse osmosisRemoval of boron from aqueous solution using reverse osmosis
Removal of boron from aqueous solution using reverse osmosis
 
Formacao dos 7 raios construtores
Formacao dos 7 raios construtoresFormacao dos 7 raios construtores
Formacao dos 7 raios construtores
 
Tarot jogo 12 setores
Tarot  jogo 12 setoresTarot  jogo 12 setores
Tarot jogo 12 setores
 
Musicoterapia
MusicoterapiaMusicoterapia
Musicoterapia
 
Recent Advancement of CNC Technology
Recent Advancement of CNC TechnologyRecent Advancement of CNC Technology
Recent Advancement of CNC Technology
 

Semelhante a Engenharia Reversa para Principiantes

Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé LeiteComo ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Tchelinux
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
Ricardo Guerra Freitas
 
Aula 02 informática aplicada - sistemas operacionais
Aula 02  informática aplicada - sistemas operacionaisAula 02  informática aplicada - sistemas operacionais
Aula 02 informática aplicada - sistemas operacionais
Robson Ferreira
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
Heider Lopes
 

Semelhante a Engenharia Reversa para Principiantes (20)

Arquitetura de Computadores - Lecom - UFMG
Arquitetura de Computadores - Lecom - UFMGArquitetura de Computadores - Lecom - UFMG
Arquitetura de Computadores - Lecom - UFMG
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
 
1 - introducao.pdf
1 - introducao.pdf1 - introducao.pdf
1 - introducao.pdf
 
SonarQube
SonarQubeSonarQube
SonarQube
 
SNMP - Rafael Rodriques
SNMP - Rafael RodriquesSNMP - Rafael Rodriques
SNMP - Rafael Rodriques
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011
 
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataformaAndroid Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
 
Csharp
CsharpCsharp
Csharp
 
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé LeiteComo ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
 
Práticas de Desenvolvimento de Software
Práticas de Desenvolvimento de SoftwarePráticas de Desenvolvimento de Software
Práticas de Desenvolvimento de Software
 
Módulo 2 - Microsoft Windows 7
Módulo 2 - Microsoft Windows 7Módulo 2 - Microsoft Windows 7
Módulo 2 - Microsoft Windows 7
 
Aula1 microsoft
Aula1 microsoftAula1 microsoft
Aula1 microsoft
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Webinar: Debugging em Linux embarcado
Webinar: Debugging em Linux embarcadoWebinar: Debugging em Linux embarcado
Webinar: Debugging em Linux embarcado
 
Informática para Internet - Informática Aplicada - Aula 10
Informática para Internet - Informática Aplicada - Aula 10Informática para Internet - Informática Aplicada - Aula 10
Informática para Internet - Informática Aplicada - Aula 10
 
03 - Conceitos de Software.pdf
03 - Conceitos de Software.pdf03 - Conceitos de Software.pdf
03 - Conceitos de Software.pdf
 
Aula 02 informática aplicada - sistemas operacionais
Aula 02  informática aplicada - sistemas operacionaisAula 02  informática aplicada - sistemas operacionais
Aula 02 informática aplicada - sistemas operacionais
 
ASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e AzureASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e Azure
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
 

Mais de Wanderley Caloni

Mais de Wanderley Caloni (10)

Co co-co-co-co-corrotinas
Co co-co-co-co-corrotinasCo co-co-co-co-corrotinas
Co co-co-co-co-corrotinas
 
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
 
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
 
Patch de Emergencia
Patch de EmergenciaPatch de Emergencia
Patch de Emergencia
 

Engenharia Reversa para Principiantes

  • 1. Engenharia reversa para principiantes Conhecimentos e habilidades necessárias para iniciar-se na arte da escovação de bits v1 Wanderley Caloni
  • 2. Objetivos • Iniciante o Apontar caminhos de aprendizado • Intermediário o Preencher lacunas de conhecimento o Gerar dúvidas e questões para serem respondidas
  • 3. O que é engenharia reversa Descobrir os princípios tecnológicos de um dispositivo, um objeto ou um sistema (programa). Sem palavras bonitas: descobrir como funciona.
  • 4. Onde a engenharia reversa é usada • Empresas de antivírus (vacina) • Análise de vulnerabilidades (service-packs) • Debugging (e.g. blogue do Mark Russinovich) • Formatos proprietários (e.g. OpenOffice) • SOs fechados (e.g. projeto Wine)
  • 5. Conhecimentos necessários • Programação o Conceitos básicos o APIs o Arquitetura
  • 6. Conhecimentos necessários • Sistema operacional o Sistema de janelas o Processos e threads o Gerenciamento de memória
  • 7. Conhecimentos necessários • Ferramentas o Depuradores o Disassemblers o Loggers
  • 8. Programação • Conceitos básicos • APIs • Arquitetura
  • 9. Conceitos básicos de programação
  • 10. Conceitos básicos de programação • Aprenda lógica • Aprenda C o C Completo e Total (Schildt) o Treinamento em linguagem C (Mizrahi) o C - A Linguagem de Programação (R&K) • Programe o Programe  Programe
  • 11. APIs
  • 12. APIs • Aprenda a programar para seu SO preferido o Programming Windows (Petzold) o Advanced Programming In The UNIX Environment (Stevens) • Use a documentação como referência o MSDN • Programe o Programe  Programe
  • 14. Arquitetura • Aprenda os conceitos básicos da arquitetura preferida o Introdução a microprocessadores o Guia do Programador para IBM PC (Norton) • Memória e pilha • Assembly o The Art of Assembly Language (Hyde) • Faça programas simples em assembly
  • 15. Sistema operacional • Arquitetura • Sistema de janelas • Processos e threads • Gerenciamento de memória
  • 16. Arquitetura do sistema operacional • Divisão modular do sistema operacional o Microsoft Windows Internals (Russinovich) • Testes no funcionamento interno do SO o Ferramentas da Sysinternals (sysinternals.com) • Funcionamento de drivers o DriverEntry.com.br
  • 17. Sistema de janelas Cada sessão possui d desktops e cada desktop possui w janelas. Cada sessão possui p processos, que possuem n threads, que controlam w janelas.
  • 19. Sistema de janelas • Programar para Windows o Programming Windows (Petzold) • Testar relação e mensagens entre janelas e threads o Ferramenta Spy++ (Microsoft Visual Studio)
  • 20. Processos e threads • Um processo é um espaço de memória no sistema que contém uma ou mais linhas de execução (thread). • Uma thread é uma linha de execução que roda no contexto de um determinado processo.
  • 21. Processos de um mesmo executável
  • 22. Criação de um processo
  • 23. Gerenciamento de memória • É função do sistema operacional gerenciar a memória física e torná-la disponível para as aplicações. • A visão de uma aplicação quanto à memória se trata de uma abstração chamada de memória virtual.
  • 25. Gerenciamento de memória Um endereço virtual é um índice que se traduz em um bloco de memória física alocada.
  • 27. Gerenciamento de memória • Mais informações: o 1bit.com.br (palestra "Por dentro do Windows: Gerenciamento de Memória")
  • 28. Ferramentas • Depuradores o WinDbg o OllyDbg • Disassemblers o IDA o OllyDbg • Loggers o File Monitor o Registry Monitor o Process Monitor o Adicionais o HxD o Process Explorer
  • 30. WinDbg • Vem com o pacote "Debugging Tools" • Interface amigável para depuradores console • Depura kernel mode (núcleo do SO) • Extensões poderosas
  • 31. IDA
  • 32. IDA • Disassembler estático e dinâmico • Analisa código de acordo com chamadas da API • Facilita reconstrução de código • Cria patches (remendos para o executável original) • Gera gráfico de chamadas
  • 34. Process Monitor • Monitora registro, arquivos e processos • Possui filtros extremamente poderosos • Consegue monitorar boot do SO
  • 35. Tarefas de aprimoramento • Resolver problemas em seu sistema operacional o Travamento de programas o Lentidão não esperada o Crash do SO • Quebrar proteção de programas (para aprendizado) o Antidebugging o Telas com senha o Licenciamento • Entender funcionamento de vírus o Fontes de vírus conhecidos o Ataques recebidos por email o Desenvolvimento de ataques (para aprendizado) • Faça você mesmo (não espere por ajuda)