6 pontos por GN⁺ 2024-07-26 | 1 comentários | Compartilhar no WhatsApp
  • 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

Formatos oferecidos

  • O conjunto completo de tutoriais está disponível como e-book
  • Quando novos tutoriais são adicionados, as versões em e-book também são atualizadas automaticamente

1 comentários

 
GN⁺ 2024-07-26
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 testados
    Ao 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

    • É difícil dizer que Linus foi necessariamente “tolo” por usar o BitKeeper. Ele escolheu a melhor ferramenta disponível na época e, mesmo que não fosse absolutamente a melhor, Linus analisou e avaliou várias ferramentas
      O fato de help imprimir 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
    • Andrew nos salvou não uma, mas duas vezes. Mostra que precisamos de quem faz o gol, mas também de quem dá o passe decisivo
    • Lembro que, na graduação, acabei ouvindo a história do BitKeeper/git diretamente do Tridge, que estava no refeitório do departamento
  • 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

    • Eu também aprendi engenharia reversa quando era jovem passando tempo demais olhando para CE/IDA, então, quando alguém pergunta qual é uma boa forma de aprender, não tenho uma resposta muito boa
      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
    • Dá para entrar direto em engenharia reversa, mas, sem uma base de engenharia, seja por educação formal ou autodidatismo, fica muito mais difícil
      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
    • Você está subestimando muito o poder do aprendizado estruturado e de exercícios repetidos. Pensamento crítico, curiosidade e paixão podem ser difíceis de transmitir, mas um livro bem escrito pode reduzir bastante, a um nível razoável, o tempo gasto em tentativa e erro
      Também é importante notar que há muitos livros, mas poucos que sejam “bons”
    • Também nunca pensei em culinária como algo que se aprende por livros
  • 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

    • Secrets of Reverse Engineering é um livro de 2005; há algum livro mais recente que valha recomendar?
  • 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

    • Seria bom se Java tivesse uma ferramenta equivalente ao DnSpyEx. Estou esperando o Recaf4 ficar pronto
  • 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”

    • É louvável ter escrito o texto, mas eu senti algo parecido. As frases são longas e prolixas demais, o que dificulta a leitura
      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?