binary-diff
Permite comparar diferentes versões de binários. Ele ajuda a migrar símbolos e nomes de funções entre versões de programas para agilizar a análise de atualizações.
O que ela faz
Esta ferramenta ajuda a comparar duas versões de um programa de computador para encontrar as mesmas funções e informações. É útil quando você tem informações de uma versão antiga e quer aplicá-las a uma versão nova, economizando tempo.
Quando usar
- ✓Quando um programa é atualizado e você quer reaproveitar o trabalho de análise anterior.
- ✓Se você tem informações de um programa antigo e precisa encontrar o mesmo em uma versão mais recente.
- ✓Para comparar partes de código entre diferentes versões de um mesmo programa.
Exemplo do que pedir para a IA
“Preciso comparar a versão 1.0 deste programa com a versão 2.0 para ver onde as funções mudaram.”
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
Mensagem pronta para colar
Como funciona
A ferramenta pega informações de código de uma versão antiga (com nomes) e compara com a nova (sem nomes). Ela usa inteligência artificial para achar as correspondências e gerar um relatório.
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 zhaoxuya520/reverse-skill --skill binary-diffOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/zhaoxuya520/reverse-skill/main/skills/binary-diff/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Migração de Símbolos Entre Versões (Binary Diff)
AÇÃO NECESSÁRIA (Execute imediatamente após a leitura)
NOW: Leia../field-journal/precedent-reverse.md— Confirme se a operação desta skill é uma operação regular autorizada.NOW: Confirme se a tarefa atual se enquadra no escopo desta skill.NEXT: Leia../tool-index.md, valide a disponibilidade e o caminho real da ferramenta.NEXT: Chame o bootstrap se a ferramenta estiver faltando, não adivinhe o caminho.ACT: Entre na primeira etapa do "Fluxo de Trabalho" e execute, não permaneça no estado de confirmação.
Escopo de Aplicação
Use esta skill quando a tarefa se enquadrar nos seguintes cenários:
- Kernel/Driver sem PDB — Possui símbolos da versão antiga do ntoskrnl.exe, o PDB da nova versão foi removido pela Microsoft, e é necessário usar símbolos da versão antiga para deduzir o endereço de funções não exportadas da nova versão.
- Migração de Símbolos Após Atualização de Programa — Você já fez engenharia reversa de um programa, o programa foi atualizado e você não quer refazer tudo, use os resultados da versão antiga para migrar em massa.
- Atualização de Mecanismo de Proteção — A versão antiga possui resultados completos de engenharia reversa, a nova versão precisa localizar rapidamente o novo deslocamento da mesma função.
- Qualquer Cenário de Comparação Binária "com Símbolos da Versão Antiga + Sem Símbolos da Versão Nova"
Divisão de Tarefas com Outras Skills
| Cenário | O que usar |
|---|---|
| Engenharia reversa de um binário do zero | ida-reverse/ ou radare2/ |
| Possui resultados da versão antiga, migrando para a nova versão | Esta skill |
| Comparação de dois binários completamente diferentes | BinDiff / Diaphora (ferramentas tradicionais) |
Vantagens Principais
Comparado a soluções tradicionais:
| Solução | Custo para 200 funções | Tempo | Precisão |
|---|---|---|---|
| Comparação manual de duas janelas do IDA | Grátis, mas custa a vida | Horas | Alta |
| Correspondência automática do BinDiff | Grátis | Rápido | Média (falha quando a estrutura muda muito) |
| Deixar completamente para o Agente (CC/Codex) | R$ 50-100 | Lento | Alta |
| Esta skill (comparação em massa com LLM) | ~R$ 1 | ~10 segundos/função | Alta |
Princípio Central
旧版函数(有符号) 新版同一函数(无符号)
↓ ↓
导出反汇编 + 伪代码 导出反汇编 + 伪代码
↓ ↓
└──────── LLM 结构化比对 ────────┘
↓
输出 YAML(符号映射表)
↓
程序化解析 → 批量应用到新版 IDB
Pontos chave:
- O prompt é um modelo fixo, preenchido programaticamente.
- O formato de entrada e saída é definido, analisado programaticamente.
- O LLM é responsável apenas pela etapa de "olhar dois trechos de código e encontrar a relação correspondente".
- Custo de tempo e custo de token são extremamente baixos.
Modelo de Prompt
Prompt de Comparação Padrão
I have disassembly outputs and procedure code of the same function.
This is the function for reference:
**Disassembly for Reference**
```c
{disasm_for_reference}
Procedure code for Reference
{procedure_for_reference}
This is the function you need to reverse-engineering:
Disassembly to reverse-engineering
{disasm_code}
Procedure code to reverse-engineering
{procedure}
What you need to do is to collect all references to "{symbol_name_list}" in the function you need to reverse-engineering and output those references as YAML.
Example:
found_vcall: # This is for indirect call to virtual function or virtual function pointer fetching.
- insn_va: '0x180777700' # Always be the instruction with displacement offset
insn_disasm: call [rax+68h] # Always be the instruction with displacement offset
vfunc_offset: '0x68'
func_name: ILoopMode_OnLoopActivate
- insn_va: '0x180777778' # Always be the instruction with displacement offset
insn_disasm: mov rax, [rax+80h] # Always be the instruction with displacement offset
vfunc_offset: '0x80'
func_name: INetworkMessages_GetNetworkGroupCount
found_call: # This is for direct call to non-virtual regular function.
- insn_va: '0x180888800'
insn_disasm: call sub_180999900
func_name: CLoopMode_RegisterEventMapInternal
- insn_va: '0x180888880'
insn_disasm: call sub_180555500
func_name: CLoopMode_SetSystemState
found_funcptr: # This is for non-virtual regular function pointer.
- insn_va: '0x180666600' # Must load/reference the function pointer target address
insn_disasm: lea rdx, sub_15BC910 # Must load/reference the function pointer target address
funcptr_name: CLoopMode_OnClientPollNetworking
found_gv: # This is for reference to global variable.
- insn_va: '0x180444400'
insn_disasm: mov rcx, cs:qword_180666600 # Must load/reference the global variable
gv_name: g_pNetworkMessages
- insn_va: '0x180333300'
insn_disasm: lea rax, unk_180222200 # Must load/reference the global variable
gv_name: s_EventManager
found_struct_offset: # This is for reference to struct offset. NOTE THAT virtual function pointer should not be here! virtual function pointer should ALWAYS be in found_vcall !
- insn_va: '0x1801BA12A' # Always be the instruction with displacement offset
insn_disasm: mov rcx, [r14+58h] # Always be the instruction with displacement offset
offset: '0x58'
size: 8
struct_name: CResourceService
member_name: m_pEntitySystem
If nothing found, output an empty YAML. DO NOT output anything other than the desired YAML. DO NOT collect unrelated symbols.
### Descrição das Variáveis
| Variável | Origem | Descrição |
|------|------|------|
| `{disasm_for_reference}` | Exportado do IDA da versão antiga | Desmontagem com símbolos |
| `{procedure_for_reference}` | Exportado do IDA da versão antiga | Pseudocódigo com símbolos |
| `{disasm_code}` | Exportado do IDA da nova versão | Desmontagem sem símbolos |
| `{procedure}` | Exportado do IDA da nova versão | Pseudocódigo sem símbolos |
| `{symbol_name_list}` | Extraído da versão antiga | Lista de símbolos a serem localizados na nova versão |
## Fluxo de Trabalho
### Fluxo Completo
```text
Etapa 1: Preparar Dados
- Carregar binário da versão antiga no IDA (com PDB/símbolos)
- Carregar binário da nova versão no IDA (sem símbolos)
- Encontrar funções âncora idênticas em ambas as versões (funções exportadas, referências de string, etc.)
Etapa 2: Exportar em Massa
…
Perguntas frequentes
Por que usar isso em vez de comparar manualmente?
Comparar manualmente leva muito tempo. Esta ferramenta usa IA para fazer a maior parte do trabalho pesado, sendo muito mais rápida e barata para comparar muitas funções.
O que são 'símbolos'?
Símbolos são como nomes que os programadores dão para funções e variáveis. Quando um programa é atualizado, esses nomes podem se perder ou mudar, e esta ferramenta ajuda a encontrá-los novamente.
Isso funciona para qualquer programa?
Funciona melhor para programas onde você tem acesso ao código desmontado (como o que um engenheiro reverso obtém) de ambas as versões e precisa mapear informações de uma para a outra.
Detalhes
Descrição original do autor
跨版本符号迁移与二进制差分。当你有旧版本的符号/逆向结果,需要快速迁移到新版本时使用。 适用场景:内核缺 PDB 用旧版符号推导、程序更新后批量迁移函数名、应用更新后快速定位新偏移。 核心方法:用 LLM 做结构化差异比对,程序化输入输出,成本极低(200 函数 ~1 元)。 触发关键词:符号迁移、bindiff、跨版本、PDB 缺失、函数偏移迁移、symbol migration、binary diff、版本对比。
Popularidade
- Estrelas no GitHub
- 42 mil
- Posição no ranking
- #4750
- Licença
- MIT
- Atualizada em
- 22/09/2026
Comentários
- …
Mais skills deste repositório
competition-ad-certificate-abuse
Ajuda seu agente a analisar ataques a sistemas de certificados digitais. Ele investiga como certificados podem ser usados indevidamente para obter acesso.
zhaoxuya520/reverse-skill
competition-agent-cloud
Faz seu agente analisar desafios de segurança em sistemas de IA e nuvem. Ele investiga como prompts, ferramentas e a nuvem podem ser explorados.
zhaoxuya520/reverse-skill
competition-android-hooking
Ajuda seu agente a investigar aplicativos Android. Ele analisa como os aplicativos funcionam internamente e como podem ser modificados ou explorados.
zhaoxuya520/reverse-skill
competition-browser-persistence
Faz seu agente analisar como sites guardam informações no seu navegador. Ele investiga cookies e outros dados para entender como as sessões funcionam.
zhaoxuya520/reverse-skill
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC