offensive-tools/rev/binaryninja/SKILL.md
Commercial reverse engineering platform with decompiler, multi-architecture IL system (LLIL/MLIL/HLIL), and Python scripting API. Use when performing static analysis with decompilation, writing automated RE scripts, analyzing firmware or multi-arch binaries, or when a programmable disassembler with type recovery is needed.
npx skillsauth add aeondave/malskill binaryninjaInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Programmable RE platform — disassembler + decompiler + multi-level IL + Python API.
Disassembly / HLIL (decompiler) / MLIL / LLIL / Graph| View | Purpose | |------|---------| | Graph | Control flow graph of current function | | Linear | Linear disassembly (IDA-style) | | HLIL | High-Level IL — decompiler (C-like pseudocode) | | MLIL | Medium-Level IL — variables recovered, stack abstracted | | LLIL | Low-Level IL — close to assembly, normalized | | Hex | Raw hex editor | | Strings | All detected strings | | Cross References | XREF list for selected symbol |
| Key | Action |
|-----|--------|
| G | Go to address or symbol |
| N | Rename symbol |
| Y | Change type |
| L | Change label |
| / | Add comment |
| Tab | Switch between graph/linear |
| H | Toggle between IL levels (LLIL→MLIL→HLIL→Disasm) |
| X | Cross references |
| Ctrl+E | Edit bytes |
| P | Create function at cursor |
| U | Undefine |
| D | Change data type |
| Ctrl+Shift+M | Open script console |
Binary Ninja's defining feature — layered IL system:
LLIL — Low-Level IL: one-to-one with assembly but normalized. Architecture-independent register/flag access.
MLIL — Medium-Level IL: stack variables promoted to named variables; constant propagation; dead store elimination. Good for cross-function analysis.
HLIL — High-Level IL: decompiler output. Loops, if/else, switch, and variable declarations recovered. Best for human reading.
# Access different IL layers for a function
func = bv.get_function_at(here)
for block in func.hlil:
for inst in block:
print(f" {inst.address:#x}: {inst}")
# Script console: View -> Script Console (or Ctrl+Shift+M)
# Or headless: import binaryninja; bv = binaryninja.load("/path/to/binary")
# List all functions
for func in bv.functions:
print(f"{func.start:#x}: {func.name}")
# Get function at address
func = bv.get_function_at(0x401000)
print(func.name, func.start, func.total_bytes)
suspicious = ['VirtualAlloc', 'CreateRemoteThread', 'WriteProcessMemory',
'LoadLibrary', 'GetProcAddress', 'connect', 'send']
for func in bv.functions:
for block in func.hlil:
for inst in block:
if inst.operation == HighLevelILOperation.HLIL_CALL:
target = str(inst.dest)
for s in suspicious:
if s.lower() in target.lower():
print(f" {func.name} @ {inst.address:#x} calls {target}")
for s in bv.strings:
if any(kw in s.value.lower() for kw in ['http', 'password', 'key', 'exec']):
refs = bv.get_code_refs(s.start)
for ref in refs:
func = bv.get_functions_containing(ref.address)
if func:
print(f" '{s.value}' referenced in {func[0].name} @ {ref.address:#x}")
func = bv.get_function_at(0x401234)
for block in func.mlil:
for inst in block:
if inst.operation == MediumLevelILOperation.MLIL_CALL:
if 'VirtualAlloc' in str(inst):
if len(inst.params) > 3:
prot = inst.params[3]
print(f" VirtualAlloc protect={prot} @ {inst.address:#x}")
#!/usr/bin/env python3
"""Headless Binary Ninja analysis."""
import binaryninja
bv = binaryninja.load("/path/to/binary", update_analysis=True)
if bv is None:
exit(1)
bv.update_analysis_and_wait()
print(f"Functions: {len(bv.functions)}")
print(f"Strings: {len(bv.strings)}")
print(f"Sections: {[s.name for s in bv.sections.values()]}")
for func in bv.functions:
for ref in func.call_sites:
callee = bv.get_function_at(ref.mlil.dest.constant)
if callee and not callee.name.startswith("sub_"):
print(f" {func.name} -> {callee.name}")
bv.file.close()
# Look for crypto constants (AES S-box)
aes_sbox = bytes([0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5])
results = bv.find_all_data(bv.start, bv.end, aes_sbox)
for addr in results:
print(f" AES S-box found at {addr:#x}")
refs = bv.get_code_refs(addr)
for ref in refs:
print(f" Referenced from {ref.address:#x}")
# Install via Plugin Manager: Edit -> Preferences -> Plugin Manager
# Useful plugins:
# - SigMaker: create IDA-compatible signatures
# - Syscall identifier: annotate syscall numbers
# - binja-msdn: auto-annotate WinAPI parameters
| File | When to load | |------|--------------| | references/scripting-recipes.md | Python API recipes for common analysis tasks | | references/il-guide.md | LLIL/MLIL/HLIL operation types and traversal patterns |
data-ai
Scoped routing: Linux operator; hosts, sessions, users, services, packages, logs, containers, SSH, network paths, privilege evidence.
development
Offensive methodology for ICS/OT/SCADA environments in authorized industrial penetration testing and red team operations. Use when assessing PLCs, RTUs, HMIs, engineering workstations, historians, or field devices running Modbus, DNP3, EtherNet/IP, S7comm/S7+, Profinet, IEC 60870-5-104, BACnet, or OPC-UA. Covers passive OT network enumeration, protocol-level device interrogation, PLC coil/register read-write attacks, HMI session exploitation, historian and engineering workstation compromise, and safe escalation rules for critical infrastructure scope. Does not cover: general IT network exploitation (network-technique), physical hardware interfaces UART/JTAG/SPI (hardware-technique), wireless sensor network attacks (wireless-technique), RF/SDR signal analysis (hardware-ctf or wireless-technique), or CTF-framed ICS lab tasks (ics-ctf).
tools
Offensive methodology for authorized game security assessments, game client security research, and game-adjacent penetration testing in real-world engagements. Use when assessing game clients for cheating vulnerabilities, testing anti-cheat effectiveness, auditing game server protocols for score manipulation or economic fraud, reverse engineering game DRM or license validation, analyzing game save file protection, or assessing game mod/plugin security. Covers: process memory scanning and manipulation (Cheat Engine methodology), game binary reversing for license and DRM bypass, game network protocol analysis and packet replay, anti-cheat mechanism analysis, save file format reversing and tampering, speed hack and value injection techniques. Does NOT cover: CTF game challenges (game-ctf), game engine source code auditing (web-exploit-technique or vuln-search-technique for the backend), or general binary exploitation (pwn-ctf or reversing-technique).
development
Auth assessment: hardware/embedded methodology; UART/JTAG/SWD/SPI/I2C, firmware extraction, boot/debug paths, embedded OS evidence.