Em muitos casos, é desejável criar softwares com proteção ...

Próximas questões
Com base no mesmo assunto
Q233391 Engenharia de Software
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.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a C, que aborda técnicas de proteção contra engenharia reversa, sendo elas: transformações no controle de fluxo, transformações de dados, ofuscação e encriptação de código.

As transformações no controle de fluxo dificultam o entendimento do caminho que o programa executa, ao alterar a sequência de execução de blocos de código e inserir estruturas de controle que complica a análise por humanos ou ferramentas automatizadas.

Transformações de dados consistem em alterar a forma como os dados são representados no programa, como, por exemplo, dividir variáveis em múltiplas outras, para causar confusão naqueles que tentam compreender a estrutura de dados utilizada.

A ofuscação de código é uma técnica que modifica o código-fonte ou binário do software para torná-lo mais difícil de ser compreendido ou analisado, tanto visualmente quanto por ferramentas de descompilação.

Finalmente, a encriptação de código é um método que criptografa partes do código ou o código inteiro. A execução desse código criptografado geralmente envolve um processo de decriptação em tempo de execução, que protege a lógica do software de ser facilmente extraída ou modificada.

Esses conceitos são essenciais no âmbito de segurança de software, principalmente no contexto de proteger o código-fonte contra análises não autorizadas ou mal-intencionadas, e são frequentemente cobrados em concursos públicos na área de desenvolvimento de software.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Os métodos abordados para antricracking são: Eliminação de Informação Simbólica, Técnicas Ativas de AntiDebugging, Confundir Disassemblers, Encriptação e Ofuscação de Código e Transformações no Controle de Fluxo.
3.1 Eliminação de Informação Simbólica (Eliminating Symbolic Information – ESI)

A abordagem mais óbvia para confundir quem está lendo diretamente um código disassemblado é eliminar toda e qualquer informação textual do programa.

Se as strings no código assembly não estivessem transparentes, ou seja, se fossem diferentes da forma como vemos no programa em execução, o trabalho seria realmente bem mais difícil e demorado.

Em um binário executável que acessa diretamente o hardware, não-bytecode, podemos simplesmente esconder toda a informação do programa. Já em programas baseados em bytecodes os executáveis muitas vezes contém uma grande quantidade de informação simbólica, como nome de classes, nome de membro de classes e a tabela de objetos instanciados. Estas informações podem ser extremamente úteis para quem disassemblar o código pois com base nelas é possível localizar pontos-chave do código.


http://www.sawp.com.br/blog/?p=131

3.2 Ofuscação e Encriptação de Código (Code Obfuscation and Encryption – COE)

Encriptação e ofuscação são técnicas utilizadas para reduzir a vulnerabilidade de crackear programas. Normalmente são utilizadas quando a ESI não é suficiente para proteção anticracking.

Consiste em modificar o layout do programa, a lógica e os dados de forma que reorganize o código, tornando-o menos legível, mas mantendo a funcionalidade para o usuário final.

COE difere-se da Eliminação Simbólica por alterar a estrutura do código em sí e não dos nomes dos componentes constantes.

3.3 Técnicas Ativas de Antidebuggin (Active AntiDebugger Techniques ? AADT)

Considerando que as atividades de cracking são feitas em grande parte com o uso de debuggers a possibilidade de incorporar no programa algum código que complique o processo de depuração é desejável para o aumento na proteção do código.

Técnicas AADT são altamente efetivas quando combinadas com encriptação de código. Pois, ao encriptar o programa, força os crackers executá-lo dentro de um debugger e o código AADT não permite sua depuração.

Existem dezenas de truques utilizados para antidebuggin. Mas quase todos são dependentes de plataforma ou altamente dependente de sistemas operacionais.

As implementações de AADT oferecem alguns riscos e algumas vezes costumam gerar exceções não tratáveis e causar mal funcionamento do programa quando detecta um debugger no sistema, mesmo se o programa não estiver anexado ao debugger.

http://www.sawp.com.br/blog/?p=131

3.4 Confundindo Disassemblers (Confusing Disassemblers – CD)

Enganar disassemblers para inibir a atividade de crackers não é uma forma muito resistente de antireversing. Entretanto, é a mais popular.

A estratégia é simples: Nas arquiteturas de processadores que usam instruções de tamanho variável (como IA-32) é possível enganar o disassembler inserindo dados impróprios no começo da instrução. Isto faz com que o disassembler perca a sincronização e disassemble o resto do código incorretamente (colocando 1 bit a direita ou a esquerda, o conjunto de bits seguintes implicarão na perda da instrução).

3.5 Transformações no Controle de Fluxo (Control Flow Transformations – CFT)

Transformações no controle de fluxo consistem em alterar a ordem e o fluxo de um programa para reduzir a legibilidade do código ao gerar assembly. Podendo ser definida em 3 categorias: computação de transformações, agregação de transformações e ordenação de transformações.

A Computação de Transformações modifica a estrutura de fluxo original para trazer uma funcionalidade equivalente ao usuário final, mas tornando mais difícil de se reverter o código. Isso pode ser feito removendo o fluxo de informação do programa e adicionando outra declaração de controle de fluxo que complicaria o entendimento para quem for ler o código em baixo nível.

A Agregação de Transformações destrói a estrutura de alto nível do programa, quebrando a abstração de linguagem de alto nível em tempo de programação. A idéia básica é desfazer essa abstração de modo que após a compilação ser feita a funcionalidade do programa se mantenha, mas quando o código seja desassemblado a estrutura pareça absurda.

Por fim Ordenação de Transformadas são as menos poderosas e consistem em randomizar a ordem das operações em um programa na esperança de reduzir a legibilidade do programa.

3.6 Transformações de Dados ( Data Transformations – DT )

Transformações de dados focam em encriptar tanto os dados quanto a estrutura do programa. Essa associação é interessante pois identificar uma importante estrutura de dados é um dos passos fundamentais para entender como o programa funciona.

http://www.sawp.com.br/blog/?p=131

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo