Гайд Запуск собственного Lumina сервера

Участник
Статус
Оффлайн
Регистрация
15 Янв 2021
Сообщения
492
Реакции[?]
289
Поинты[?]
79K
Приветствую элиту реверc-инжиниринга. Я бы хотел поделиться с вами способом запуска собственного Lumina сервера под любимую IDA.

Стоить начать с того, зачем же нужен этот ваш Lumina сервер ?
Всё просто. Так как в основном форум направлен на читы для всяких игр, эти игры имеют свойство обновляться, а надо ведь обновлять некоторый оффсеты вручную и всякое такое. Чтобы каждый раз не переносить свой мега реверс из старого бинарника в новый есть несколько способов ( как я предполагаю ), но самым лучшим будет пушить весь реверс на сервер и сохранять его там.

Как это собственно работает ?
Достаточно гениально и просто. IDA собирает все ваши функции, которые вы ренеймнули, создаёт для них паттерн и отправляет в таблицу в БД, где это и сохраняется. Далее, когда вы загрузите новый бинарник, просто получает все функции с сервера, делает паттерны и то что совпало заменяет. Это вот простыми словами для понимания.

Для чего нужен именно собственный сервер ?
Вы можете воспользоваться и оригинальным lumina сервером от IDA, если у вас есть лицензия, или использовать какие-либо публичные сервера. Но в таком случае всё будет являться публичным, то есть любой другой человек при обновлении бинаря тоже получит ваш реверс. Ну и так же это может быть полезно для какой-то команды, которая не хочет постоянно обмениваться .idb например.

Итак, думаю теперь понятно, зачем нам нужен свой собственный сервер. Приступим к самому интересному. Я буду использовать готовое решение, так как за меня это реализовали более умные люди. Репозиторий:
Пожалуйста, авторизуйтесь для просмотра ссылки.
.

Настройка PostgreSQL

Собственно, что нам нужно ? Первым делом скачиваем PostgreSQL сервер (
Пожалуйста, авторизуйтесь для просмотра ссылки.
). После того как вы всё успешно установили, автоматически создастся дефолтный сервер PostgreSQL, который нам и нужен. В самом репозитории есть есть уже готовый скрипт для создания нужных нам таблиц в базе, данных папка common/migrations/2023-02-01-2107-14_init в моём случае. Открываем sql файл и заходим в pgAdmin 4, который установился при установке нашего сервера. Авторизируемся и заходим в Schemas -> public -> ПКМ -> CREATE Script. Оставляем уже заранее созданный код и вставляем скопированный код из скрипта на репозитории. Получится что-то такое:

SQL:
-- SCHEMA: public

-- DROP SCHEMA IF EXISTS public ;

CREATE SCHEMA IF NOT EXISTS public
    AUTHORIZATION pg_database_owner;

COMMENT ON SCHEMA public
    IS 'standard public schema';

GRANT USAGE ON SCHEMA public TO PUBLIC;

GRANT ALL ON SCHEMA public TO pg_database_owner;

CREATE TABLE IF NOT EXISTS users (
    id SERIAL PRIMARY KEY,
    lic_id bytea,
    lic_data bytea,
    hostname VARCHAR(260),
    first_seen TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE UNIQUE INDEX IF NOT EXISTS user_rec ON users(lic_id,lic_data,hostname);
CREATE UNIQUE INDEX IF NOT EXISTS user_hn_null ON users (lic_id,lic_data, (hostname IS NULL)) WHERE hostname is NULL;

CREATE TABLE IF NOT EXISTS files (
    id SERIAL PRIMARY KEY,
    chksum bytea UNIQUE /* file chksum */
);

CREATE TABLE IF NOT EXISTS dbs (
    id SERIAL PRIMARY KEY,
    file_path VARCHAR(260),
    idb_path VARCHAR(260),
    file_id INTEGER REFERENCES files(id),
    user_id INTEGER REFERENCES users(id)
);
CREATE UNIQUE INDEX IF NOT EXISTS db_paths ON dbs(file_id, user_id, idb_path);

CREATE TABLE IF NOT EXISTS funcs (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    len INTEGER NOT NULL,
    db_id INTEGER REFERENCES dbs(id) NOT NULL,
    chksum bytea, /* function chksum */
    metadata bytea,
    rank INTEGER,

    push_dt TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
    update_dt TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE UNIQUE INDEX IF NOT EXISTS funcs_db ON funcs(chksum, db_id);
CREATE INDEX IF NOT EXISTS funcs_ranking ON funcs(chksum,rank);
CREATE INDEX IF NOT EXISTS func_chksum ON funcs(chksum);
Выполняем. Должно выполниться без ошибок ( если они есть, включаем голову и фиксим ). Отлично! Самый сложный этап пройден, осталось настроить сам Lumen.

Настройка Lumen
Скачиваем из релизов архив и распаковываем в удобное место. Либо можете сами скомпилить, инструкция есть на
Пожалуйста, авторизуйтесь для просмотра ссылки.
. Отлично, теперь нужно настоить .toml конфиг. Можете создать новый, либо просто отредачить существующий дефолтный. Полу bind_addr оставляем без изменений ( кроме порта, если он у вас занят или хотите другой ). Оставляем use_tls на false и переходим к connection_info, адрес оставляем, а вот порт и пароль ставим тот, который указали при установке PostgreSQL сервера. В моём случае это порт 5432 и пароль 541254. Ну и всё остальное оставляем по дефолту. Получится что-то такое:

Bash:
[lumina]
# address that lumen will listen on for IDA to connect to
bind_addr = "0.0.0.0:1234"
# indicates if TLS should be used for connections, if true the `lumina.tls` section is required.
use_tls = false
# server display name; appears in IDA output window
server_name = "lumen"

# only required when `use_tls` is set to true.
[lumina.tls]
# Specify the server's certificate.
# Clients connecting to the server must match this certificate.
# If the certificate is password protected, the password can be specified in the `PKCSPASSWD` environment variable.
server_cert = "path/to/server_crt"

[database]
# Specifies a postgresql connection string. All variables can be found here: https://docs.rs/tokio-postgres/0.6.0/tokio_postgres/config/struct.Config.html
connection_info = "host=127.0.0.1 port=5432 user=postgres password=541254"
# Sets if the database connection should be made using TLS.
use_tls = false
# If the database requires a secure connection, paths to server-ca and client-id certificates can be set here:
server_ca = "db_ca.pem"
client_id = "db_id.p12"

# comment out this section to disable api server
# api server allows to query the database for comments by file or function hash.
[api_server]
bind_addr = "0.0.0.0:8082"
И в принципе практически всё, мы на финишной прямой, осталось только подредачить конфиг IDA и всё. Лезем в папку где установлен сам дизассемблер, и идём к файлу по пути cfg/ida.cfg. Открываем например через блокнот ищем строку LUMINA_HOST ( она закомментирована ) и вставляем свои данные. Получится что-то такое:

Bash:
LUMINA_HOST = "127.0.0.1";
LUMINA_PORT = 1234 // Порт который указывали в файле config-example.toml в поле bind_addr
LUMINA_TLS = NO
Переходим в папку с нашим Lumen'ом и создаём батник, в котором прописываем "lumen.exe -c config-example.toml". Запускаем. И если нет никаких ошибок, то вы сделали всё правильно. Заходим в IDA ( если была открыта, перезапустите ) и тыкаем на вкладку Lumina, жмём Push all metadata, смотрим чтобы не ббыло никаких ошибок в окне консоли сервера и всё, вы установили приватный Lumina сервер ! Теперь можете сохранять все свои наработки на сервере и радоваться жизни.

Заключение
В заключение хотел бы сказать, что гайд был создан для тех кто не смог нормально разобраться, как это сделать ( в вики не дана нормально инфа про миграции таблиц ). А так же, чтобы повысить, скажем так, уровень навыков начинающим реверсерам и облегчить им жизнь. Если есть какие-то недочеты, я всегда открыт к критике, если она по делу и по факту. Счастья Вам.
 
Сверху Снизу