MCPcopy Index your code
hub / github.com/DennyDai/headless-ida

github.com/DennyDai/headless-ida @0.6.7

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.6.7 ↗ · + Follow
40 symbols 187 edges 13 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Headless IDA

Headless IDA

Latest Release PyPI Statistics License

Install

pip install headless-ida

Usage

[!TIP] Headless IDA supports the latest idalib. Just provide the idalib path instead of idat64 to use it as the backend.

Use it as a normal Python module.

# Initialize HeadlessIda
from headless_ida import HeadlessIda
headlessida = HeadlessIda("/path/to/idat64", "/path/to/binary")

# Import IDA Modules (make sure you have initialized HeadlessIda first)
import idautils
import ida_name

# Or Import All IDA Modules at Once (idaapi is not imported by default)
# from headless_ida.ida_headers import *

# Have Fun
for func in idautils.Functions():
    print(f"{hex(func)} {ida_name.get_ea_name(func)}")

Use it as a command line tool.

# Interactive Console
$ headless-ida /path/to/idat64 /path/to/binary
Python 3.8.10 (default, Nov 14 2022, 12:59:47) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import idautils
>>> list(idautils.Functions())[0:10]
[16384, 16416, 16432, 16448, 16464, 16480, 16496, 16512, 16528, 16544]
>>> 


# Run IDAPython Script
$ headless-ida /path/to/idat64 /path/to/binary idascript.py


# One-liner
$ headless-ida /path/to/idat64 /path/to/binary -c "import idautils; print(list(idautils.Functions())[0:10])"


# In case you like IPython
$ headless-ida /path/to/idat64 /path/to/binary -c "import IPython; IPython.embed();"

Advanced Usage

Remote Server

Start a Headless IDA server

$ headless-ida-server /path/to/idat64 localhost 1337 &

Connect to the server in Python script

# Initialize HeadlessIda
from headless_ida import HeadlessIdaRemote
headlessida = HeadlessIdaRemote("localhost", 1337, "/path/to/local/binary")

# Import IDA Modules (make sure you have initialized HeadlessIda first)
import idautils
import ida_name

# Have Fun
for func in idautils.Functions():
    print(f"{hex(func)} {ida_name.get_ea_name(func)}")

Connect to the server in command line

# Interactive Console
$ headless-ida localhost:1337 /path/to/local/binary
# Run IDAPython Script
$ headless-ida localhost:1337 /path/to/local/binary idascript.py
# One-liner
$ headless-ida localhost:1337 /path/to/local/binary -c "import idautils; print(list(idautils.Functions())[0:10])"

Resources

Known Issues

from XXX import *

  • Using from XXX import * syntax with certain ida modules (like idaapi, ida_ua, etc.) is currently unsupported due to SWIG and RPyC compatibility issues. We recommend importing specific items with from XXX import YYY, ZZZ, or importing the entire module using import XXX.
  • The issue arises because SWIG, employed for creating Python bindings for C/C++ code, generates intermediary objects (SwigVarlink) that RPyC, our remote procedure call mechanism, cannot serialize or transmit correctly.

Core symbols most depended-on inside this repo

import_module
called by 7
src/headless_ida/client.py
escape_path
called by 4
src/headless_ida/helpers.py
override_import
called by 2
src/headless_ida/client.py
resolve_ida_path
called by 2
src/headless_ida/helpers.py
get_function_by_name
called by 2
examples/decompile_main_multibins.py
decompile_function
called by 2
examples/decompile_main_multibins.py
_idalib_backend
called by 1
src/headless_ida/client.py
_ida_backend
called by 1
src/headless_ida/client.py

Shape

Method 24
Function 9
Class 7

Languages

Python100%

Modules by API surface

src/headless_ida/client.py11 symbols
src/headless_ida/server.py8 symbols
src/headless_ida/helpers.py6 symbols
src/headless_ida/ida_script.py5 symbols
examples/decompile_main_multibins.py4 symbols
src/headless_ida/cli.py2 symbols
examples/search_string_refs.py2 symbols
examples/decompile_main.py2 symbols

For agents

$ claude mcp add headless-ida \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact