Pular para o conteúdo principal

Questão de Engenharia de Software — Ferramentas de Desenvolvimento de Software — NUCEPE 2018

Engenharia de SoftwareFerramentas de Desenvolvimento de Software
Código
qq384494
Banca
NUCEPE
Órgão
PC-PI
Ano
2018
Nível
Superior
Cargo
Perito Criminal – Informática
Acerca das técnicas e ferramentas de engenharia reversa, analise as afirmações abaixo:I. Um debugger é um tipo de ferramenta de análise que opera em tempo de execução, permitindo manipular o programa em nível de código de máquina. Nela é possível executar o programa instrução por instrução.II. É possível traduzir, em sua totalidade, dados binários em uma linguagem de alto nível utilizando uma ferramenta para decompilar o código, pois durante o processo de compilação são mantidas informações como nome de variáveis e de funções que identificam a estrutura dentro do código binário.III. A característica mais complexa em relação à ferramenta disassembly é distinguir o que é dado do que é código executável, pois essa é uma ferramenta de análise estática que transforma bytes em linguagem assembly.IV. Um ambiente virtual, como o Xen Server, propicia um ambiente para utilização de ferramentas de análise de código, uma vez que permite o uso de clones, salvamento de estado em background e snapshots, virtualizando um ambiente que simula o hardware do computador.Está CORRETO apenas o que se afirma em:
  1. AI, II, III e IV.
  2. BI, III e IV.
  3. CI, II e IV.
  4. DI, II e III.
  5. EIII e IV.
Revelar gabarito e comentário

GabaritoB — I, III e IV.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Engenharia reversa: debugger, disassembly e decompilação

Gabarito: letra B (itens I, III e IV). A única afirmação incorreta é a II, pois a decompilação não consegue recuperar perfeitamente o código de alto nível – muitas informações, como nomes de variáveis e funções, são perdidas durante a compilação (a menos que símbolos de depuração estejam presentes).

A questão testa o conhecimento sobre ferramentas e técnicas de engenharia reversa de software. Vamos analisar cada item.

Item

Afirmação

Correto?

Justificativa

I

Um debugger opera em tempo de execução, permitindo executar o programa instrução por instrução.

✅ Sim

Ferramenta de análise dinâmica que permite step-by-step em código de máquina.

II

É possível traduzir totalmente dados binários para linguagem de alto nível por decompilação, pois nomes de variáveis e funções são mantidos.

❌ Não

A decompilação é imperfeita; nomes e estrutura original são perdidos na compilação (exceto com símbolos de depuração).

III

A maior dificuldade do disassembly é distinguir dados de código executável, sendo uma ferramenta de análise estática.

✅ Sim

Análise estática que converte bytes em assembly; a separação código/dado é complexa.

IV

Um ambiente virtual (ex.: Xen Server) propicia ambiente para uso de ferramentas de engenharia reversa.

✅ Sim

Recursos como snapshots e clonagem auxiliam na análise segura de software.

1Debugger (análise dinâmica)
Tempo de execução
Instrução por instrução
2Disassembler (análise estática)
Dado vs. código executável
Transforma bytes em assembly
3Decompilação
Não recupera totalmente
Perde nomes e estrutura
Engenharia reversa
LEVELsoulevel.com.br
Engenharia reversa: Debugger (análise dinâmica) (Tempo de execução, Instrução por instrução); Disassembler (análise estática) (Dado vs. código executável, Transforma bytes em assembly); Decompilação (Não recupera totalmente, Perde nomes e estrutura)

Item I — ✅ Correto

Um debugger é de fato uma ferramenta de análise dinâmica (em tempo de execução) que permite inspecionar e manipular o programa em nível de código de máquina, executando instrução por instrução (step into/over). É amplamente utilizado para depuração e análise de comportamento.

Item II — ❌ Incorreto

A afirmação de que é possível traduzir "em sua totalidade" dados binários para uma linguagem de alto nível por meio de decompilação é falsa. Durante a compilação, informações como nomes de variáveis, comentários e a estrutura lógica original são perdidas (a menos que o compilador inclua símbolos de depuração, o que não é padrão). A decompilação gera um código de alto nível aproximado, mas não idêntico ao original, e muitas vezes não recupera toda a semântica.

NÃO CAIA NESSA!

A banca utiliza o termo "em sua totalidade" para induzir ao erro. Lembre-se: a decompilação é um processo imperfeito; não é possível reconstruir o código-fonte original com 100% de fidelidade.

Item III — ✅ Correto

O disassembler é uma ferramenta de análise estática que converte código binário (bytes) em linguagem assembly. Uma das maiores dificuldades nesse processo é distinguir o que é dado (constantes, strings) do que é código executável, especialmente quando o código se modifica em tempo de execução (self-modifying code) ou quando há dados intercalados. Essa é uma característica complexa e reconhecida na engenharia reversa.

Item IV — ✅ Correto

Ambientes virtuais como o Xen Server (ou VMware, VirtualBox) oferecem recursos como clones, snapshots e salvamento de estado, que são extremamente úteis para a análise de código malicioso ou para testes de segurança. Eles simulam hardware completo, permitindo executar o software em um ambiente controlado, facilitando a engenharia reversa sem risco de danificar o sistema real.

Conclusão: Corretos os itens I, III e IV. Portanto, a alternativa que os reúne é a letra B.

Link permanente: /questoes/qq384494