oicìliS ©| O I C Ì L I S |
oicìliS é o reverso de Silício. Aqui na Aldeia NumaBoa temos o Bairro do Silício, onde mora o pessoal que curte informática, e o oicìliS od orriaB, cujos moradores são os escovadores de bits. Os oicilistas se ocupam com coisas estranhas, como linguagem assembly e instruções de microprocessadores, arquitetura e padrões de compactadores, criptografia e, principalmente, com segurança de software. Para poder projetar e produzir software de padrão é necessário dominar pelo menos uma linguagem de programação. Para poder projetar e avaliar o nível de segurança de softwares, é necessário conhecer e dominar o que se denomina de engenharia reversa, um tipo de programação "ao contrário". |
| O que é a Engenharia Reversa |
Como o próprio nome indica, a Engenharia Reversa é uma engenharia "ao contrário", portanto, é uma atividade que trabalha com um produto existente (um software, uma peça mecânica, uma placa de computador, etc.) e tenta entender como este produto funciona e o que ele faz exatamente (todas as suas propriedades em quaisquer circunstâncias). Fazemos engenharia reversa quando queremos trocar ou modificar uma peça (ou um software) por outro, com as mesmas características, mas não temos todas as informações sobre essa peça. Utilizando mecanismos de busca na Internet como Google, Altavista, Lycos, etc, as referências sobre Engenharia Reversa são surpreendentemente abundantes. Encontra-se desde programas de cursos universitários até ensaios e teses, além dos tradicionais sites "relâmpago" (hoje está no ar, amanhã foi banido do ISP) dos crackers de plantão. |
| Porque aprender Engenharia Reversa |
Crackers são os que aplicam conhecimentos de engenharia reversa para "liberar" programas que exijam algum tipo de registro ou para habilitar funções que estejam bloqueadas em demos, trials, etc. É natural que os autores de software queiram proteger seus programas e o fazem razoavelmente bem... até encontrar um cracker que se dispõe a "liberá-los". O que os programadores esquecem é que precisam se interessar pela engenharia reversa, dando uma atenção especial à programação de segurança. Se você não conhece o inimigo, como é que pretende se defender ? Aprenda as técnicas utilizadas pelos estudiosos da matéria e pelos crackers mais famosos e aplique seus conhecimentos (não existe proteção 100%, mas 99% já é um bom resultado) - ou então parta para o software livre e não pense mais no assunto ! |
| Como aprender Engenharia Reversa |
Como foi dito acima, existem muitos sites dedicados ao assunto, basta dar uma olhada no Google. Encontra-se desde conceitos básicos até cursos na web (geralmente em inglês, como Hellforge) e tutoriais de crackers com exemplos muito elucidativos. De qualquer modo, é necessário um conhecimento básico da linguagem assembly além de um domínio razoável de uma outra linguagem de programação (preferencialmente C/C++). Se você programa para Windows rodando em processadores Intel, é claro que também é necessário um conhecimento básico das API do Windows, da arquitetura Intel e do conjunto de instruções desses processadores. O mesmo se aplica para a família Unix/Linux, Sparc, etc. Além disso, entre outras coisas, procure se informar ao máximo sobre padrões: comece com os padrões de PE (portable executable), compactação, encriptação de arquivos e instaladores. |
| Onde aprender Engenharia Reversa |
Na universidade ou... em casa :-). No recesso do lar, alguns livros, cabeça fria e uma conexão com a web. Pesquise na Internet, faça alguns bookmarks e prepare-se para penosos downloads: você vai precisar de algumas ferramentas, paciência para aguentar janelinhas popups de sites de crackers, perseverança para encontrar tutoriais de qualidade, etc, etc, etc. Aqui no bairro do oicìlis você vai poder encontrar todo tipo de informação que os oicilistas de plantão colecionaram por sua relevância. É óbvio que estas informações destinam-se apenas e tão somente para programadores interessados em segurança de software. Uma vez que é impossível trasnsmitir conceitos importantes omitindo informações ou exemplos, os autores e o provedor do site não podem controlar o uso que será feito do material publicado. Portanto, eximem-se de qualquer reponsabilidade quanto ao uso indevido das informações contidas nesta seção e expressam claramente que: |
| O uso indevido e/ou ilegal das informações contidas neste site são de inteira responsabilidade do usuário das mesmas. |
| CONTEÚDO DO OICÌLIS |
O material está sendo preparado em etapas. A lista de tópicos vai crescendo à medida em que os oicilistas vão produzindo textos. Se você estiver interessado, confira de tempos em tempos para ver se há novidades. Destaque especial para Linguagem Assembly. |
| 1 | A teoria da engenharia reversa | Apenas por curiosidade |
| 2 | Conceitos básicos de programação | Linguagens de alto e de baixo nível |
| 3 | O formato PE | RaioX de um executável |
| 4 | A linguagem Assembly | Desista de tudo se você não souber um mínimo |
| 5 | Como proteger software com eficiência | Conceitos básicos para dificultar ações de crackers |
| 6 | Tabelas e Referências | API do Windows, Tabela ASCII, configurações, comandos... |
| 7 | Onde encontrar software de suporte | Links para encontrar suas ferramentas de trabalho |