88
3.1 Técnicas e ferramentas de decompilação de programas. 3.2 Debuggers. Lúcio Camilo Perito Polícia Federal – 2013 Lúcio Camilo – [email protected]

Engenharia reversa

Embed Size (px)

Citation preview

Page 1: Engenharia reversa

3.1 Técnicas e ferramentas de decompilação de programas.3.2 Debuggers.

Lúcio Camilo

Perito Polícia Federal – 2013Lúcio Camilo – [email protected]

Page 2: Engenharia reversa

Bibliografia

● Engenharia Reversa para iniciantes: ○ http://docs.google.com/Present?

docid=ddd3j862_29grq4sx&fs=true● http://1bit.com.br/● http://www.caloni.com.br/blog● http://www.sawp.com.br/● Reversing: Secrets of Reverse Engineering,

Eldad Eilam

Lúcio Camilo

Page 3: Engenharia reversa

Lúcio Camilo

Contextualização

Decompilação ou Descompilação =

“produzir a partir de um executável um programa fonte em linguagem de alto-nível que, quando compilado, tem a mesma funcionalidade que o executável original”.

"realizar a operação inversa de um compilador, transformando código objeto em código fonte"

Engenharia Reversa = consiste em a partir de uma solução pronta, extrair todos os conceitos empregados para sua construção

Page 4: Engenharia reversa

Lúcio Camilo

O que é Engenharia Reversa?

● Processo de extrair conhecimento a partir de alguma coisa já criada.

● Similar à pesquisas cientifícas, porém na engenharia reversa trabalha-se com produtos fabricados pelos humanos e na pesquisa científica são fenômenos naturais.

● Utilizada para obter conhecimento perdido ou inexistente.

● "Dissecar" produtos e descobrir os segredos por trás destes.

Page 5: Engenharia reversa

Lúcio Camilo

Engenharia Reversa no Contexto de Software?

● Ao contrário dos demais processos de Engenharia Reversa, neste caso contamos apenas com a mente humana e uma CPU.

● Processo puramente virtual.

● Requer uma combinação de conhecimentos tais como programação, análise lógica, instruções de hardware entre outras.

Page 6: Engenharia reversa

Lúcio Camilo

Engenharia Reversa - Categorias

1. Segurançaa. Softwares Maliciosos

■ Utilizam engenharia reversa tanto para encontrar vulnerabilidades quanto para corrigir problemas (Empresas Antivirus).

b. Reversão de Algoritmos Criptográficosc. Direitos Autoraisd. Auditoria de Código Binário

■ Objetivam descobrir se o software apresenta algum risco de utilização

2. Desenvolvimento de Softwarea. Adquirir interoperabilidade com Software Proprietáriob. Desenvolvendo Softwares Competitivosc. Avaliar qualidade e robustez de softwares

Page 7: Engenharia reversa

● Análise Offline - Este tipo de análise não leva em consideração a execução do código. Muito utilizado para descobrir pedaços específicos do código, por exemplo locais aonde é feito a checagem de existência de licença ou de chave de registro.Observa-se apenas o código, e não o fluxo de dados do programa.

● Análise Online - Alguns casos quando o código sofre um tratamento para não ser visível através de engenharia reversa, a análise offline não produz resultados, sendo necessário a observação do código em execução.Através desta análise é possível descobrir o comportamento do programa e o fluxo de controle e dados existentes.

Lúcio Camilo

Métodos de Análise

Page 8: Engenharia reversa

● Disassemblers - ● Ferramentas mais importantes na análise

OFFLINE de código;● Decodificam o código binário em código

assembly (de acordo com a plataforma);● No assembly cada comando equivale a uma

instrução de computador;● Montador é o programa responsável por

converter o assembly em código de máquina.● Disassembler faz o trabalho inverso do

montador.

Lúcio Camilo

Ferramentas - Disassemblers

Page 9: Engenharia reversa

Lúcio Camilo

Assembly = Linguagem de ProgramaçãoAssembler = Compilador de Programas Assembly

Não Confundir !!!

Assembly não é uma linguagem apenas, é um conjunto de linguagens, aonde cada plataforma possui um conjunto específico de instruções Assembly que é um pouco diferente dos demais.

Page 10: Engenharia reversa

● Disassemblers○ IDA-PRO○ ILDasm

● Debuggers (Depuradores)○ User-Mode

■ OllyDbg■ WinDbg■ IDA PRO■ PEBrowse Professional Interative

○ Kernel Mode■ WinDbg■ Numega SoftIce■ Syser Debugger

Ferramentas

Page 11: Engenharia reversa

● Principal ferramenta utilizada para engenharia

reversa;

● Compõe uma série de ferramentas e sua interface

se assemelha a uma IDE;

● Suporta uma variedade de arquitetura de

processadores (IA-32, IA-64, Itanium, AMD64);

● Implementa todo o fluxograma de execução

baseado nas condições de desvio;

Lúcio Camilo

Ferramenta - Interative Disassembler - IDA PRO

Page 12: Engenharia reversa

● Ferramenta paga, com suporte a uma variedade

de arquivos executáveis.

● Produz gráficos que mostram quais funcões

chamam API`s ou funções internas

Lúcio Camilo

Ferramenta - Interative Disassembler - IDA PRO

Page 13: Engenharia reversa
Page 14: Engenharia reversa

● Disassembler para a Microsoft Intermediate

Language, que é a linguagem de baixo nível

utilizada em linguagens como .NET;

● Fundamental para reverter aplicações .NET;

Lúcio Camilo

Ferramenta - ILDasm

Page 15: Engenharia reversa

● Debuggers - ● Ferramentas utilizada para localizar e corrigir

erros do programa em tempo de execução;● Possibilita verificar comportamento do

programa em tempo de execução, tais como dados na memória, registradores e pilha de execução;

● Utilizada na análise ONLINE.● Podem ser divididos em USER-MODE ou

KERNEL-MODE.

Lúcio Camilo

Ferramentas - Debuggers

Page 16: Engenharia reversa

1. Poderosa Ferramenta Disassembler

2. Breakpoints de Software e Hardware

3. Visualização de Registro e Memória

4. Informações sobre processos

Lúcio Camilo

Funcionalidades - Debuggers

Page 17: Engenharia reversa

● User-Mode - ● Operam com restrição dentro do Sistema

Operacional;● Só podem analisar um processo por vez;● Não executam e não acessam

componentes do sistema operacional, tarefas administrativas ou dispositivos que utilizam drivers.

● Vantagem: Fácil configuração e utilização

Lúcio Camilo

Modo de Operação - Debuggers

Page 18: Engenharia reversa

● Debugger mais conhecido no mercado (user-

mode);

● Permite reescrever o código Assembly de um

programa e remontá-lo com um único clique;

● Permite identificar blocos de instruções, loops,

desvios, jumps e estruturas de códigos;

● Gratuito e atua em modo usuário;● Funciona como Debugger e Disassembler.

Lúcio Camilo

Ferramentas - OllyDbg

Page 19: Engenharia reversa
Page 20: Engenharia reversa

● Debugger distribuído pela Microsoft;

● Utilizado por usuários de Windows (grande

integração);

● Opera tanto em User-Mode quanto em Kernel

Mode, porém para ser executado em Kernel Mode

precisa ser em um sistema operacional separado

remotamente.

● Não permite alteração Online do código.

Lúcio Camilo

Ferramenta - WinDbg

Page 21: Engenharia reversa
Page 22: Engenharia reversa

● Oferece várias visões contendo informações

sobre o processo;

● Possue funcionalidades para programas .NET

Lúcio Camilo

Ferramenta - PEBrowse Professional Interative

Page 23: Engenharia reversa

● Kernel-Mode - ● Utilizado em programas que possuem

chamadas ao sistema operacional ou bibliotecas dinâmicas ou dispositivos de hardware;

● Permitem controle ilimitado sobre o binário analisado, permitindo um controle sobre todo o comportamento do sistema operacional;

● Utilizado principalmente por desenvolvedores e programadores de sistemas operacionais, de drivers ou componentes de SO;

● Risco de desestabilizar o SO.● Alguns podem oferecer funcionalidade user-

mode.Lúcio Camilo

Modo de Operação - Debuggers

Page 24: Engenharia reversa

● Debugger que atua em Kernel Mode;● Recomendado para desenvolvedores de Drivers

Windows;● Diferente das outras ferramentas que atuam em

modo kernel, possibilita fazer inspeção no SO local.

Lúcio Camilo

Ferramenta - SoftICE

Page 25: Engenharia reversa

Curiosidade: SoftICE -> ICE = In Circuit Emulator

Page 26: Engenharia reversa

● Debugger que atua em Kernel Mode e baseado no SoftIce.

● Recomendado para desenvolvedores de Drivers;

Lúcio Camilo

Ferramenta - Syser Debbuger

Page 27: Engenharia reversa

A utilizacão de debuggers de Kernel Mode possibilita a interrupção do Sistema Operacional de forma simples.A utilização de Ambientes virtuais é recomendada a fim de manter um sistema isolado e dedicado para o debugger.Através da simulação de hardwares é possível testar o programa em diferentes hardwares através dos ambientes virtuais.Facilita o Backup e a recuperação em caso de falha.

Lúcio Camilo

Ambiente Virtual

Page 28: Engenharia reversa

● Objetivam produzir um código tão alto nível quanto o código fonte original;

● Processo de compilação sempre remove alguma informação;

● O resultado da decompilação vai depender da tecnologia e da arquitetura utilizadas;

● Diferença entre Decompilador e Disassembler?

Lúcio Camilo

Decompiladores

Page 29: Engenharia reversa

● IA-32 (Intel Architecture 32 bits)○ Boomerang○ Andromeda○ DCC

● Java○ JAD

Lúcio Camilo

Decompiladores

Page 30: Engenharia reversa

Bônus

Ferramentas de Monitoração de SistemasTécnicas Anti Engenharia Reversa

Page 31: Engenharia reversa

● Observam os canais de I/O que existem entre a aplicação e o Sistema Operacional;

● Muitas vezes a engenharia reversa é possível apenas através destas ferramentas;

● Diferentes tipos de ferramentas para monitoração de acordo com a necessidade.

Lúcio Camilo

Ferramentas de Monitoração de Sistemas

Page 32: Engenharia reversa

● FileMon○ Monitora todo o tráfego de filesystem entre

aplicação e sistema operacional, e pode verificar todo o I/O de arquivos gerado pelos processos;

○ Com esta ferramenta podemos ver cada arquivo ou diretório que é aberto, bem como cada operação de read, write e execute de qualquer processo do sistema.

Lúcio Camilo

Ferramentas de Monitoração de Sistemas

Page 33: Engenharia reversa

● TCPView○ Monitora todas as conexões TCP ou UDP

ativas em cada processo;○ Não mostra o tráfego atual, apenas uma

listagem com quais conexões estão abertas, por quais processos, o tipo de conexão (TCP ou UDP), o número da porta e o endereço do sistema no outro ponto.

Lúcio Camilo

Ferramentas de Monitoração de Sistemas

Page 34: Engenharia reversa

● TDIMon (Traffic Device Interface)○ Similar ao TCPView, porém pode monitorar

as conexões TCP em diferentes níveis;○ Provê informação sobre qualquer operação a

nível de socket, incluindo envio e recebimento de pacotes.

Lúcio Camilo

Ferramentas de Monitoração de Sistemas

Page 35: Engenharia reversa

● RegMon○ Monitora o acesso de qualquer processo ou

programa as informações do Registro.○ Muito útil para localizar chaves de Registro

mantidas por programas.

Lúcio Camilo

Ferramentas de Monitoração de Sistemas

Page 36: Engenharia reversa

● PortMon○ Monitor de portas físicas que age sobre

qualquer tráfego I/O serial ou paralelo no sistema.

Lúcio Camilo

Ferramentas de Monitoração de Sistemas

Page 37: Engenharia reversa

● WinObj○ Apresenta uma visão hierárquica do

namespace utilizado pelo programa.○ Utilizado para identificar sincronização de

objetos e verificar objetos globais, tais como dispositivos físicos.

Lúcio Camilo

Ferramentas de Monitoração de Sistemas

Page 38: Engenharia reversa

● Process Explorer○ Pode monitorar processos, DLL`s carregadas

e seus espaços de endereços, CPU, memória, entre outras informações sobre os processos.

Lúcio Camilo

Ferramentas de Monitoração de Sistemas

Page 39: Engenharia reversa

1. Eliminar Informação Simbólica○ Eliminar qualquer informação textual que possa trazer algum

significado como nome de classes ou de variáveis.

2. Ofuscar o Programa○ Nome genérico para um conjunto de técnicas que visam

reduzir as chances de coletar informações em análises estáticas mantendo as funcionalidades originais. Ao contrário da Eliminação Simbólica, esta altera a estrutura do programa (após a compilação).

3. Embutir Código AntiDebugger○ Voltado para dificultar análise online, de forma que o

reversor não descubra informações sobre o comportamento interno. Envolve terminar o programa em caso de tentativa de debugger.

Lúcio Camilo

Técnicas Anti Engenharia Reversa

Page 40: Engenharia reversa

4. Confundir Disassemblers○ Insere informações incorretas no início da instrução para

que o disassembler se perca no processo.

5. Transformações no Controle de Fluxo○ Consiste em alterar a ordem e o fluxo de um programa para

reduzir a legibilidade ao gerar o Assembly. Remove o fluxo de informação e adiciona outra declaração de controle.

6. Transformações de Dados○ Encriptam tanto os dados quanto a estrutura do programa.

Trata de um processo importante, pois geralmente identificar uma estrutura de dados é um dos passos fundamentais para entender o funcionamento do programa.

Lúcio Camilo

Técnicas Anti Engenharia Reversa

Page 41: Engenharia reversa

● É o processo de alterar o código de forma a modificar seu comportamento.

● Está relacionado à engenharia reversa pois geralmente ocorre após uma reversão de código, de forma a descobrir a posição de código que deve ser alterada.

● Ferramenta:○ Hex Workshop

i. Permite correção em arquivos e até mesmo em discos inteiros.

ii. Não permite o disassembler e o assembler do código.

Lúcio Camilo

Patching Tools

Page 42: Engenharia reversa

Questões Comentadas

Page 43: Engenharia reversa

No processo de engenharia reversa de arquivos, a normalização tem por função reagrupar informações de forma a eliminar redundâncias de dados e permitir a obtenção de um modelo ER.

Certo Errado

Questão 01 - CESPE - 2004 - Polícia Federal - Perito Criminal Federal - Informática

Lúcio Camilo

Page 44: Engenharia reversa

No processo de engenharia reversa de arquivos, a normalização tem por função reagrupar informações de forma a eliminar redundâncias de dados e permitir a obtenção de um modelo ER.

Certo Errado

Normalização consiste justamente em eliminar as redundâncias de um esquema.

Questão 01 - CESPE - 2004 - Polícia Federal - Perito Criminal Federal - Informática

Lúcio Camilo

Page 45: Engenharia reversa

Um dos usos da engenharia reversa de software é auditar um programa para avaliar sua segurança, bem como as vulnerabilidades do mesmo. Com relação aos descompiladores e desmontadores, assinale a alternativa correta.

a) Uma das diferenças entre descompiladores e desmontadores é que os primeiros geram fontes em linguagem de mais alto nível.

b) Desmontadores são categorizados como ferramentas de análise dinâmica de código; sendo assim, são usados durante a execução dos programas.

c) A análise dinâmica é uma abordagem mais complicada que a estática, já que não se consegue determinar como os dados fluem pelo sistema.

d) Os descompiladores estão entre as ferramentas usadas tanto para a análise dinâmica como para a análise estática de código.

e) Código produzido por desmontadores é mais fácil de ser entendido por humanos que código produzido por descompiladores.

Questão 02 - FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática

Lúcio Camilo

Page 46: Engenharia reversa

Um dos usos da engenharia reversa de software é auditar um programa para avaliar sua segurança, bem como as vulnerabilidades do mesmo. Com relação aos descompiladores e desmontadores, assinale a alternativa correta.

a) Uma das diferenças entre descompiladores e desmontadores é que os primeiros geram fontes em linguagem de mais alto nível.

b) Desmontadores são categorizados como ferramentas de análise dinâmica estática de código; sendo assim, são usados durante a execução dos programas.

c) A análise dinâmica é uma abordagem mais complicada que a estática, já que não se consegue determinar como os dados fluem pelo sistema.

d) Os descompiladores estão entre as ferramentas usadas tanto para a análise dinâmica como para a análise estática de código.

e) Código produzido por desmontadores é mais fácil de ser entendido por humanos que código produzido por descompiladores.

Questão 02 - FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática

Lúcio Camilo

Page 47: Engenharia reversa

Um desmontador ou disassembler é um programa de computador que converte código de máquina em uma representação textual. A diferença entre um desmontador e um descompilador é que este último reverte a compilação em uma linguagem de alto nível, enquanto o primeiro reverte em uma linguagem de montagem (Assembly).O código fonte em linguagem de montagem geralmente contém constantes simbólicas, comentários e rótulos de endereçamento que são normalmente removidos do código de máquina gerado. Assim, o desmontador consegue reverter apenas parcialmente o processo de montagem, pois o código fonte produzido não irá conter essas constantes e comentários. Por causa disso, o código produzido por um desmontador é mais difícil de entender (para um humano) que o código fonte original, com suas anotações.

Questão 02 - FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática

Lúcio Camilo

Page 48: Engenharia reversa

Com relação às ferramentas utilizadas em engenharia reversa de sistemas, assinale a alternativa correta.

a) A ferramenta OllyDbg pode ser usada para fazer correções ou patching em executáveis.

b) Uma das deficiências do PEview está no fato de que o programa mostra apenas os dados brutos no formato hexadecimal e não os valores correspondentes no formato texto.

c) O Process Explorer é uma ferramenta para disassembler estático e dinâmico, e também cria patches.

d) Entre as ferramentas que suportam leitura e escrita em baixo nível de arquivos, mas não suportam trabalhar com partições de discos rígidos, está o Hex Workshop.

e) OllyDbg, WinDbg, IDA e OctEditor conseguem também monitorar o boot do sistema operacional.

Questão 03 - FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática

Lúcio Camilo

Page 49: Engenharia reversa

Com relação às ferramentas utilizadas em engenharia reversa de sistemas, assinale a alternativa correta.

a) A ferramenta OllyDbg pode ser usada para fazer correções ou patching em executáveis.

b) Uma das deficiências do PEview está no fato de que o programa mostra apenas os dados brutos no formato hexadecimal e não os valores correspondentes no formato texto.

c) O Process Explorer é uma ferramenta para disassembler estático e dinâmico, e também cria patches. ferramenta para monitoração de processos

d) Entre as ferramentas que suportam leitura e escrita em baixo nível de arquivos, mas não suportam trabalhar com partições de discos rígidos, está o Hex Workshop. trabalha com dados nativos inclusive

e) OllyDbg, WinDbg, IDA e OctEditor conseguem também monitorar o boot do sistema operacional. OllyDbg é user-mode.

Questão 03 - FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática

Lúcio Camilo

Page 50: Engenharia reversa

Diferença entre debugger e disassembler:

Debuggers são programas que analisam, depuram e testam aplicações. Sua principal utilidade é na identificação e tratamento de erros. É possível rodar linha por linha do código e analisar a mudança das variáveis e do comportamento do código. Os debuggers para binários precisam ter um disassembler embutido para decodificar as instruções. Ou seja, transformar o código-objeto em linguagem assembly.

Disassembler é um programa que consegue transformar linguagem de máquina para a linguagem assembly, transcrevendo as instruções enviadas ao processador para os seus mnemônicos em assembly (asm).

O OllyDbg é um dos mais poderosos debuggers (incluindo um disassembler) disponíveis no mercado, além de ser gratuito, e opera em User-Mode apenas.

Questão 03 - FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática

Lúcio Camilo

Page 51: Engenharia reversa

Em muitos casos, é desejável criar softwares com proteção contra reversão de código, ou seja, desenvolver programas que apliquem técnicas antiengenharia-reversa. Assinale a alternativa que apresenta somente exemplos dessas técnicas.

a) transformações de dados, confusão de registradores, técnicas ativas de antidebugging.

b) ofuscação de código, eliminação de informação simbólica, uso de árvores transversais.

c) transformações no controle de fluxo, transformações de dados, ofuscação e encriptação de código.

d) encriptação de código, bloqueio de acesso à memória, confusão de disassemblers.

e) varredura linear recursiva, técnicas ativas de antidebugging, transformações no controle de fluxo.

Questão 04 - FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática

Lúcio Camilo

Page 52: Engenharia reversa

Em muitos casos, é desejável criar softwares com proteção contra reversão de código, ou seja, desenvolver programas que apliquem técnicas antiengenharia-reversa. Assinale a alternativa que apresenta somente exemplos dessas técnicas.

a) transformações de dados, confusão de registradores, técnicas ativas de antidebugging.

b) ofuscação de código, eliminação de informação simbólica, uso de árvores transversais.

c) transformações no controle de fluxo, transformações de dados, ofuscação e encriptação de código.

d) encriptação de código, bloqueio de acesso à memória, confusão de disassemblers.

e) varredura linear recursiva, técnicas ativas de antidebugging, transformações no controle de fluxo.

Questão 04 - FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática

Lúcio Camilo

Page 53: Engenharia reversa

Identifique as alternativas corretas a respeito de engenharia reversa.

1. Descompiladores são usados para obter o código fonte de um software a partir de seu código binário.2. Ofuscadores de código efetuam a cifragem de códigos binários de programas com o intuito de impedir a sua descompilação.3. Através de técnicas de engenharia reversa, é possível obter diagramas UML de um programa a partir de seu código fonte.4. Descompilação de código e esteganografia são duas técnicas frequentemente usadas para realizar a engenharia reversa de sistemas computacionais.

Assinale a alternativa que indica todas as afirmativas corretas.a) São corretas apenas as afirmativas 1 e 3.b) São corretas apenas as afirmativas 1 e 4.c) São corretas apenas as afirmativas 2 e 3.d) São corretas apenas as afirmativas 1, 2 e 4.e) São corretas apenas as afirmativas 2, 3 e 4.

Questão 05 - FEPESE - 2010 - SEFAZ-SC - Auditor Fiscal da Receita Estadual - Parte III - Tecnologia da Informação

Lúcio Camilo

Page 54: Engenharia reversa

Identifique as alternativas corretas a respeito de engenharia reversa.

1. Descompiladores são usados para obter o código fonte de um software a partir de seu código binário.2. Ofuscadores de código efetuam a cifragem de códigos binários de programas com o intuito de impedir a sua descompilação.3. Através de técnicas de engenharia reversa, é possível obter diagramas UML de um programa a partir de seu código fonte.4. Descompilação de código e esteganografia são duas técnicas frequentemente usadas para realizar a engenharia reversa de sistemas computacionais.

Assinale a alternativa que indica todas as afirmativas corretas.a) São corretas apenas as afirmativas 1 e 3.b) São corretas apenas as afirmativas 1 e 4.c) São corretas apenas as afirmativas 2 e 3.d) São corretas apenas as afirmativas 1, 2 e 4.e) São corretas apenas as afirmativas 2, 3 e 4.

Questão 05 - FEPESE - 2010 - SEFAZ-SC - Auditor Fiscal da Receita Estadual - Parte III - Tecnologia da Informação

Lúcio Camilo

Page 55: Engenharia reversa

1 - OK2 - Os ofuscadores cifram o código fonte3 - OK. É o que fazem programas como o Together, Power Architect, etc.4 - Esteganografia (do grego "escrita escondida") é o estudo e uso das técnicas para ocultar a existência de uma mensagem dentro de outra. Em outras palavras, esteganografia é o ramo particular da criptologiaque consiste em fazer com que uma forma escrita seja camuflada em outra a fim de mascarar o seu verdadeiro sentido.

É importante frisar a diferença entre criptografia e esteganografia. Enquanto a primeira oculta o significado da mensagem, a segunda oculta a existência da mensagem.

Questão 05 - FEPESE - 2010 - SEFAZ-SC - Auditor Fiscal da Receita Estadual - Parte III - Tecnologia da Informação

Lúcio Camilo

Page 56: Engenharia reversa

Gabarito

1. CERTO2. A 3. A4. C5. A

Page 57: Engenharia reversa

Questões para Estudo

Page 58: Engenharia reversa

A engenharia reversa pode ser feita através de várias metodologias de análises, entre elas a análise estatística e probabilística.

Certo Errado

Questão 01

Lúcio Camilo

Page 59: Engenharia reversa

A engenharia reversa pode ser feita através de várias metodologias de análises, entre elas a análise estatística e probabilística.

Certo Errado

A engenharia reversa pode ser feita através das análises OffLine ou análise OnLine, também podem ser chamadas respectivamente de estática e dinâmica.

Questão 01

Lúcio Camilo

Page 60: Engenharia reversa

Debuggers são ferramentas utilizadas na análise dinâmica, enquanto disassemblers são utilizados na análise estática.

Certo Errado

Questão 02

Lúcio Camilo

Page 61: Engenharia reversa

Debuggers são ferramentas utilizadas na análise dinâmica, enquanto disassemblers são utilizados na análise estática.

Certo Errado

Debuggers = análise dinâmica ou Online - avaliam o comportamentoDisassemblers = análise estática ou Offline - avaliam o código.

Questão 02

Lúcio Camilo

Page 62: Engenharia reversa

Ferramentas disassembler convertem o código binário em uma representação em assembler.

Certo Errado

Questão 03

Lúcio Camilo

Page 63: Engenharia reversa

Ferramentas disassemblers convertem o código binário em uma representação textual em assembler.

Certo Errado

Assembler é o compilador da linguagem Assembly

Questão 03

Lúcio Camilo

Page 64: Engenharia reversa

ACPU lê o código de máquina, que nada mais é do que seqüências de bits que contêm uma lista de instruções para a CPU executar. Linguagem Assembly é simplesmente uma representação textual destes bits, que são nominados apenas para que sejam legíveis.

Certo Errado

Questão 04

Lúcio Camilo

Page 65: Engenharia reversa

A CPU lê o código de máquina, que nada mais é do que seqüências de bits que contêm uma lista de instruções para a CPU executar. Linguagem Assembly é simplesmente uma representação textual destes bits, que são nominados apenas para que sejam legíveis.

Certo Errado

Código de máquina e a linguagem Assembly são duas formas de representar a mesma informação. Em vez de números hexadecimais enigmáticos podemos olhar a instrução textual sendo nomes como MOV (Move), XCHG (Exchange), e assim por diante.

Questão 04

Lúcio Camilo

Page 66: Engenharia reversa

Alguns disassemblers funcionam tanto em user-mode quanto em kernel-mode.

Certo Errado

Questão 05

Lúcio Camilo

Page 67: Engenharia reversa

Alguns disassemblers funcionam tanto em user-mode quanto em kernel-mode.

Certo Errado

Disassemblers são ferramentas de análise estática. Debuggers que avaliam o fluxo de informação de um sistema são as ferramentas que podem operar tanto em user-mode (com restrições de execução) quanto em kernel-mode (com acesso ilimitado ao sistema operacional)

Questão 05

Lúcio Camilo

Page 68: Engenharia reversa

É essencial que as ferramentas debuggers incluam a funcionalidade principal de um disassembler, que é de reverter o código binário para um código em linguagem de montagem.

Certo Errado

Questão 06

Lúcio Camilo

Page 69: Engenharia reversa

É essencial que as ferramentas debuggers incluam a funcionalidade principal de um disassembler, que é de reverter o código binário para um código em linguagem de montagem.

Certo ErradoAlgumas das principais funcionalidades de debuggers:

1. Poderosa Ferramenta Disassembler

2. Breakpoints de Software e Hardware

3. Visualização de Registro e Memória

4. Informações sobre processos

Questão 06

Lúcio Camilo

Page 70: Engenharia reversa

Algumas ferramentas realizadas para análise estática na engenharia reversa são IDA-PRO e ILDasm

Certo Errado

Questão 07

Lúcio Camilo

Page 71: Engenharia reversa

Algumas ferramentas realizadas para análise estática na engenharia reversa são IDA-PRO e ILDasm

Certo Errado

Questão 07

Lúcio Camilo

Page 72: Engenharia reversa

A Linguagem Assembly possui um conjunto de instruções comuns para todas as arquiteturas de computadores.

Certo Errado

Questão 08

Lúcio Camilo

Page 73: Engenharia reversa

A Linguagem Assembly possui um conjunto de instruções comuns para todas as arquiteturas de computadores.

Certo ErradoAs instruções Assembly são específicas para cada arquitetura de processador, ex IA-32, Sparc, etc.

Questão 08

Lúcio Camilo

Page 74: Engenharia reversa

Enquanto debuggers que funcionam em Kernel mode possuem acesso ilimitado inclusive ao sistema operacional, debuggers user- mode possuem algumas restrições em suas execuções.

Certo Errado

Questão 09

Lúcio Camilo

Page 75: Engenharia reversa

Enquanto debuggers que funcionam em Kernel mode possuem acesso ilimitado inclusive ao sistema operacional, debuggers user-mode possuem algumas restrições em suas execuções.

Certo Errado

Questão 09

Lúcio Camilo

Page 76: Engenharia reversa

Ollydbg, Windbg, Ida Pro, SoftIce e Hex Workshop são exemplos de ferramentas quem possuem a principal finalidade serem do tipo debugger

Certo Errado

Questão 10

Lúcio Camilo

Page 77: Engenharia reversa

Ollydbg, Windbg, Ida Pro, SoftIce e Hex Workshop são exemplos de ferramentas quem possuem a principal finalidade serem do tipo debugger

Certo ErradoA principal finalidade do Hex é ser uma ferramenta para patching.

Questão 10

Lúcio Camilo

Page 78: Engenharia reversa

A utilização de máquinas virtuais para depurar aplicações não é recomendada já que esta não irá representar o ambiente de hardware e software necessários.

Certo Errado

Questão 11

Lúcio Camilo

Page 79: Engenharia reversa

A utilização de máquinas virtuais para depurar aplicações não é recomendada já que esta não irá representar o ambiente de hardware e software necessários.

Certo ErradoMáquinas virtuais podem simular inclusive outras arquiteturas, e são recomendadas a fim de que o ambiente original não seja afetado por testes.

Questão 11

Lúcio Camilo

Page 80: Engenharia reversa

Disassemblers são ferramentas utilizadas no mercado para realizar engenharia reversa através da análise estática e podem ser chamadas também de decompiladores.

Certo Errado

Questão 12

Lúcio Camilo

Page 81: Engenharia reversa

Disassemblers são ferramentas utilizadas no mercado para realizar engenharia reversa através da análise estática e podem ser chamadas também de decompiladores.

Certo ErradoDecompilador é diferente de disassembler.

Questão 12

Lúcio Camilo

Page 82: Engenharia reversa

Decompiladores diferem de disassemblers pelo fato do primeiro tentar reverter o código para uma linguagem de mais alto nível do que a linguagem revertida pelos disassemblers.

Certo Errado

Questão 13

Lúcio Camilo

Page 83: Engenharia reversa

Decompiladores diferem de disassemblers pelo fato do primeiro tentar reverter o código para uma linguagem de mais alto nível do que a linguagem revertida pelos disassemblers.

Certo Errado

Questão 13

Lúcio Camilo

Page 84: Engenharia reversa

Algumas ferramentas decompiladoras existentes no mercado são JAD, DCC, Winobj e Andromeda.

Certo Errado

Questão 14

Lúcio Camilo

Page 85: Engenharia reversa

Algumas ferramentas decompiladoras existentes no mercado são JAD, DCC, Winobj e Andromeda.

Certo ErradoWinObj é ferramenta de monitoração do sistema.

Questão 14

Lúcio Camilo

Page 86: Engenharia reversa

O conjunto de técnicas que visam eliminar informações simbólicas para que estas deixem de fazer sentido no caso de uma engenharia reversa são chamadas de Ofuscação de Código.

Certo Errado

Questão 15

Lúcio Camilo

Page 87: Engenharia reversa

O conjunto de técnicas que visam eliminar informações simbólicas para que estas deixem de fazer sentido no caso de uma engenharia reversa são chamadas de Ofuscação de Código.

Certo ErradoOfuscação de código é o conjunto de técnicas que altera a estrutura do código, ocorre após a compilação. A técnica que elimina informação textual (antes da compilação) é chamada de Eliminação de Informação Simbólica.

Questão 15

Lúcio Camilo

Page 88: Engenharia reversa

Gabarito

1- ERRADO 6- CERTO 11- ERRADO

2- CERTO 7- CERTO 12- ERRADO

3- ERRADO 8- ERRADO 13- CERTO

4- CERTO 9- CERTO 14- ERRADO

5- ERRADO 10- ERRADO 15- ERRADO