Pular para o conteúdo
Skillpedia
Segurança41 mil · #4941

binary-analysis-patterns

Ajuda seu agente a entender programas de computador. Ele analisa o código para encontrar padrões e entender como ele funciona, sendo útil para investigar softwares ou analisar códigos compilados.

O que ela faz

Ajuda a entender como programas de computador funcionam em um nível muito baixo, mostrando exemplos de como o código é escrito e como ele se comporta.

Quando usar

  • ✓Analisar um programa desconhecido para ver o que ele faz.
  • ✓Entender como um programa malicioso (malware) funciona.
  • ✓Identificar padrões comuns em códigos compilados.

Exemplo do que pedir para a IA

“Mostre exemplos de como um loop 'while' é escrito em código de máquina.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/wshobson/agents/blob/main/plugins/reverse-engineering/skills/binary-analysis-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/wshobson/agents/blob/main/plugins/reverse-engineering/skills/binary-analysis-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele mostra exemplos de código de máquina (linguagem que o computador entende diretamente) e explica como esses exemplos correspondem a construções de programação mais comuns, como loops e condicionais.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add wshobson/agents --skill binary-analysis-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/reverse-engineering/skills/binary-analysis-patterns/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões de Análise Binária

Padrões e técnicas abrangentes para analisar binários compilados, entender código assembly e reconstruir a lógica do programa.

Quando Usar Esta Habilidade

  • Engenharia reversa de um executável desconhecido para entender seu comportamento
  • Análise de malware ou binários ofuscados com Ghidra / IDA Pro / Binary Ninja
  • Reconhecimento de idiomatismos comuns em assembly (prólogos de função, tabelas de switch, dispatch de vtable)
  • Reconstrução de fluxo de controle de alto nível a partir de código compilado
  • Identificação de padrões introduzidos pelo compilador (canários de pilha, trampolins PIC)

Seção Detalhada: Fundamentos de Desmontagem

Originalmente uma seção de 2047 bytes neste SKILL.md. Movida para references/details.md para se ajustar ao limite de 8 KB do corpo da habilidade do Codex.

Padrões de Fluxo de Controle

Ramificações Condicionais

; if (a == b)
cmp eax, ebx
jne skip_block
; ... if body ...
skip_block:

; if (a < b) - signed
cmp eax, ebx
jge skip_block    ; Jump if greater or equal
; ... if body ...
skip_block:

; if (a < b) - unsigned
cmp eax, ebx
jae skip_block    ; Jump if above or equal
; ... if body ...
skip_block:

Padrões de Loop

; for (int i = 0; i < n; i++)
xor ecx, ecx           ; i = 0
loop_start:
cmp ecx, [n]           ; i < n
jge loop_end
; ... loop body ...
inc ecx                ; i++
jmp loop_start
loop_end:

; while (condition)
jmp loop_check
loop_body:
; ... body ...
loop_check:
cmp eax, ebx
jl loop_body

; do-while
loop_body:
; ... body ...
cmp eax, ebx
jl loop_body

Padrões de Declaração Switch

; Jump table pattern
mov eax, [switch_var]
cmp eax, max_case
ja default_case
jmp [jump_table + eax*8]

; Sequential comparison (small switch)
cmp eax, 1
je case_1
cmp eax, 2
je case_2
cmp eax, 3
je case_3
jmp default_case

Padrões de Estrutura de Dados

Acesso a Array

; array[i] - 4-byte elements
mov eax, [rbx + rcx*4]        ; rbx=base, rcx=index

; array[i] - 8-byte elements
mov rax, [rbx + rcx*8]

; Multi-dimensional array[i][j]
; arr[i][j] = base + (i * cols + j) * element_size
imul eax, [cols]
add eax, [j]
mov edx, [rbx + rax*4]

Acesso a Estrutura

struct Example {
    int a;      // offset 0
    char b;     // offset 4
    // padding  // offset 5-7
    long c;     // offset 8
    short d;    // offset 16
};
; Accessing struct fields
mov rdi, [struct_ptr]
mov eax, [rdi]         ; s->a (offset 0)
movzx eax, byte [rdi+4] ; s->b (offset 4)
mov rax, [rdi+8]       ; s->c (offset 8)
movzx eax, word [rdi+16] ; s->d (offset 16)

Travessia de Lista Ligada

; while (node != NULL)
list_loop:
test rdi, rdi          ; node == NULL?
jz list_done
; ... process node ...
mov rdi, [rdi+8]       ; node = node->next (assuming next at offset 8)
jmp list_loop
list_done:

Padrões de Código Comuns

Operações de String

; strlen pattern
xor ecx, ecx
strlen_loop:
cmp byte [rdi + rcx], 0
je strlen_done
inc ecx
jmp strlen_loop
strlen_done:
; ecx contains length

; strcpy pattern
strcpy_loop:
mov al, [rsi]
mov [rdi], al
test al, al
jz strcpy_done
inc rsi
inc rdi
jmp strcpy_loop
strcpy_done:

; memcpy using rep movsb
mov rdi, dest
mov rsi, src
mov rcx, count
rep movsb

Padrões Aritméticos

; Multiplication by constant
; x * 3
lea eax, [rax + rax*2]

; x * 5
lea eax, [rax + rax*4]

; x * 10
lea eax, [rax + rax*4]  ; x * 5
add eax, eax            ; * 2

; Division by power of 2 (signed)
mov eax, [x]
cdq                     ; Sign extend to EDX:EAX
and edx, 7              ; For divide by 8
add eax, edx            ; Adjust for negative
sar eax, 3              ; Arithmetic shift right

; Modulo power of 2
and eax, 7              ; x % 8

Manipulação de Bits

; Test specific bit
test eax, 0x80          ; Test bit 7
jnz bit_set

; Set bit
or eax, 0x10            ; Set bit 4

; Clear bit
and eax, ~0x10          ; Clear bit 4

; Toggle bit
xor eax, 0x10           ; Toggle bit 4

; Count leading zeros
bsr eax, ecx            ; Bit scan reverse
xor eax, 31             ; Convert to leading zeros

; Population count (popcnt)
popcnt eax, ecx         ; Count set bits

Padrões de Descompilação

Recuperação de Variáveis

; Local variable at rbp-8
mov qword [rbp-8], rax  ; Store to local
mov rax, [rbp-8]        ; Load from local

; Stack-allocated array
lea rax, [rbp-0x40]     ; Array starts at rbp-0x40
mov [rax], edx          ; array[0] = value
mov [rax+4], ecx        ; array[1] = value

Recuperação de Assinatura de Função

; Identificar parâmetros pelo uso de registradores
func:

…
Perguntas frequentes

O que é 'código compilado'?

É o código que um programa escreve em uma linguagem como Python ou C é transformado para que o computador possa executá-lo diretamente.

O que é 'engenharia reversa'?

É o processo de analisar um programa para entender como ele funciona, geralmente sem ter o código original.

Por que ver código de máquina?

Ajuda a entender detalhes de baixo nível, como otimizações feitas pelo compilador ou como um programa se comporta em situações específicas.

Detalhes

Descrição original do autor

Master binary analysis patterns including disassembly, decompilation, control flow analysis, and code pattern recognition. Use when analyzing executables, understanding compiled code, or performing static analysis on binaries.

repo: wshobson/agents

Popularidade

Estrelas no GitHub
41 mil
Posição no ranking
#4941
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas