
KeyPatch Enhanced — IDA Pro-Plugin für symbolbewusstes x86/x64-Assembly-Patching, angetrieben von der Keystone Engine. Fork von Keypatch mit automatischer IDA-Symbolauflösung, RIP-relativer Kodierung und _↔. Namenskorrektur.
Basierend auf Keypatch (von Nguyen Anh Quynh & Thanh Nguyen), ein erweiterter Fork, modifiziert von Euarno.
Kernverbesserung: Direkte Verwendung von IDA-Symbolnamen in x86/x64-Assembler, das Plugin löst Adressen automatisch auf und generiert korrekte RIP-relative / rel32-Kodierungen.
Geben Sie im Keypatch-Dialog direkt Anweisungen mit Symbolnamen ein, ohne Adressen und Offsets manuell berechnen zu müssen:
call rc4_crypt ; berechnet automatisch den rel32-Relativoffset
jmp main ; wie oben
lea rcx, enc_0 ; x64: generiert automatisch lea rcx, [rip + disp32]
lea rax, Format ; wie oben
_ ↔ .)IDA zeigt manchmal . in der Datenbank als _ an (z. B. wird enc.0 als enc_0 angezeigt). Das Plugin versucht automatisch die Variante _ → . zu finden, sodass Sie sich nicht um das interne Speicherformat von IDA kümmern müssen.
| Typ | Beispiel | Verarbeitung |
|---|---|---|
| CALL / JMP / Jcc | call func_name | Symbol → absolute Adresse, Keystone berechnet rel32 |
| LEA (nacktes Symbol) | lea rcx, symbol | x64: → lea rcx, [rip + disp32]x86: → lea ecx, [addr] |
| LEA (zusammengesetzter Operand) | lea rcx, [rbp+0x120+Str] | Ersetzt nur das Symbol durch den Adresswert, behält die Ausdrucksstruktur bei |
| MOV offset | mov rax, offset symbol | x64: konvertiert zu lea rax, [rip + disp32]bei Überschreitung des Bereichs wird mov rax, imm64 verwendet |
Speicherzugriff [symbol] | mov rax, qword ptr [symbol] | [symbol] → [0xADDR], Keystone kodiert automatisch |
| Immediate-Symbol | push symbol | Symbol → 0xADDR |
Bei fehlgeschlagener Assemblierung zeigt das Ausgabefenster:
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
Kopieren Sie keypatch.py in das Plugin-Verzeichnis von IDA:
| System | Pfad |
|---|---|
| Windows | %APPDATA%\Hex-Rays\IDA Pro\plugins\ oder <IDA-Installationsverzeichnis>\plugins\ |
| macOS | ~/.idapro/plugins/ oder <IDA-Installationsverzeichnis>/plugins/ |
| Linux | ~/.idapro/plugins/ oder <IDA-Installationsverzeichnis>/plugins/ |
Starten Sie IDA neu.
Angenommen, Sie möchten bei 0x140001966 einen Sprung zu rc4_crypt patchen:
Assembly: call rc4_crypt
Das Plugin löst automatisch die Adresse von rc4_crypt auf, berechnet den rel32-Offset und generiert die korrekte E8 xx xx xx xx-Kodierung.
Assembly: lea rcx, enc_0
Das Plugin automatisch:
enc_0 auf (interner Name könnte enc.0 sein) → Adresse 0x140013050disp32 = 0x140013050 - (0x140001966 + 7)lea rcx, [rip + 0x176E3]nop), um den gesamten Bereich automatisch zu füllenlea und [symbol] beträgt ±2GB. Wenn das Symbol außerhalb des Bereichs liegt, meldet das Plugin einen Fehler.push symbol unter x64 muss die Symboladresse ≤ 0x7FFFFFFF sein (imm32-Vorzeichenerweiterung), andernfalls wird eine Warnung ausgegeben. Es wird empfohlen, stattdessen lea reg, symbol + push reg zu verwenden.lea rcx, sym; call func wird derzeit nicht unterstützt. Bitte patchen Sie Anweisung für Anweisung._ ↔ . Namenskorrektur, x64 RIP-relative Kodierungsunterstützung, verbesserte FehlerausgabeDiese modifizierte Version wird unter der MIT-Lizenz veröffentlicht. Siehe LICENSE-Datei.
Das Urheberrecht am ursprünglichen Keypatch-Code liegt bei den Originalautoren und wird unter GPL v2 veröffentlicht.