Repository navigation
Offline export
misp-ghidra no longer requires a reachable MISP instance. Analysis can now run on an isolated or air-gapped machine and produce a standard MISP event as a local JSON file, to be imported into MISP later from wherever that is possible.
- Headless:
--offlineexports to a JSON file instead of sending to the MISP API, and--out-dirselects the destination directory (defaults to the working directory). The file is written asmisp_event_<event-uuid>.jsonusingevent.to_json(), so it is an ordinary MISP event document with no conversion step on import. - GUI: the script now asks where the run should go — "Export to MISP Server" or "Export locally to JSON file (Offline)" — and then prompts for an output directory.
- Automatic fallback: if the MISP configuration cannot be loaded or the server cannot be reached, the run degrades to offline mode and still produces the JSON file. Previously a missing
config.tomlor an unreachable server ended the run and the analysis was lost.
Offline mode carries the full object model, not a reduced one: function objects, object references and call-tree relations are all built locally. Two operations still need a live server and report that clearly instead of failing — searching functions in MISP, and adding call-tree relations to an already existing event.
Fixed
Two bugs in filter_functions (mispghidra/PyMISPGhidraScripts.py), both reported and fixed by @elhoim.
- Function filtering aborted on the first thunk (#4).
namewas read by the thunk and import log lines beforename = func.getName()bound it. The first thunk encountered — typically the first PLT entry of an ELF — raisedNameError, whichIOHandler.handle_exception_messagere-raised asValueError, ending the whole run instead of skipping one function. On later iterations the filter log showed the previous function's name. Affects any caller passingignored_functions, including the shippedGUI-MISP-fetch-comments-for-all-functions.py. --min-blockshad no effect (#3). The basic-block size check loggedIgnored small funcbut did notcontinue, sofuncs.append(func)ran anyway and every function below the threshold was still exported. Runs using--min-blocks NwithN > 0produced events containing exactly the small functions the operator asked to exclude. The default of0was never affected.
Changed
misp-objectsis now a git submodule. Clone with--recurse-submodules, or rungit submodule update --initin an existing checkout.- The
ghidra-functionobject definition was reworked andghidra-program-metadatatrimmed.
Full changelog: v0.1.0...v0.2.0