SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
Engenharia Reversa
     no Linux


   Fernando Mercês
  fernando@mentebinaria.com.br
O que é
Engenharia
 Reversa?
IO que é Engenharia Reversa?

  Engenharia Reversa (ER), em inglês Reversing Engineering
(RE), é uma técnica, por vezes definida como arte,de se
entender como um dispositivo ou software funciona sem
possuir seu esquema/código-fonte.

  No caso de software, é útil para estudar como os programas
executam as rotinas e se comportam no sistema, resolver
problemas com softwares mal feitos ou não mais suportados,
portar drivers de dispositivos, dentre outros.


           Foi (e ainda é) amplamente utilizada para
           o desenvolvimento de drivers no Linux.
E isso é crime?
E isso é crime?

  Depende de como utilizada. Obter o código-fonte de
softwares proprietários sem autorização é crime. Alterá-los
também. Essa técnica é conhecida como cracking e encarada
como crime em vários países, inclusive no nosso.
Por que reverter
   no Linux?
IPor que reverter no Linux?

Aprendizado de como os programas se comportam no
sistema.

Resolução de problemas (troubeshooting).

Adaptação de drivers de dispositivos.

Análise de programas desconhecidos.

Criar outro programa compatível com o formato ou
protocolo utilizado pelo que sofrerá a ER
IPor que reverter no Linux?

Adicionar ou remover funções de programas.

Descobrir funções não documentadas de programas.

Recriar o código-fonte do programa.

Documentar o comportamento do programa, para
programas sem documentação.
Arquivos binários
Arquivos binários

Como o próprio nome sugere, um arquivo binário é um
conjuntos de bits.

Seu formato deve ser especificado e conhecido pelo
sistema operacional.

Suas instruções ASM e arquitetura devem ser conhecidas
pelo microprocessador.

Editável como qualquer outro arquivo.

Compactável e criptografável com métodos especiais.
O formato ELF

  Este é o formato padrão de arquivos executáveis, bibliotecas
e outros arquivos binários nos sistemas GNU/Linux, originário
do System V.

  ELF é acrônimo de Executable and Linkable Format
(Formato linkável e executável).




            No Windows o formato de arquivos
            executáveis é o PE (Portable Executable),
            conhecido também por MZ.
O formato ELF

Program header table
especifica os segmentos.

Section header table
especifica as seções.

As seções pertencem aos
segmentos.

Os bytes fora das seções
são chamados bytes
órfãos (orphan bytes).
Formato ELF
Assembly (ASM)

Linguagem de máquina.

Os fabricantes de microprocessadores fornecem
documentação das instruções ASM aceitas por sua
arquitetura.

Existem duas principais representações da linguagem
Assembly, a Intel e a AT&T. O Linux costuma trabalhar com
a segunda.

Toda instrução ASM tem seu equivalente em hexadecimal,
que por sua vez, possui seu equivalente em binário mas
nem sempre em ASCII.
Ferramentas para
  ER no Linux
Ferramentas para ER no Linux

  Antes de utilizar as ferramentas, vamos compilar um
pequeno software no Linux, em C.



              #include <stdio.h>

              int main() {
                 printf("ENSOL");
                 return 0;
              }
Ferramentas para ER no Linux

strings » localiza textos imprimíveis em arquivos.

readelf » exibe informações sobre binários ELF.

hexdump » exibe a representação em hexadecimal de
arquivos.

objdump » exibe a estrutura de binários ELF.

strace » exibe as chamadas de sistema que um binário faz
e seus retornos.

hte » editor de arquivos executáveis.
Ferramentas para
  ER no Linux
Ferramentas para ER no Linux

  Para a demonstração do strace, vamos escrever um novo
programa, que tenta apagar um arquivo.



         #include <stdio.h>

         int main() {
            remove("/sbin/ifconfig");
            return 0;
         }
strace
Ferramentas para ER no Linux

  Para a próxima demonstração, vamos incrementar nosso
programa hello.c com um condicional.

         #include <stdio.h>

         int main() {
            int i=1;
            if (i=1)
               printf("ENSOL");
            else
               printf("ENLUA");
            return 0;
         }
Byte patching com
      o hte
Packers
Packers

Comprime o arquivo binário.

Injeta código para descompressão em memória.

Protege o software contra disassemblers.

São removíveis (unpacking).
UPX
Debugging
O debugger

Permite executar de um binário passo-a-passo, para
analisar seu comportamento.

Aliado a um disassembler, permite alterações em tempo de
execução (runtime) no código.

É possível setar breakpoints para a execução parar. Isto
facilita a análise, principalmente num arquivo grande.
O gdb (GNU Debugger)

Debugger em modo texto com bons recursos.

Necessita que o software tenha sido compilado com seus
symbols, para um debugging eficiente.

Possui implementações gráficas (GUI) disponíveis nos
repositórios das distros.
Demonstração
    gdb
Para saber mais...
HoneyNet Project
http://honeynet.org

Introduction to Reversing Engineering in Linux
www.acm.uiuc.edu/sigmil/RevEng

Linux Assembly
http://asm.sourceforge.net
www.tldp.org/HOWTO/Assembly-HOWTO

Fenris RE package
http://lcamtuf.coredump.cx/fenris

Mente Binária
www.mentebinaria.com.br
Perguntas /
Comentários ?
Obrigado!



 Fernando Mercês
fernando@mentebinaria.com.br

Mais conteúdo relacionado

Mais procurados

Laboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em discoLaboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em discoAlex Camargo
 
Cap1 exercicios comandos linux resolucao part i
Cap1 exercicios comandos linux   resolucao part iCap1 exercicios comandos linux   resolucao part i
Cap1 exercicios comandos linux resolucao part iportal_Do_estudante
 
Arquivos de Inicialização do Linux
Arquivos de Inicialização do LinuxArquivos de Inicialização do Linux
Arquivos de Inicialização do LinuxIvani Nascimento
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcadotdc-globalcode
 
Android Core Aula 4 - Embarcando android em dispositivos físicos
Android Core Aula 4 - Embarcando android em dispositivos físicosAndroid Core Aula 4 - Embarcando android em dispositivos físicos
Android Core Aula 4 - Embarcando android em dispositivos físicosFelipe Silveira
 
Redirecionamento, pipes e processos linux
Redirecionamento, pipes e processos   linuxRedirecionamento, pipes e processos   linux
Redirecionamento, pipes e processos linuxFábio dos Reis
 
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteComo Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteTchelinux
 
Unix - Sistemas Operacionais
Unix - Sistemas OperacionaisUnix - Sistemas Operacionais
Unix - Sistemas OperacionaisJunior Silva
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsHelio Colombe
 
A lógica do Python e seus termos
A lógica do Python e seus termosA lógica do Python e seus termos
A lógica do Python e seus termosValore I/O
 
Sistema Operacional GNU/Linux
Sistema Operacional GNU/LinuxSistema Operacional GNU/Linux
Sistema Operacional GNU/LinuxPedro Neto
 
Programação para Kernel Linux - Parte 1
Programação para Kernel Linux - Parte 1Programação para Kernel Linux - Parte 1
Programação para Kernel Linux - Parte 1Ivo Calado
 
Sistemas operativos - Arch Linux
Sistemas operativos  - Arch LinuxSistemas operativos  - Arch Linux
Sistemas operativos - Arch LinuxDanielAraujo224
 

Mais procurados (20)

Desenvolvimento de malware
Desenvolvimento de malwareDesenvolvimento de malware
Desenvolvimento de malware
 
Laboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em discoLaboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em disco
 
Cap1 exercicios comandos linux resolucao part i
Cap1 exercicios comandos linux   resolucao part iCap1 exercicios comandos linux   resolucao part i
Cap1 exercicios comandos linux resolucao part i
 
Soa#cap4.1 gestor de pacotes
Soa#cap4.1   gestor de pacotesSoa#cap4.1   gestor de pacotes
Soa#cap4.1 gestor de pacotes
 
Arquivos de Inicialização do Linux
Arquivos de Inicialização do LinuxArquivos de Inicialização do Linux
Arquivos de Inicialização do Linux
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
 
Android Core Aula 4 - Embarcando android em dispositivos físicos
Android Core Aula 4 - Embarcando android em dispositivos físicosAndroid Core Aula 4 - Embarcando android em dispositivos físicos
Android Core Aula 4 - Embarcando android em dispositivos físicos
 
Introdução Linux
Introdução LinuxIntrodução Linux
Introdução Linux
 
Redirecionamento, pipes e processos linux
Redirecionamento, pipes e processos   linuxRedirecionamento, pipes e processos   linux
Redirecionamento, pipes e processos linux
 
Aprendendo linux
Aprendendo linuxAprendendo linux
Aprendendo linux
 
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteComo Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
 
Unix - Sistemas Operacionais
Unix - Sistemas OperacionaisUnix - Sistemas Operacionais
Unix - Sistemas Operacionais
 
Python, CPython, Pythonico, Cython
Python, CPython, Pythonico, CythonPython, CPython, Pythonico, Cython
Python, CPython, Pythonico, Cython
 
Estrutura de diretorios
Estrutura de diretoriosEstrutura de diretorios
Estrutura de diretorios
 
Cap1 exercicios comandos linux
Cap1 exercicios comandos linuxCap1 exercicios comandos linux
Cap1 exercicios comandos linux
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
A lógica do Python e seus termos
A lógica do Python e seus termosA lógica do Python e seus termos
A lógica do Python e seus termos
 
Sistema Operacional GNU/Linux
Sistema Operacional GNU/LinuxSistema Operacional GNU/Linux
Sistema Operacional GNU/Linux
 
Programação para Kernel Linux - Parte 1
Programação para Kernel Linux - Parte 1Programação para Kernel Linux - Parte 1
Programação para Kernel Linux - Parte 1
 
Sistemas operativos - Arch Linux
Sistemas operativos  - Arch LinuxSistemas operativos  - Arch Linux
Sistemas operativos - Arch Linux
 

Destaque

Engenharia Reversa e Reengenharia Software
Engenharia Reversa e Reengenharia SoftwareEngenharia Reversa e Reengenharia Software
Engenharia Reversa e Reengenharia Softwareelliando dias
 
Construindo um analisador de executáveis
Construindo um analisador de executáveisConstruindo um analisador de executáveis
Construindo um analisador de executáveisFernando Mercês
 
(Un)Protecting USB Storage Media
(Un)Protecting USB Storage Media(Un)Protecting USB Storage Media
(Un)Protecting USB Storage MediaFernando Mercês
 
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-Middle
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-MiddleFISL11: Protegendo webservers na intranet contra ataques Man-In-The-Middle
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-MiddleFernando Mercês
 
FISL11: Análise de binários ELF
FISL11: Análise de binários ELFFISL11: Análise de binários ELF
FISL11: Análise de binários ELFFernando Mercês
 
SlackShow 2010: Monitorando servidores com o Twitter
SlackShow 2010: Monitorando servidores com o TwitterSlackShow 2010: Monitorando servidores com o Twitter
SlackShow 2010: Monitorando servidores com o TwitterFernando Mercês
 
Criando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosCriando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosFernando Mercês
 
Disparando eventos com Asterisk
Disparando eventos com AsteriskDisparando eventos com Asterisk
Disparando eventos com AsteriskFernando Mercês
 
Engenharia Reversa para Principiantes
Engenharia Reversa para PrincipiantesEngenharia Reversa para Principiantes
Engenharia Reversa para PrincipiantesWanderley Caloni
 

Destaque (14)

Engenharia Reversa e Reengenharia Software
Engenharia Reversa e Reengenharia SoftwareEngenharia Reversa e Reengenharia Software
Engenharia Reversa e Reengenharia Software
 
Webcast Luiz Vieira criptografia on-the-fly com software livre
Webcast Luiz Vieira criptografia on-the-fly com software livreWebcast Luiz Vieira criptografia on-the-fly com software livre
Webcast Luiz Vieira criptografia on-the-fly com software livre
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
 
Construindo um analisador de executáveis
Construindo um analisador de executáveisConstruindo um analisador de executáveis
Construindo um analisador de executáveis
 
(Un)Protecting USB Storage Media
(Un)Protecting USB Storage Media(Un)Protecting USB Storage Media
(Un)Protecting USB Storage Media
 
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-Middle
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-MiddleFISL11: Protegendo webservers na intranet contra ataques Man-In-The-Middle
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-Middle
 
Entendendo os pacotes DEB
Entendendo os pacotes DEBEntendendo os pacotes DEB
Entendendo os pacotes DEB
 
FISL11: Análise de binários ELF
FISL11: Análise de binários ELFFISL11: Análise de binários ELF
FISL11: Análise de binários ELF
 
SlackShow 2010: Monitorando servidores com o Twitter
SlackShow 2010: Monitorando servidores com o TwitterSlackShow 2010: Monitorando servidores com o Twitter
SlackShow 2010: Monitorando servidores com o Twitter
 
Criando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosCriando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutos
 
Disparando eventos com Asterisk
Disparando eventos com AsteriskDisparando eventos com Asterisk
Disparando eventos com Asterisk
 
Webgoat como ferramenta de aprendizado
Webgoat como ferramenta de aprendizadoWebgoat como ferramenta de aprendizado
Webgoat como ferramenta de aprendizado
 
Engenharia Reversa para Principiantes
Engenharia Reversa para PrincipiantesEngenharia Reversa para Principiantes
Engenharia Reversa para Principiantes
 
Engenharia reversa
Engenharia reversaEngenharia reversa
Engenharia reversa
 

Semelhante a Engenharia Reversa no Linux

Aula 03 isc -softwares-hardwares-arquiteturas
Aula 03   isc -softwares-hardwares-arquiteturasAula 03   isc -softwares-hardwares-arquiteturas
Aula 03 isc -softwares-hardwares-arquiteturasFábio Andrade
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresLuis Ferreira
 
Programação de Microprocessadores
Programação de MicroprocessadoresProgramação de Microprocessadores
Programação de MicroprocessadoresDiogo Silva
 
Sistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando ProgramasSistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando ProgramasLuiz Arthur
 
Noções Básicas do Software dos Computadores Digitais
Noções Básicas do Software dos Computadores DigitaisNoções Básicas do Software dos Computadores Digitais
Noções Básicas do Software dos Computadores DigitaisHenry Raúl González Brito
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem corvel
 
Sistemas Operacionais.pptx
Sistemas Operacionais.pptxSistemas Operacionais.pptx
Sistemas Operacionais.pptxstenio medeiros
 
Engenharia reversa
Engenharia reversaEngenharia reversa
Engenharia reversaEMSNEWS
 
Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing Jorge Cardoso
 
Linguagem de programação
Linguagem de programaçãoLinguagem de programação
Linguagem de programaçãoSandro Lopes
 
ApresentaçãO2 Sistema Operacional
ApresentaçãO2  Sistema OperacionalApresentaçãO2  Sistema Operacional
ApresentaçãO2 Sistema OperacionalCláudia Costa
 
Engenharia rever sa mentebinaria
Engenharia rever sa   mentebinariaEngenharia rever sa   mentebinaria
Engenharia rever sa mentebinariaPatrese Renan
 
Sistemas logicos programaveis
Sistemas logicos programaveisSistemas logicos programaveis
Sistemas logicos programaveislaritha
 

Semelhante a Engenharia Reversa no Linux (20)

Aula 03 isc -softwares-hardwares-arquiteturas
Aula 03   isc -softwares-hardwares-arquiteturasAula 03   isc -softwares-hardwares-arquiteturas
Aula 03 isc -softwares-hardwares-arquiteturas
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
Programação de Microprocessadores
Programação de MicroprocessadoresProgramação de Microprocessadores
Programação de Microprocessadores
 
Sistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando ProgramasSistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando Programas
 
Noções Básicas do Software dos Computadores Digitais
Noções Básicas do Software dos Computadores DigitaisNoções Básicas do Software dos Computadores Digitais
Noções Básicas do Software dos Computadores Digitais
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Sistemas Operacionais.pptx
Sistemas Operacionais.pptxSistemas Operacionais.pptx
Sistemas Operacionais.pptx
 
Engenharia reversa
Engenharia reversaEngenharia reversa
Engenharia reversa
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Isc aula 7
Isc   aula 7Isc   aula 7
Isc aula 7
 
Hardware e sistemas operacionais
Hardware e sistemas operacionaisHardware e sistemas operacionais
Hardware e sistemas operacionais
 
Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing
 
Linguagem de programação
Linguagem de programaçãoLinguagem de programação
Linguagem de programação
 
Cygwin
CygwinCygwin
Cygwin
 
ApresentaçãO2 Sistema Operacional
ApresentaçãO2  Sistema OperacionalApresentaçãO2  Sistema Operacional
ApresentaçãO2 Sistema Operacional
 
Engenharia rever sa mentebinaria
Engenharia rever sa   mentebinariaEngenharia rever sa   mentebinaria
Engenharia rever sa mentebinaria
 
Sistemas logicos programaveis
Sistemas logicos programaveisSistemas logicos programaveis
Sistemas logicos programaveis
 
Software
SoftwareSoftware
Software
 
Ud2
Ud2Ud2
Ud2
 
Sistema operacional-1-ano-de-informatica-completa
Sistema operacional-1-ano-de-informatica-completaSistema operacional-1-ano-de-informatica-completa
Sistema operacional-1-ano-de-informatica-completa
 

Engenharia Reversa no Linux

  • 1. Engenharia Reversa no Linux Fernando Mercês fernando@mentebinaria.com.br
  • 3. IO que é Engenharia Reversa? Engenharia Reversa (ER), em inglês Reversing Engineering (RE), é uma técnica, por vezes definida como arte,de se entender como um dispositivo ou software funciona sem possuir seu esquema/código-fonte. No caso de software, é útil para estudar como os programas executam as rotinas e se comportam no sistema, resolver problemas com softwares mal feitos ou não mais suportados, portar drivers de dispositivos, dentre outros. Foi (e ainda é) amplamente utilizada para o desenvolvimento de drivers no Linux.
  • 4. E isso é crime?
  • 5. E isso é crime? Depende de como utilizada. Obter o código-fonte de softwares proprietários sem autorização é crime. Alterá-los também. Essa técnica é conhecida como cracking e encarada como crime em vários países, inclusive no nosso.
  • 6. Por que reverter no Linux?
  • 7. IPor que reverter no Linux? Aprendizado de como os programas se comportam no sistema. Resolução de problemas (troubeshooting). Adaptação de drivers de dispositivos. Análise de programas desconhecidos. Criar outro programa compatível com o formato ou protocolo utilizado pelo que sofrerá a ER
  • 8. IPor que reverter no Linux? Adicionar ou remover funções de programas. Descobrir funções não documentadas de programas. Recriar o código-fonte do programa. Documentar o comportamento do programa, para programas sem documentação.
  • 10. Arquivos binários Como o próprio nome sugere, um arquivo binário é um conjuntos de bits. Seu formato deve ser especificado e conhecido pelo sistema operacional. Suas instruções ASM e arquitetura devem ser conhecidas pelo microprocessador. Editável como qualquer outro arquivo. Compactável e criptografável com métodos especiais.
  • 11. O formato ELF Este é o formato padrão de arquivos executáveis, bibliotecas e outros arquivos binários nos sistemas GNU/Linux, originário do System V. ELF é acrônimo de Executable and Linkable Format (Formato linkável e executável). No Windows o formato de arquivos executáveis é o PE (Portable Executable), conhecido também por MZ.
  • 12. O formato ELF Program header table especifica os segmentos. Section header table especifica as seções. As seções pertencem aos segmentos. Os bytes fora das seções são chamados bytes órfãos (orphan bytes).
  • 14. Assembly (ASM) Linguagem de máquina. Os fabricantes de microprocessadores fornecem documentação das instruções ASM aceitas por sua arquitetura. Existem duas principais representações da linguagem Assembly, a Intel e a AT&T. O Linux costuma trabalhar com a segunda. Toda instrução ASM tem seu equivalente em hexadecimal, que por sua vez, possui seu equivalente em binário mas nem sempre em ASCII.
  • 15. Ferramentas para ER no Linux
  • 16. Ferramentas para ER no Linux Antes de utilizar as ferramentas, vamos compilar um pequeno software no Linux, em C. #include <stdio.h> int main() { printf("ENSOL"); return 0; }
  • 17. Ferramentas para ER no Linux strings » localiza textos imprimíveis em arquivos. readelf » exibe informações sobre binários ELF. hexdump » exibe a representação em hexadecimal de arquivos. objdump » exibe a estrutura de binários ELF. strace » exibe as chamadas de sistema que um binário faz e seus retornos. hte » editor de arquivos executáveis.
  • 18. Ferramentas para ER no Linux
  • 19. Ferramentas para ER no Linux Para a demonstração do strace, vamos escrever um novo programa, que tenta apagar um arquivo. #include <stdio.h> int main() { remove("/sbin/ifconfig"); return 0; }
  • 21. Ferramentas para ER no Linux Para a próxima demonstração, vamos incrementar nosso programa hello.c com um condicional. #include <stdio.h> int main() { int i=1; if (i=1) printf("ENSOL"); else printf("ENLUA"); return 0; }
  • 24. Packers Comprime o arquivo binário. Injeta código para descompressão em memória. Protege o software contra disassemblers. São removíveis (unpacking).
  • 25. UPX
  • 27. O debugger Permite executar de um binário passo-a-passo, para analisar seu comportamento. Aliado a um disassembler, permite alterações em tempo de execução (runtime) no código. É possível setar breakpoints para a execução parar. Isto facilita a análise, principalmente num arquivo grande.
  • 28. O gdb (GNU Debugger) Debugger em modo texto com bons recursos. Necessita que o software tenha sido compilado com seus symbols, para um debugging eficiente. Possui implementações gráficas (GUI) disponíveis nos repositórios das distros.
  • 30. Para saber mais... HoneyNet Project http://honeynet.org Introduction to Reversing Engineering in Linux www.acm.uiuc.edu/sigmil/RevEng Linux Assembly http://asm.sourceforge.net www.tldp.org/HOWTO/Assembly-HOWTO Fenris RE package http://lcamtuf.coredump.cx/fenris Mente Binária www.mentebinaria.com.br