Engenharia reversa para todos
(0xinfection.github.io)- Reverse Engineering For Everyone é uma coleção de tutoriais criada para que quem está começando em engenharia reversa consiga acompanhar os conceitos e o fluxo prático
- Engenharia reversa é o processo de desmontar um artefato para revelar design, arquitetura, código ou conhecimento
- O currículo cobre x86, x64, ARM-32, ARM-64 e mira tanto iniciantes quanto leitores que querem revisar conceitos
- Foi estruturado para permitir começar mesmo sem saber nada, possibilitando aprender gradualmente até os fundamentos intermediários de engenharia reversa
- O conjunto completo de tutoriais pode ser baixado em PDF e MOBI, e as versões em e-book são atualizadas automaticamente quando novos tutoriais são adicionados
Objetivo da engenharia reversa
- Engenharia reversa também é chamada de backwards engineering ou back engineering
- É o processo de desmontar o artefato-alvo para revelar seu design, arquitetura, código ou extrair conhecimento
- É semelhante à pesquisa científica, mas difere pelo fato de que a pesquisa científica tem como objeto fenômenos naturais
- Esta coleção de tutoriais se concentra em tornar o aprendizado de engenharia reversa o mais simples possível
Currículo e público-alvo
- Os principais cursos abordados são os seguintes
- Destina-se tanto a iniciantes que querem aprender reversing quanto a leitores que desejam revisar conceitos já aprendidos
- Iniciantes podem aprender engenharia reversa desde um ponto sem conhecimento prévio até seus fundamentos intermediários
- Pela barra lateral, é possível verificar as seções abordadas até agora e revisar os conceitos necessários
1 comentários
Opiniões no Hacker News
Engenharia reversa pode ser feita sem necessariamente olhar para o alvo em si
Um texto em que Andrew Tridgell explica como fez engenharia reversa do protocolo SMB da Microsoft usando a “French cafe technique”: https://www.samba.org/ftp/tridge/misc/french_cafe.txt
Tridge também fez engenharia reversa do software proprietário BitKeeper, que Linus usou por um tempo para hospedar o desenvolvimento do kernel Linux. Ele descobriu que, em vez do cliente dedicado, era possível se conectar via telnet ao endereço:porta do BitKeeper e digitar
help, o que imprimia uma lista de comandos que poderiam ser testadosAo consultar o repositório com esses comandos, foi possível entender toda a estrutura interna de dados sem usar nem desassemblar o software proprietário. Quando essa engenharia reversa levou o dono do BitKeeper, Larry McVoy, a revogar o direito de uso da comunidade Linux, Linus acabou criando o git
O fato de
helpimprimir uma lista de comandos foi uma boa decisão de engenharia/UI dos desenvolvedores do BitKeeper, mas me preocupa que a lição extraída disso acabe sendo “não torne o software amigável demais”Além disso, conversar pela rede com algum software certamente também parece ser “usar” esse software
Nunca pensei em engenharia reversa como uma área que se aprende por livros. Desde criança aprendi tudo fazendo eu mesmo
Aprendi a escanear e modificar a memória de processos de videogames com Cheat Engine, a ler e reenviar pacotes de MMO para tentar trapacear, a criar DLLs e hooks e injetá-los em processos, e a fazer patches em executáveis para resolver desafios crackme
Mexi em softwares reais que exigiam chave de licença para fazê-los não precisar de chave ou aceitar qualquer chave, analisei formatos binários como arquivos de save de jogos para usar em cheats e, no fim, consegui um emprego de verdade e passei a ganhar dinheiro com essas habilidades e conhecimentos
Na prática, é mais o tipo de coisa em que você simplesmente precisa tentar por conta própria e dedicar tempo. O tutorial do texto original é fragmentado demais e tenta cobrir coisas demais, mas parece não ensinar técnicas de engenharia reversa além do nível que a maioria pegaria depois de algumas horas mexendo
Por outro lado, beginners.re é vasto, mas muito mais profundo e gradual; para prática, crackmes podem ser melhores
Em um projeto em andamento de engenharia reversa de videogame, entrei em contato com um modder autodidata que não sabia programar. Depois de algumas chamadas no Discord, olhando juntos um projeto no Ghidra e explicando os fundamentos da engenharia de programas de computador, ele aprendeu muito mais do que quando apenas invertia bits no Cheat Engine
Depois disso, ele recriou um mod bastante ambicioso que só tinha sido mostrado em um vídeo do YouTube de 15 anos atrás e nunca distribuído. Eu ajudei a dar a direção, mas, depois que ele viu como as peças se encaixavam, conseguiu implementar sozinho o mesmo mod na sequência do jogo
Experiência em engenharia dá perspectiva na hora de fazer engenharia reversa
Também é importante notar que há muitos livros, mas poucos que sejam “bons”
Depois de ler por só 5 minutos, vi tantos erros, conceitos mal entendidos e explicações completamente erradas que é difícil recomendar. Claramente parece ter sido escrito por um amador com pouca experiência na área
Materiais melhores incluem Secrets of Reverse Engineering, de Eldad Eilam; para Windows, Practical Reverse Engineering; e, para o básico mesmo, Computer Organization and Design, de Patterson
Para quem está chegando agora ao tema, parece uma boa visão geral de alto nível
Também havia este link para material mais aprofundado: https://github.com/mytechnotalent/Reverse-Engineering
Edit: ops, parece que a maior parte redireciona de volta para o texto original
Isso me lembra de quando eu lia tutoriais de reversing em searchlores.org e fravia.com
Agora está no Web Archive: https://web.archive.org/web/20191201105759/http://search.lor...
Engenharia reversa em Java também é divertida. Especialmente aqueles apps Android suspeitos que controlam eletrodomésticos por algum protocolo Bluetooth esquisito
Conheço a pessoa que escreveu este guia. Fico feliz em ver isso no HN e posso repassar feedbacks específicos, se houver
Faltam muito elementos que incentivem a participação e recursos visuais. Há explicação demais e paredes de texto demais; só isso já faz com que não seja um material “para todos”
Por exemplo, a explicação sobre análise estática/dinâmica na parte 2, a introdução ao IDA e a disassemblers, e a descrição do cenário da ABC Biochemicals poderiam ser muito mais concisas
Poderia ser reduzido para algo como: “Na análise de malware, há duas técnicas básicas: análise estática e análise dinâmica. A análise estática examina o executável sem executá-lo; não a abordaremos aqui, ela ficará para cursos posteriores. A análise dinâmica analisa um binário de malware em execução com um disassembler e um debugger. Um disassembler converte um binário executável em instruções de linguagem assembly que podem ser depuradas e manipuladas. Há ferramentas como Hopper, OllyDbg e IDA, e o IDA é um disassembler e debugger popular que oferece suporte a várias plataformas e processadores. Engenharia reversa é uma área muito mais ampla do que análise de malware. No final, usaremos o IDA em um cenário no qual invadimos eticamente o sistema de controle de portas blindadas de um laboratório fictício de pesquisa bioquímica sensível chamado ABC Biochemicals. É um projeto básico, mas mostra o processo de fazer engenharia reversa de um binário caixa-preta e encontrar soluções de design de código mais seguras. Na próxima aula, trataremos de vários tipos de malware”
O link do livro não abre para mim; será que levou uma bomba de tráfego do HN?