Кроссплатформенная библиотека для двоичной отладки и взлома памяти, написанная на Rust.
minidump
, PE file
и даже пространство ядра ОС с дополнительным расширением. В udbg есть два основных типа интерфейсов: интерфейсы целевой информации и интерфейсы отладки.
Интерфейсы целевой информации, абстрагированные как признак UDbgTarget
, представляют собой наблюдаемую цель отладки, в большинстве случаев это active process
, а также это может быть minidump
, PE file
или даже пространство ядра ОС с дополнительным расширением.
UDbgTarget
содержит эти функции, memory operation
(чтение/запись/перечисление), перечисление module
, перечисление thread
, перечисление handle/FDs
и т. д. На основе этих функций мы можем реализовать некоторые утилиты для различных типов целей, такие как дамп модуля , поиск в памяти , сканирование перехватчиков , сканирование вредоносного кода и т. д.
Интерфейсы отладки, абстрагированные как особенность UDbgEngine
, в основном обеспечивают возможность управления процессом. Существует default implementation
, обычно она включает в себя функции отладки в Windows и интерфейсы ptrace в Linux.
Большинство из вышеперечисленных интерфейсов были разработаны как динамические объекты, что удобно для привязки сценариев, а udbg по умолчанию предоставляет lua bindings
.
Текущее состояние целевых информационных интерфейсов
Платформа/Цель | Работа с памятью | Список памяти | Нить | Модуль/Символ | Список дескрипторов/FD |
---|---|---|---|---|---|
Процесс Windows | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Linux-процесс | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Процесс MacOs | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Минидамп | ✔️ (только чтение) | ✔️ | ✔️ | ✔️ | ? |
PE-файл | ✔️ (только чтение) | ✔️ | - | - | - |
Текущее состояние интерфейсов отладки
Платформа/Цель | Символ отладки | Точка останова | Точка наблюдения (HWBP) | Множественная цель |
---|---|---|---|---|
Windows(x86/x64) | ✔️ (ПДБ) | ✔️ | ✔️ | ✔️ |
Windows (aarch64) | ✔️ (ПДБ) | ✔️ | ✔️ | ✔️ |
Linux(x86_64) | ✔️ (эльф) | ✔️ | ✔️ | ✔️ |
Linux (aarch64) | ✔️ (эльф) | ✔️ | ✔️ | ✔️ |
src/test.rs
fn target
src/test.rs
fn test_debug