DD

droidsaw/droidsaw

Developer tools

Эта страница переведена автоматически. Технические детали смотрите в оригинале. Открыть оригинал

35 stars 4 forks Качество 66 Тренд 16BSD-3-Clause

Декомпилятор Android Pure-Rust и пакет аудита безопасности. DEX → Java, Hermes → JavaScript. Кросс-слойный оттенок через мост React Native. CycloneDX SBOM + OpenVEX. CLI и MCP.

Обзор

Исполнитель: pmjv prahou. Подарок последнему магу Открытого клана. Droidsaw разбирает DEX-файл или пакет Hermes и собирает его обратно вместе байт за байтом — 5767 DEX-файлов из F-Droid, восстановленных бит-идентически в режиме сохранения, байт-код Hermes, проверенный на v84, v96, v98 и v99. Этот тест громко проваливается, когда у модели формата есть отверстие: неправильное смещение строкового стола на единицу, пропущенное требование выравнивания, забытый байт прокладки — повторно излучаемые байты расходятся, и тест говорит, где. Большинство инструментов Android RE работают на одном уровне; дроид-пила отслеживает значение JS через мост React Native в Java в качестве одного запятнанного пути. Передайте ему APK и он распаковывает контейнер, декомпилирует каждый слой и может пропускать выход через Semgrep и TruffleHog в одном проходе (аудит-режим = полный). Серверы CLI и MCP имеют общую командную поверхность. Чистая ржавчина, BSD-3-Clause. Груз извлекает ящики библиотеки droidsaw-* из crates.io и собирает все на месте.

Обзор (машинный перевод)

Исполнитель: pmjv prahou. Подарок последнему магу Открытого клана.

Droidsaw разбирает DEX-файл или пакет Hermes и собирает его обратно вместе байт за байтом — 5767 DEX-файлов из F-Droid, восстановленных бит-идентически в режиме сохранения, байт-код Hermes, проверенный на v84, v96, v98 и v99. Этот тест громко проваливается, когда у модели формата есть отверстие: неправильное смещение строкового стола на единицу, пропущенное требование выравнивания, забытый байт прокладки — повторно излучаемые байты расходятся, и тест говорит, где. Большинство инструментов Android RE работают на одном уровне; дроид-пила отслеживает значение JS через мост React Native в Java в качестве одного запятнанного пути. Передайте ему APK и он распаковывает контейнер, декомпилирует каждый слой и может пропускать выход через Semgrep и TruffleHog в одном проходе. Серверы CLI и MCP имеют общую командную поверхность. Чистая ржавчина, BSD-3-Clause.

##Установка

cargo извлекает ящики библиотеки droidsaw-* из crates.io и собирает все локально. The Только предпосылками являются Rust toolchain (rustup) и компилятор C ([T3]/[T4]). [Т5] и [Т6] являются факультативными [для [Т7], [Т8] или [Т9]]. Нет

Эта страница переведена автоматически. Технические детали смотрите в оригинале.

README

Показан фрагмент оригинального README. Открыть оригинал.

droidsaw

Art by pmjv_prahou. A gift to the last mage of the Open clan.

droidsaw takes a DEX file or Hermes bundle apart and puts it back together byte-for-byte — 5,767 DEX files from F-Droid recovered bit-identically under preservation mode, Hermes bytecode round-trip verified on v84, v96, v98, and v99. That test fails loudly when the format model has a hole: a string-table offset wrong by one, an alignment requirement missed, a padding byte forgotten — the re-emitted bytes diverge and the test says where. Most Android RE tooling works per-layer; droidsaw traces a JS value through the React Native bridge into Java as a single taint path. Hand it an APK and it unpacks the container, decompiles every layer, and can pipe the output through Semgrep and TruffleHog in the same pass (audit --mode=full). CLI and MCP server share one command surface. Pure Rust, BSD-3-Clause.

Install

cargo install droidsaw                 # the CLI
cargo install droidsaw --features mcp  # also installs the droidsaw-mcp server

cargo fetches the droidsaw-* library crates from crates.io and compiles everything locally. The only prerequisites are a Rust toolchain (rustup) and a C compiler (cc/clang). semgrep and trufflehog are optional (for audit --mode=full, --mode=semgrep, or --mode=trufflehog); YARA is built in. No Java/Android SDK is needed.

Installing from automation or CI? Use cargo install --locked droidsaw — it builds against the dependency versions pinned in the publish-time lockfile, so the same release installs reproducibly.

For fleet or CI installs, prefer the cargo auditable variant — it embeds the full crate dependency list inside the binary itself (a compressed JSON record in a dedicated linker section), so the artifact stays auditable long after the build environment is gone:

cargo install cargo-auditable cargo-audit   # one-time tooling
cargo auditable install --locked droidsaw   # binary carries its own dependency inventory
cargo audit bin $(which droidsaw)           # audit the installed artifact, no manifest needed

cargo audit bin reads the embedded inventory and checks it against the RustSec advisory database — the binary answers “what exactly is in you?” years later, with nothing but the file.

Working on droidsaw itself? Check out the droidsaw repo and the five droidsaw-* library repos as siblings, then build droidsaw/ — its dev-loop [patch.crates-io] wires in the local ../droidsaw-* crates instead of crates.io.

Quickstart

droidsaw info app.apk                                 # layer summary: bytecode + manifest + signing
Открыть полный README на GitHub

Установка

This server does not publish a one-line install command.

Open the repository installation guide Новичок в MCP? Начните с руководства на mcpskill.org →

Конфигурация

{ "mcpServers": { "droidsaw": { "type": "stdio", "command": "droidsaw-mcp", "args": ["--allowed-tool-classes=all", "--tool-tier=full"], "env": { "DROIDSAW_MCP_ROOT": "/path/to/your/analysis/root" } } } }