Tópicos › Ferramentas e técnicas de engenharia reversa
31 conversas · anos 2 a 9 do grupo

O tema começou no ano 2 do grupo (2018-2019) com o ExecTrace, disassembler genérico em Python apresentado por Felipe "Juca" Sanches. A ferramenta segue o fluxo de execução por busca em profundidade para separar código de dados. Foi criada para o bytecode do Another World e já tinha uma classe para o i8048 do Odyssey 2. Uma nova classe para Z80/MSX foi usada para desmontar o Galaga da Konami, mas a ROM remontada ainda diferia da original em alguns bytes. No mesmo ano, L. trouxe notícias e ferramentas de outros projetos: a decodificação da ROS não executável do IBM 5100, a decompilação do Mario de Nintendo 64 (Felipe explicou a diferença entre desmontagem e decompilação) e um módulo SLEIGH que adiciona ao Ghidra o processador do Game Boy. Também circularam o ROM hacking de Super Mario World e um vídeo sobre a engenharia reversa do Diablo, que trouxe lembranças de trabalhos na BIOS do MSX, no Galaga e no Pinball Fantasies.
No ano 3 (2019-2020), Felipe contou que estava escrevendo um disassembler de 286 como extensão do ExecTrace, consultando o do MAME, para retomar a engenharia reversa do Pinball Fantasies. A essa altura a ferramenta já tratava o 8048 e o Z80, com funções para a BIOS do MSX. Quando o código-fonte do GW-BASIC foi liberado sob licença MIT, L. começou a escrever em Python um conversor de assembly 8086 para Z80, pensando no MSX, e publicou depois um post sobre a conversão. Lord Spy pediu referências sobre o scroll fino de Dangerous Dave in Copyright Infringement. RicBit consultou um manual, o código do MAME e o datasheet e concluiu que o CGA permite emular scroll fino e que o MAME não implementa esse recurso no CGA, ressalvando que só o hardware confirmaria. L. e Erin Pinheiro 🐿 também explicaram que o Microsoft Comic Chat é um cliente IRC comum que codifica os quadrinhos num prefixo de texto. L. compartilhou ainda artigos de Ken Shirriff sobre o die do 8086 e o HP Nanoprocessor e o AtomBusMon, um ICE livre para processadores de 8 bits.
No ano 4 (2020-2021), Felipe "Juca" Sanches programou em quatro lives no YouTube o HexItch, clone livre em Python e curses do editor hexadecimal HexIt do MS-DOS. Ismael Luceno passou a contribuir com o modo de código e a navegação e enviou um pull request. No ano 5 (2021-2022), Ismael disse que voltaria ao HexItch, mas acabou se dedicando a outro projeto. Felipe propôs fazer o disassembly do Tecnoponta Park, para verificar se ele realmente estacionava o cabeçote do disco rígido, e Ismael disse que tentaria analisá-lo com o r2ghidra; o material não registra resultado. Felipe também disse que gostaria de emular o firmware de um cartão SD da ADATA com display de espaço usado.
Nos anos 8 e 9 (2024-2026), o tema consistiu sobretudo em trabalhos de terceiros compartilhados, a maioria por L.: o Sega Channel, o Intel 8271, o Spice86, a PROM do SGI O2, o Pixter, o microcódigo do 8087, Starflight, o disassembly comentado de Raiders of the Lost Ark e os mapas extraídos do Test Drive 3. Houve também discussões próprias. Erin Pinheiro explicou que os jogos embutidos num Mega Drive da TecToy são jogos J2ME de celular que rodam num ambiente Java, não no hardware do console. Felipe sugeriu que a rotina citada num artigo sobre o boot do Mac Classic II parece configurar um timbre no chip de som. No ano 9, Robson França procurou um disassembly de Karateka do Apple II para portar o jogo ao TRS Color, e Felipe se ofereceu para ajudar.
Ano a ano: Ano 2 · Ano 3 · Ano 4 · Ano 5 · Ano 8 · Ano 9
Felipe "Juca" Sanches apresentou o ExecTrace, disassembler em Python por busca em profundidade, e uma nova classe Z80/MSX, usada para desmontar o Galaga da Konami; a ROM remontada ainda diferia da original em alguns bytes. L. compartilhou a decodificação da ROS do IBM 5100, a decompilação do Mario de N64 e o suporte ao Game Boy no Ghidra.
O disassembler segue o fluxo de execução por busca em profundidade. Foi criado para o Another World, ganhou uma classe para o i8048 e agora outra para Z80/MSX. A remontagem do Galaga ainda diferia da ROM original em alguns bytes. Mais tarde, um vídeo sobre o Diablo levou a lembranças de trabalhos de engenharia reversa no Galaga e no Pinball Fantasies.
Felipe apresentou o ExecTrace, um disassembler genérico em Python que analisa o fluxo de execução por busca em profundidade e separa código de dados. Ele foi criado para o bytecode do Another World e já tinha uma classe para o i8048 do Odyssey 2; a nova classe para Z80/MSX foi usada para desmontar o Galaga da Konami. Ao remontar o resultado, a ROM ainda diferia da original em alguns bytes.
Um vídeo sobre a engenharia reversa do Diablo sem código-fonte levou a comentários sobre o Blood, cujo relançamento comercial e ports modernos também vêm de engenharia reversa, e a lembranças de trabalhos de engenharia reversa da BIOS de MSX e de set-top boxes, do Galaga e do Pinball Fantasies.
ROM hacking de Super Mario World, a decodificação da ROS não executável do IBM 5100, a decompilação do Mario de Nintendo 64 e o suporte ao processador do Game Boy no Ghidra.
Foi indicado o site SMW Central, com tutoriais de patch em assembly do SNES e listagem comentada do código do Super Mario World. L. citou o editor de mapas Lunar Magic.
L. compartilhou um relato técnico sobre a decodificação da ROS não executável do IBM 5100.
L. noticiou a decompilação do Mario de N64, que poderia ser recompilado com gcc. Felipe "Juca" Sanches distinguiu desmontagem de decompilação e disse que, pelo que lia, o resultado era código C.
L. compartilhou um módulo SLEIGH que adiciona ao Ghidra suporte ao processador do Game Boy, parecido com o Z80.
Felipe estava escrevendo um disassembler de 286 como extensão do ExecTrace para retomar o Pinball Fantasies, e L. começou um conversor em Python do GW-BASIC de 8086 para Z80. O grupo discutiu o scroll fino no CGA (RicBit concluiu que o MAME não implementa esse recurso), o protocolo do Microsoft Comic Chat e artigos de Ken Shirriff.
Com a liberação do código-fonte do GW-BASIC sob licença MIT, L. começou a escrever em Python um conversor de assembly 8086 para Z80, pensando no MSX. A conversa tratou do mapeamento de registradores e das rotinas de I/O a escrever à mão.
L. divulgou a liberação do código-fonte do GW-BASIC sob licença MIT e começou a escrever em Python um conversor do assembly 8086 para Z80, pensando no MSX. A conversa tratou do mapeamento de registradores (AX/AH não têm equivalente direto no Z80) e das rotinas de I/O que precisariam ser escritas à mão. Depois L. publicou um post sobre a conversão.
Felipe "Juca" Sanches estava escrevendo em Python um disassembler de 286 como extensão do ExecTrace, que já suportava o 8048 do Odyssey² e o Z80, para retomar a engenharia reversa do Pinball Fantasies.
Felipe "Juca" Sanches contou que estava escrevendo em Python um disassembler de 286, consultando o do MAME, como extensão do ExecTrace. A ferramenta já suportava o 8048 do Odyssey², o Z80 (com funções para a BIOS do MSX) e passaria a suportar x86, para retomar a engenharia reversa do Pinball Fantasies. L. observou que as instruções do 8086 se agrupam de 8 em 8 quando vistas em octal.
Lord Spy pediu referências sobre o scroll fino de Dangerous Dave in Copyright Infringement. RicBit concluiu que o CGA permite emular scroll fino e que o MAME não implementa esse recurso no CGA, ressalvando que só o hardware confirmaria.
Lord Spy pediu referências sobre a implementação do scroll fino no PC por Carmack em Dangerous Dave in Copyright Infringement. Consultando um manual, o código do MAME e o datasheet, RicBit concluiu que o CGA permite emular scroll fino por set scroll e que o MAME não implementa esse recurso no CGA, ressalvando que só o hardware confirmaria. Mais tarde Lord Spy relatou que Carmack trabalhou por tentativa e erro, sem documentação das placas, e aparentemente sem usar os registradores de scroll.
L. e Erin Pinheiro 🐿 explicaram que o Comic Chat é um cliente IRC comum que codifica as informações dos quadrinhos num prefixo de texto, e L. indicou um cliente web baseado nele.
Felipe "Juca" Sanches perguntou se seria possível reativar o Microsoft Comic Chat original depois do fim dos servidores da Microsoft. L. e Erin Pinheiro 🐿 explicaram que se trata de um cliente IRC comum, que codifica as informações dos quadrinhos num prefixo em texto nas mensagens. L. também indicou um cliente web com servidor node.js baseado no Comic Chat.
L. compartilhou artigos de Ken Shirriff sobre o die do 8086 e o HP Nanoprocessor e o AtomBusMon, um ICE de código aberto para processadores de 8 bits.
L. compartilhou artigos de Ken Shirriff sobre a engenharia reversa do die do 8086 (registradores, latches do registrador de instrução) e do HP Nanoprocessor. RicBit comentou os 6 bytes de cache de código do 8086.
L. compartilhou o AtomBusMon, um ICE de código aberto para processadores de 8 bits.
Felipe "Juca" Sanches programou em quatro lives o HexItch, clone livre em Python e curses do editor HexIt, e Ismael Luceno contribuiu com o modo de código e a navegação e enviou um pull request.
Juca programou em lives um clone livre do editor hexadecimal HexIt, em Python e curses, e Ismael Luceno passou a contribuir com o modo de código e a navegação.
Juca começou o HexItch, clone em Python e curses do HexIt, editor hexadecimal proprietário do MS-DOS, e o programou em quatro lives no YouTube. Ele planejava usar o pybfd3 para desmontar binários de várias arquiteturas. Depois, Ismael Luceno passou a contribuir com o modo de código (CodeMode) e a navegação e enviou um pull request.
Felipe propôs fazer o disassembly do Tecnoponta Park para MS-DOS, e Ismael Luceno disse que tentaria analisá-lo com o r2ghidra. Felipe falou em emular o firmware de um cartão SD com display, e Ismael disse que voltaria ao HexItch, mas se dedicou a outro projeto.
Felipe propôs fazer o disassembly do utilitário Tecnoponta Park para MS-DOS e disse que gostaria de emular o firmware de um cartão SD com display. Ismael Luceno disse que voltaria ao projeto hexitch.
Felipe "Juca" Sanches propôs fazer o disassembly do utilitário Tecnoponta Park, para MS-DOS, para descobrir se ele realmente estacionava o cabeçote do disco rígido, e indicou o binário no Datassette. Ismael Luceno citou chamadas de interrupção relacionadas a parking (inclusive em drives ESDI), observou que o programa é um EXE grande, aparentemente escrito em assembly, e disse que tentaria analisá-lo com o r2ghidra; Augusto Almeida sugeriu IDA Pro ou Ghidra.
Felipe "Juca" Sanches compartilhou um antigo cartão SD da ADATA com display que mostra o espaço usado, e o grupo discutiu como o firmware leria o sistema FAT; ele disse que gostaria de emular esse firmware e escrever um substituto que mostre o nome do disco. A conversa passou para pendrives e cartões falsificados e perdas de dados por falta de backup.
Ismael Luceno disse que voltaria ao projeto hexitch, e Felipe "Juca" Sanches propôs uma live; Ismael acabou se dedicando a fazer o LibreOffice compilar sem hacks.
L. compartilhou trabalhos sobre o Sega Channel, o Intel 8271 e o Spice86. Erin Pinheiro explicou que os jogos embutidos no Mega Drive da TecToy são J2ME, e Felipe sugeriu que a rotina do boot do Mac Classic II parece configurar um timbre no chip de som.
Foram compartilhados trabalhos sobre o Sega Channel e o Intel 8271 e a ferramenta Spice86. O grupo discutiu os jogos J2ME do Mega Drive da TecToy e a instrução 68030 do Mac Classic II. Leonardo Roman também levantou a suspeita de que o cartucho de Atari do Megaboy da Dynacom tenha sido feito pela VTech.
L. compartilhou um trabalho de engenharia reversa do serviço Sega Channel.
Felipe "Juca" Sanches encaminhou uma pergunta: seria possível extrair jogos como The Sims e FIFA de um Mega Drive da TecToy? Erin Pinheiro explicou que são jogos J2ME de celular adaptados pela TecToy. Eles rodam num ambiente Java do aparelho, não no hardware do Mega Drive, e a plataforma seria possivelmente Qualcomm/BREW.
L. compartilhou em 25/01 um artigo sobre uma instrução 68030 inválida que, por acaso, permitia o boot do Mac Classic II, e Felipe "Juca" Sanches o repostou em 06/02. Felipe suspeitou que o autor confundiu dois sentidos de "patch". Para ele, a rotina citada parece configurar um timbre ("sound patch") no chip de som, e não ser uma modificação de software.
L. compartilhou artigo sobre a engenharia reversa do controlador Intel 8271, dos anos 1970, e de sua ISA.
L. compartilhou o Spice86, ferramenta para engenharia reversa e reescrita de programas DOS em modo real.
L. compartilhou artigo sobre o VTech Socrates. Pela semelhança dos robôs, Leonardo Roman levantou a suspeita de que o cartucho de Atari do Megaboy da Dynacom tenha sido feito pela VTech. Pablo Vasques Bravo-Villalba e Erin Pinheiro compararam os robôs a Johnny 5, Omnibot e R.O.B.
Circularam trabalhos de terceiros sobre Commando, Raiders of the Lost Ark, Starflight, a PROM do SGI O2, o Pixter, o microcódigo do 8087 e os mapas do Test Drive 3. Robson França procurou um disassembly de Karateka do Apple II para um port ao TRS Color, e Felipe se ofereceu para ajudar.
Circularam o som de Commando, Karateka, Raiders of the Lost Ark, Starflight, a PROM do SGI O2, um protocolo USB, o Pixter, o microcódigo do 8087 e os mapas do Test Drive 3.
Pedro de Medeiros compartilhou um vídeo sobre servir ROMs retrô com código PIO, sem uso da CPU, e outro que investiga o firmware de som do arcade Commando com o MAME. Ele observou que o caminho inverso, investigar o hardware do arcade para emulá-lo, é o mais difícil.
Robson França perguntou se havia disassembly de Karateka do Apple II, pois queria portar o jogo para o TRS Color e documentar o processo. Felipe se ofereceu para ajudar.
L. compartilhou o disassembly comentado de Raiders of the Lost Ark para Atari 2600.
L. compartilhou o projeto de engenharia reversa do jogo Starflight, de 1986, e os participantes lembraram as versões de PC e Mega Drive.
L. compartilhou um artigo sobre a engenharia reversa da PROM da estação SGI O2.
L. compartilhou um relato de reconstrução de um protocolo USB perdido de um handheld.
L. compartilhou o projeto de Dmitry Grinberg sobre o Pixter.
L. compartilhou artigo do righto.com sobre engenharia reversa do microcódigo do 8087.
Hugo compartilhou um repositório com os mapas extraídos do jogo Test Drive 3 para DOS.
Índice escrito por agentes Claude que leram o log completo de cada período. Um segundo agente conferiu cada conversa contra as mensagens, e um terceiro conferiu os resumos do ano e dos temas contra as conversas. Pode conter imprecisões: cada item leva às mensagens originais. Para procurar palavras específicas, use a busca.