Geek Challenge 2024 Reverse Engineering Write-ups
Reverse Engineering Challenges
Week 1
Sign-in Challenge
The provided assembly file was decompiled into equivalent C code. The program reads a string, processes it by XORing even-indexed characters with 7 and subtracting 5 from odd-indexed ones, then compares the result with a target string.
#include <stdio.h>
#include <string.h>
ch ...
Publicado em 8-12 07:41
Instrução BGEI: Ramificação Condicional com Operando Imediato
A instrução BGEI, do inglês "Branch if Greater than or Equal Immediate", é um comando de ramificação condicional presente em certas arquiteturas de processadores, incluindo variantes baseadas em ARM. Essa instrução direciona o fluxo de execução para um endereço específico quando o valor em um registrador atende a uma condição de maior ...
Publicado em 7-31 00:10
Construindo um Sistema Operacional Mínimo com Ferramentas de Código Aberto
Ambiente de Hospedeiro
Este guia assume o uso de um sistema Ubuntu 14.10 como base para desenvolvimento. Assegure-se de ter as ferramentas necessárias instaladas.
apt-get install build-essential nasm genisoimage bochs bochs-sdl
Compilação do Carregador Multiboot
Crie um arquivo em Assembly para o carregador (loader) do sistema operacional. O c ...
Publicado em 7-27 05:56
Configurando o Ambiente para Programação Assembly em DOS
Para explorar o universo da programação em Assembly de 16 bits, especialmente no contexto do sistema operacional DOS, é fundamental preparar um ambiente adequado. Como as CPUs 8086, essenciais para essa era, não são nativamente compatíveis com sistemas operacionais modernos como o Windows 10, utilizaremos um emulador e um conjunto de ferramenta ...
Publicado em 7-20 13:43
Depuração Avançada em Go com Símbolos de Debug em Assembly
Depuração Eficiente em Go: Técnicas com Símbolos de Debug em Assembly
No desenvolvimento de software em Go, os símbolos de debug desempenham um papel crucial na identificação e resolução de problemas complexos. Eles servem como uma ponte entre o código-fonte e os binários compilados, facilitando o diagnóstico de erros em tempo de otimização.
Im ...
Publicado em 7-13 16:16
Otimização de Estruturas de Repetição em C e Go: Análise de Desempenho de Loops for e while
Mecanismos de Execução e Fluxo de Controle em Loops
Em linguagens de baixo e médio nível como C e Go, as estruturas de repetição for e while são fundamentais para processamento iterativo. Embora semanticamente intercambiáveis em muitos cenários, suas implicações no fluxo de controle e na otimização do compilador variam conforme o contexto de us ...
Publicado em 7-12 07:49
Características de Arrays em Engenharia Reversa
void processarDados()
{
int valores[10] = { 10, 20, 30, 40, 50, 60, 70, 80 };
valores[0] = 110;
valores[1] = 120;
valores[2] = 130;
valores[3] = 140;
valores[4] = 150;
valores[5] = 160;
valores[6] = 170;
valores[7] = 180;
return;
}
5: int valores[10] = { 10, 20, 30, 40, 50, 60, 70, 80 };
0012F59 ...
Publicado em 7-3 18:47
Chamadas de Sistema no Linux: Entendendo a Transição do Usuário para o Núcleo
A arquitetura de processadores Intel x86 define quatro níveis de execução privilegiada (anéis ou rings), numerados de 0 a 3. Idealmente, o código do núcleo do sistema operacional executa no Ring 0 (o mais privilegiado), os drivers em Ring 1 e Ring 2, e as aplicações do usuário em Ring 3 (o menos privilegiado). No entanto, o sistema Linux simpli ...
Publicado em 6-3 03:05