
KeyPatch Enhanced — plugin do IDA Pro para patch de assembly x86/x64 com reconhecimento de símbolos, alimentado pelo Keystone Engine. Fork do Keypatch com resolução automática de símbolos do IDA, codificação relativa a RIP e correção de nomes _↔.
Baseado no Keypatch (por Nguyen Anh Quynh & Thanh Nguyen), este é um fork aprimorado modificado por Euarno.
Melhoria principal: usar diretamente nomes de símbolos do IDA em assembly x86/x64, com o plugin resolvendo automaticamente os endereços e gerando a codificação correta RIP-relative / rel32.
Digite instruções com nomes de símbolos diretamente na caixa de diálogo do Keypatch, sem precisar calcular manualmente endereços e deslocamentos:
call rc4_crypt ; calcula automaticamente o deslocamento relativo rel32
jmp main ; idem
lea rcx, enc_0 ; x64: gera automaticamente lea rcx, [rip + disp32]
lea rax, Format ; idem
_ ↔ .)O IDA às vezes exibe . do banco de dados como _ (por exemplo, enc.0 é exibido como enc_0). O plugin tenta automaticamente a variante _ → . na busca, sem que você precise se preocupar com o formato de armazenamento interno do IDA.
| Tipo | Exemplo | Tratamento |
|---|---|---|
| CALL / JMP / Jcc | call func_name | Símbolo → endereço absoluto, Keystone calcula rel32 |
| LEA (símbolo puro) | lea rcx, symbol | x64: → lea rcx, [rip + disp32]x86: → lea ecx, [addr] |
| LEA (operando composto) | lea rcx, [rbp+0x120+Str] | Substitui apenas o símbolo pelo valor do endereço, preservando a estrutura da expressão |
| MOV offset | mov rax, offset symbol | x64: converte para lea rax, [rip + disp32]se estiver fora do alcance, usa mov rax, imm64 |
Acesso à memória [symbol] | mov rax, qword ptr [symbol] | [symbol] → [0xADDR], Keystone codifica automaticamente |
| Símbolo como imediato | push symbol | Símbolo → 0xADDR |
Quando a montagem falha, a janela de saída exibe:
Keypatch: Keystone error: Invalid operand (KS_ERR_ASM_INVALIDOPERAND)
Keypatch: input asm : lea rcx, [rip + 0x176E3]
Keypatch: fixed asm : LEA RCX, [RIP + 0x176E3]
Keypatch: address : 0x140001966
pip install keystone-engine
Copie keypatch.py para o diretório de plugins do IDA:
| Sistema | Caminho |
|---|---|
| Windows | %APPDATA%\Hex-Rays\IDA Pro\plugins\ ou <diretório de instalação do IDA>\plugins\ |
| macOS | ~/.idapro/plugins/ ou <diretório de instalação do IDA>/plugins/ |
| Linux | ~/.idapro/plugins/ ou <diretório de instalação do IDA>/plugins/ |
Basta reiniciar o IDA.
Suponha que você queira aplicar patch em 0x140001966 com um salto para rc4_crypt:
Assembly: call rc4_crypt
O plugin resolve automaticamente o endereço de rc4_crypt, calcula o deslocamento rel32 e gera a codificação correta E8 xx xx xx xx.
Assembly: lea rcx, enc_0
O plugin automaticamente:
enc_0 (o nome interno pode ser enc.0) → endereço 0x140013050disp32 = 0x140013050 - (0x140001966 + 7)lea rcx, [rip + 0x176E3]nop) para preencher automaticamente todo o intervalolea e [symbol] tem alcance de ±2GB. Se o símbolo estiver fora do alcance, o plugin exibirá um erro.push symbol em x64 exige que o endereço do símbolo seja ≤ 0x7FFFFFFF (extensão de sinal imm32), caso contrário haverá um aviso. Recomenda-se usar lea reg, symbol + push reg.lea rcx, sym; call func. Aplique o patch instrução por instrução._ ↔ ., suporte à codificação RIP-relative em x64, saída de erros aprimoradaEsta versão modificada é distribuída sob a licença MIT. Consulte o arquivo LICENSE para detalhes.
Os direitos autorais do código original do Keypatch pertencem aos autores originais e são distribuídos sob a GPL v2.