SóProvas


ID
700180
Banca
FUNIVERSA
Órgão
PC-DF
Ano
2012
Provas
Disciplina
Engenharia de Software
Assuntos

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
Comentários
  • 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