Lumen is a private Lumina server for IDA Pro, written in Rust and released under the MIT licence, that lets a reverse-engineering team run its own function-signature and comment database instead of sending that data to Hex-Rays' public Lumina service.
What it is
Lumen is a self-hosted replacement for the server side of IDA Pro's Lumina feature. It lives in the IDA Pro ecosystem: the client is IDA Pro 7.2 or newer, and Lumen answers the Lumina protocol requests that IDA normally sends to Hex-Rays' hosted infrastructure. The project is written in Rust, is backed by PostgreSQL, and ships precompiled Docker images alongside instructions for building from source with a Rust toolchain. A public instance runs at lumen.abda.nl, and the protocol research behind the implementation is documented separately by the author. Configuration lives in a TOML file, and the binary is started with a single command.
The concrete problem it solves is data ownership and sharing within a team. IDA's built-in Lumina features let an analyst quickly identify functions that were reversed in the past, but the stock service is a shared public pool. A private Lumina server puts that signature store behind a fence the team controls, while still working through IDA's native Lumina interface. The README is explicit about what IDA may transmit to a Lumen server: the IDA key, hostname, IDB path, original file path, file MD5, function signature, stack frames, and comments. Lumen therefore replaces both the public Lumina endpoint and any ad-hoc practice of sharing recovered names and comments by hand.
Key capabilities
- Stores function signatures so an analyst and their team can identify functions found in the past using IDA's built-in Lumina features.
- Persists data in PostgreSQL, with schema managed through Diesel migrations run via
diesel --config-file common/diesel.toml.
- Provides an experimental HTTP API for querying the database for comments by file hash or function hash.
- Supports mixed transport on separate listeners, where a
[[lumina.listeners]] entry is plain TCP unless its tls table includes a certificate, allowing TLS on one port and plain TCP on another.
- Handles IDA's pinned-certificate requirement by generating a
hexrays.crt for the IDA install directory, since adding a self-signed certificate to the system root store does not work.
- Accepts custom TLS material through a PKCS#12 file (
.p12/.pfx) with its password supplied as PKCSPASSWD in .env.
- Runs from a
config.toml supplied at startup with ./lumen -c config.toml.
Who uses it and how
- Reverse-engineering teams that want signature and comment sharing scoped to their own group rather than the public Lumina pool.
- Malware analysts and incident responders working in environments where IDB paths, hostnames, and file MD5s must not leave the organisation's own infrastructure.
- Teams running a mixed IDA client base, configuring TLS-capable clients against port
1234 and plain clients against port 1235 with LUMINA_TLS = NO.
- Organisations that prefer a containerised deployment, using the provided
docker-compose.yml with a ./dockershare directory for custom configuration and certificates.
- Analysts on IDA Pro 8.1 or newer, who must remove existing
LUMINA settings from ida.cfg or idauser.cfg before pointing IDA at a private server.
Getting started
The recommended path is Docker: install docker-engine and docker-compose, optionally drop a custom config at ./dockershare/config.toml and a PKCS#12 key at ./dockershare, then run docker-compose up. Building from source instead requires a Rust toolchain, a PostgreSQL instance, and diesel migrations before cargo build --release.
How it compares
The facts provided name no comparable tools, and no list of paid products that Lumen replaces is included, so no like-for-like contrast can be drawn from the available material. On the evidence given, it stands alone in this registry.
When to use it — and when not to
A self-hoster must operate PostgreSQL, run Diesel migrations, and manage TLS material, including the pinned-certificate override that requires placing hexrays.crt in every IDA installation directory. Anyone unwilling to run a database and a certificate workflow, or who needs a managed service with support, should not choose it. The README excerpt is also truncated mid-configuration, so parts of the TLS and setup guidance are not fully verifiable from the material available here.
project readme (upstream, from github) — read inline
Lumen
A private Lumina server that can be used with IDA Pro 7.2+.
lumen.abda.nl runs this server.
You can read about the protocol research here.
Features
- Stores function signatures so you (and your team) can quickly identify functions that you found in the past using IDA's built-in Lumina features.
- Backed by PostgreSQL
- Experimental HTTP API that allows querying the database for comments by file or function hash.
Getting Started
Docker Method (Recommended)
In this method precompiled docker images will be downloaded, All you need is docker-compose.yml.
- Install
docker-engine and docker-compose.
- If using a custom TLS certificate, copy the private key (
.p12/.pfx extension) to ./dockershare and set the key password in .env as PKCSPASSWD.
- If using a custom Lumen config, copy it to
./dockershare/config.toml.
- Otherwise, or if you have finished these steps, just run
docker-compose up.
- Regardless, if TLS is enabled in the
config.toml, a hexrays.crt will be generated in ./dockershare to be copied to the IDA install directory.
Building from source with Rust
git clone https://github.com/naim94a/lumen.git
Get a rust toolchain: https://rustup.rs/
cd lumen
Setup a the database
install postgres
install diesel-cli and run migrations:
cargo install diesel_cli --no-default-features -Fpostgres
diesel --config-file common/diesel.toml \
--database-url postgres://postgres:password@localhost/lumen \
migration run
cargo build --release
Usage
./lumen -c config.toml
Configuring IDA
IDA Pro >= 8.1
If you used LUMEN in the past, remove the LUMINA settings in the ida.cfg or idauser.cfg files, otherwise you will get a warning about
bad config parameters.
Setup under Linux :
#!/bin/sh
export LUMINA_TLS=false
$1
- save as ida_lumen.sh, "chmod +x ida_lumen.sh", now you can run IDA using "./ida_lumen.sh ./ida" or "./ida_lumen ./ida64"
Setup under Windows :
set LUMINA_TLS=false
%1
- save as ida_lumen.bat, now you can run IDA using "./ida_lumen.bat ida.exe" or "./ida_lumen.bat ida64.exe"
Setup IDA
- Go to Options, General, Lumina. Select "Use a private server", then set your host and port and "guest" as username and password. Click on ok.
IDA Pro The following information may get sent to lumen server: IDA key, Hostname, IDB path, original file path, file MD5, function signature, stack frames & comments.
- In your IDA's installation directory open "cfg\ida.cfg" with your favorite text editor (Example: C:\Program Files\IDA Pro 7.5\cfg\ida.cfg)
- Locate the commented out
LUMINA_HOST, LUMINA_PORT, and change their values to the address of your lumen server.
- If you didn't configure TLS, Add "LUMINA_TLS = NO" after the line with
LUMINA_PORT.
Example:
LUMINA_HOST = "192.168.1.1";
LUMINA_PORT = 1234
// Only if TLS isn't used:
LUMINA_TLS = NO
Configuring TLS
A listener is plain TCP unless its tls table includes a certificate. This permits both connection types on separate ports:
[lumina]
server_name = "lumen"
[[lumina.listeners]]
bind_addr = "0.0.0.0:1234" # TLS
[lumina.listeners.tls]
server_cert = "lumen.p12"
[[lumina.listeners]]
bind_addr = "0.0.0.0:1235" # plain TCP
Configure TLS-capable IDA clients to use port 1234; configure plain clients to use port 1235 and set LUMINA_TLS = NO.
IDA Pro uses a pinned certificate for Lumina's communcation, so adding a self-signed certificate to your root certificates won't work.
Luckily, we can override the hard-coded public key by writing a DER-base64 encoded certificate to "hexrays.crt" in IDA's install directory.
You may find the following commands useful:
# create a certificate
openssl req -x509 -newkey rsa:4096 -keyout lumen_key.pem -out lumen_crt.pem -days 365 -nodes
# convert to pkcs12 for lumen; used for `lumen.tls` in config
openssl pkcs12 -export -out lumen.p12 -inkey lumen_key.pem -in lumen_crt.pem
# export public-key for IDA; Copy hexrays.crt to IDA installation folder
openssl x509 -in lumen_crt.pem -out hexrays.crt
No attempt is made to merge function data - this may cause a situation where metadata is inconsistent.
Instead, the metadata with the highest calculated score is returned to the user.
Developed by Naim A.; License: MIT.