-
[105] A Fórmula de um Crack
Crackear qualquer sistema é impossível sem as ferramentas certas. Abaixo iremos discutir as diferenças entre as existentes. E de posse do conhecimento destas, iremos desenvolver um exemplo suficientemente completo para se entender como crackear um executável.
-
[131] Técnicas AntiCracking – Parte I
Quando disassemblamos um binário para crackearmos, muitas vezes nos deparamos com um código que parece não fazer sentido. Isso ocorre por que o programa possivelmente foi implantado com alguma proteção contra engenharia reversa.
-
[148] Técnicas AntiCracking – Parte II – Eliminação de Informação Simbólica
Os compiladores costumam gerar informações simbólicas – para representar as lincagens – quando convertem as relações de importação e exportação de tabelas e extensões. Um programa com grande uso de DLLs, onde cada uma exporta uma grande quantidade de funções, necessitará de uma lista relacionando onde estão as funções exportadas, normalmente indicando o que elas fazem, o que é de grande serventia para os crackers. Neste artigo, apresento algumas das informações que podem ser usadas como pontos de referência para engenharia reversa.
-
[201] Técnicas AntiCracking – Parte III – Ofuscação e Encriptação de Código
Também conhecidas como Code Obfuscation and Encryption (COE), são técnicas utilizadas para prevenir a Análise Estática de Código. Diferente da Eliminação Simbólica (Eliminating Symbolic Information – ESI), a COE é aplicada após a compilação do programa, modificando o binário original antes de ser entregue ao cliente.
-
[207] Técnicas AntiCracking – Parte IV – Técnicas Ativas de AntiDebuggin
No post “A Fórmula do Crack” discutimos alguma coisa sobre debuggers. Como é o processo de debuggin em user-mode e kernel-mode, como cada um deles trabalha quando um usuário anexa um processo à eles, quando fixa um breakpoints em uma instrução etc.
O que não foi discutido é a forma como o debugger atua: quando o usuário escolhe pontos de parada para conferir o andamento da execução do programa é comum o debugger substituir a(s) instrução(ões) por uma instrução própria, que só ele entenda.
-
[214] Técnicas AntiCracking – Parte V – Burlando Disassemblers
Uma técnica sofisticada de enganar disassemblers consiste em usar um trecho do programa para alterar os bits das outras partes do programa, que desejamos proteger. A estratégia usada é deslocar os bits de um trecho do programa para que este pedaço pareça possuir outras instruções. Desta forma, o decompilador irá interpretar essas instruções e fornecer informações erradas ao atacante.
-
[219] Técnicas AntiCracking – Parte VI – Transformações no Controle de Fluxo
Control Flow Transformation (CFT) consiste em alterar a estrutura de um programa para tornar seu código difícil para a leitura humana sem prejudicar a sua funcionalidade original. Como veremos aqui, está intimamente relaciona com a ofuscação de código.
As técnicas que se aplicam à categoria das CFTs são: Inlining, Intervalar Código, Estruturas Opacas, GoTo Hell’s Code e Exceção Proposital.
-
[225] Técnicas AntiCracking – Parte VII – Conclusão
O programa ficará mais lento quão maior for o descuido na implantação dessas técnicas devido aos efeitos adversos, tais como o uso excessivo da CPU com instruções que não tem funcionalidade nenhuma para o usuário, o aumento significativo do código e a perda de desempenho no sistema. Todavia, ao implementar este tipo de proteção devemos usar as técnicas de forma que as reações colaterais sejam minimizadas. Neste artigo, discutimos quais são os custos ao se implementar uma técnica que desfavoreça a engenharia reversa, o nível de proteção máximo que se pode ser obtido e qual preço desta segurança.