7.6 KiB
7.6 KiB
name, description, version, platforms, depends_on, metadata
| name | description | version | platforms | depends_on | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| reverse-engineering-binary | Use for binary reverse engineering: disassembly, decompilation, PE/ELF/Mach-O analysis, IDA Pro, Ghidra, radare2, binary patching, crackme solving, malware analysis, unpacking, signature analysis, and any task involving compiled binary inspection or modification. | 1.0.0 |
|
|
Reverse Engineering — Binary Analysis
Trigger Conditions
- Disassembling or decompiling binaries (PE, ELF, Mach-O)
- IDA Pro, Ghidra, radare2, Binary Ninja workflows
- Analyzing compiled code without source
- Binary patching, crackme/CTF challenges
- Malware reverse engineering, IOC extraction
- Function identification, control flow reconstruction
- String extraction, crypto constant identification
- Import/export table analysis, IAT reconstruction
- Binary instrumentation (Frida, DynamoRIO, Pin)
- Shellcode analysis, payload decoding
- Firmware extraction, embedded binary RE
- Comparing binary diffs, version analysis
- Writing loaders, unpackers, decoders
Core Methodology
1. Static Analysis Pipeline
file identification → entropy analysis → string extraction →
import analysis → function identification → control flow graph →
data flow analysis → decompilation → manual verification
File identification:
file,binwalk,detect_it_easy(DIE)- PE:
pefile,peview,CFF Explorer - ELF:
readelf,objdump,elfutils - Mach-O:
otool,MachOView
Entropy analysis:
- High entropy regions → packed/encrypted sections
binwalk -E,ent, custom entropy scanner- Section boundaries vs entropy spikes
String extraction:
strings -n 4,floss(FireEye),rabin2 -z- Unicode strings:
strings -e l,rabin2 -zz - Encrypted strings: constant analysis, decryption routine location
Import analysis:
- PE: IAT parsing, delayed imports, forwarders
- ELF:
.dynsym,.got.plt, symbol versioning - Hidden imports: API hashing, GetProcAddress/LoadLibrary chains
2. Dynamic Analysis Pipeline
sandbox execution → API monitoring → memory dumping →
network capture → behavior analysis → IOC extraction
API monitoring:
- Windows: API Monitor, ProcMon, ETW tracing
- Linux:
strace,ltrace,bpftrace - Cross-platform: Frida, DynamoRIO
Memory analysis:
- Process dumping:
Process Hacker,dumpcap, custom dumpers - Memory scanning:
Volatility,Rekall,LiME - String reconstruction from memory, decrypted payload extraction
3. Decompilation & Manual RE
IDA Pro workflow:
1. Load binary → auto-analysis → review entry points
2. Identify strings → cross-reference → locate key functions
3. Rename functions/variables based on behavior
4. Create structs for data structures
5. Apply FLIRT signatures for known libraries
6. Graph view for complex control flow
7. Pseudocode (F5) → manual correction
8. Write IDC/IDAPython scripts for automation
Ghidra workflow:
1. Import → auto-analyze (all analyzers)
2. Symbol tree → identify main/entry
3. Data type manager → create custom structs
4. Decompile → fix variable types
5. Script manager → Python/Java automation
6. Version tracking → binary diffing
7. Function graph → identify obfuscation patterns
radare2 workflow:
r2 binary
aaa # analyze all
afl # list functions
pdf @ main # print disassembly function
pdg @ main # decompile (if available)
izz # strings
ii # imports
is # symbols
axt @ <addr> # cross-references to
axf @ <addr> # cross-references from
4. Binary Patching
Common patch targets:
- License checks:
test eax, eax→xor eax, eax(always true) - Conditional jumps:
je→jmporjne - Function skipping:
call func→nop× 5 - Return value modification:
mov eax, 1beforeret - Anti-debug bypass:
IsDebuggerPresent→ return 0
PE patching:
import pefile
pe = pefile.PE("target.exe")
# Find target RVA
for section in pe.sections:
if section.Name.startswith(b'.text'):
text_rva = section.VirtualAddress
text_raw = section.PointerToRawData
# Convert RVA to file offset
def rva_to_offset(pe, rva):
for s in pe.sections:
if s.VirtualAddress <= rva < s.VirtualAddress + s.Misc_VirtualSize:
return rva - s.VirtualAddress + s.PointerToRawData
# Patch
offset = rva_to_offset(pe, target_rva)
pe.set_bytes_at_offset(offset, b'\x90' * 5) # NOP
pe.write("target_patched.exe")
5. Anti-Analysis Detection & Bypass
Anti-debug techniques:
IsDebuggerPresent,CheckRemoteDebuggerPresentNtQueryInformationProcess(ProcessDebugPort)GetTickCounttiming checksRDTSCinstruction timing- SEH-based debugger detection
- Hardware breakpoint detection (
GetThreadContext)
Bypass methods:
- Patch detection functions to return false
- Frida script to hook and override return values
- Hide debugger from process list
- Use kernel debugger (WinDbg) for kernel-mode targets
- Time manipulation for timing-based checks
Anti-VM techniques:
- MAC address checks (00:0C:29 = VMware)
- Registry keys (HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0)
- CPUID hypervisor bit
- DMI/SMBIOS strings
- Specific drivers (vmci, vmmouse, VBoxGuest)
6. Crypto Identification
Constant-based identification:
MD5: 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476
SHA1: 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0
SHA256: 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, ...
AES: S-box lookup table (256 bytes starting 0x63, 0x7C, 0x77, ...)
RC4: Key-scheduling algorithm pattern
Base64: 64-char alphabet string
Search patterns:
rabin2 -x 67452301EFCDAB89(SHA1 constants)- IDA: Search → Immediate Value → hex constants
- YARA rules for crypto implementations
7. Automation Scripts
IDAPython — find all API hash calls:
from idaapi import *
from idautils import *
def find_api_hash_calls(hash_value):
"""Find calls to API hash resolver with specific hash."""
results = []
for func_ea in Functions():
for block in FuncItems(func_ea):
for xref in XrefsTo(block, 0):
if get_operand_value(xref.frm, 0) == hash_value:
results.append(xref.frm)
return results
Frida — trace all imports:
Interceptor.attach(Module.getExportByName(null, 'CreateFileW'), {
onEnter: function(args) {
console.log('CreateFileW(' + args[0].readUtf16String() + ')');
}
});
Implementation Standards
- All RE artifacts are complete: full scripts, working patches, complete analysis
- Provide both static and dynamic analysis approaches
- Include automation scripts for repetitive tasks
- Document findings in structured format
- Cross-reference findings across multiple tools
- No partial analysis — complete or nothing
Output Format
For binary RE tasks:
- Identification — file type, architecture, compiler, packer
- Static Analysis — strings, imports, key functions, control flow
- Dynamic Analysis — behavior, API calls, network, file operations
- Key Findings — algorithms, crypto, protocols, backdoors
- Artifacts — patches, scripts, YARA rules, IOCs
Всё, брат.
Related
skill reverse-engineering-full — полный REskill reverse-engineering-obfuscation — деобфускацияskill binary-exploitation — бинарные эксплойтыskill fuzzing — фазинг