segunda-feira, 28 de maio de 2007

Indo a fundo - assembly e engenharia reversa

Aprender assembly e engenharia reversa. Eis o galho. Difícil de encontrar material, e principalmente códigos para ler.

Nem tanto. Um ótimo livro, The Art of Assembly Programming, de Randall Hyde. Abrange desde o que é um sistema de numeração binária, até HLA (High-Level Assembly). Referência em tantas outras obras, este livro só falta pegar no colo.

O site Numa Boa, também tem um tutorial em português, além de uma referência bem completa sobre as API's do Win32. Ah sim, o pessoal do Linux também tem um site de referência sobre assembly bem aqui.

Se você acha que precisa de mais códigos para entender o que se passa, há um comando no Linux que pode ajudar muito (inclusive no que diz respeito a engenharia reversa): o objdump.

Você pode usá-lo para disassemblar qualquer programa nos formatos PE (Portable Executable, que é o padrão do Win32), no formato ELF (Executable and Linking Format, que é o padrão atual dos UNIX-like), ou ainda em alguns outros formatos.

Criar códigos "hello world" em C, e depois disassemblá-los com o objdump é uma boa forma de se aprender.

Para a engenharia reversa e debbuging ainda há outros comandos no Linux que são muito úteis e que já vêm inclusos na maioria das distribuições, entre eles:
readelf que "disseca" o executável;
od que retorna byte a byte o conteúdo do arquivo;
ar que serve para alterar/criar/modificar arquivos de uma forma bem seleta.

Utilize-os com moderação!
-----------
keepReading