
droidsaw/droidsaw
Developer toolsこのページは AI により自動翻訳されています。技術的な詳細は原文をご確認ください。 原文を見る
純粋なAndroidデコンピラーとセキュリティオーディオスイート。 DEX → Java, Hermes → JavaScript. React ネイティブブリッジを横断するクロスレイヤーの要素。 CycloneDX SBOM + OpenVEX. CLI と MCP.
概要
アート by pmjv prahou . オープンクランの最後のマージへの贈り物。 droidsaw は DEX ファイルまたは Hermes のバンドルを取り除き、 byte-for-byte — 5,767 DEX ファイルから F-Droid は、保存モードの下でビット識別的に回復しました。 Hermes バイトコードの往復は v84、v96、v98、v99 で検証しました。 フォーマットモデルが穴を持っているとき、そのテストは大声で失敗します: 1 で誤った文字列テーブルオフセット、アライメントの要件が見逃し、パディングバイトを忘れました - 償却バイトダイバージとテストはどこに言う。 ほとんどの Android RE ツールは、レイヤーごとに動作します。 droidsaw は、React ネイティブ ブリッジを 1 つの taint パスとして Java にトレースします。 APK を渡すと、コンテナを解凍し、すべてのレイヤーを分解し、同じパス (audit --mode=full) で Semgrep と TruffleHog を介して出力をパイプすることができます。 CLI と MCP サーバーが 1 つのコマンド サーフェスを共有します。 純粋な錆、BSD-3-Clause。 貨物は droidsaw-* ライブラリの crates を crates.io から取得し、ローカルですべてをコンパイルします.
概要(AI 翻訳)
アート by pmjv prahou . オープンクランの最後のマージへの贈り物。
droidsaw は DEX ファイルまたは Hermes のバンドルを取り除き、 byte-for-byte — 5,767 DEX ファイルから F-Droid は、保存モードの下でビット識別的に回復しました。 Hermes バイトコードの往復は v84、v96、v98、v99 で検証しました。 フォーマットモデルが穴を持っているとき、そのテストは大声で失敗します: 1 で誤った文字列テーブルオフセット、アライメントの要件が見逃し、パディングバイトを忘れました - 償却バイトダイバージとテストはどこに言う。 ほとんどの Android RE ツールは、レイヤーごとに動作します。 droidsaw は、React ネイティブ ブリッジを 1 つの taint パスとして Java にトレースします。 APK を渡すと、コンテナを解凍し、すべてのレイヤーを解読し、Semgrep と TruffleHog を同じパス (audit --mode=full]) で出力を配管できます。 CLI と MCP サーバーが 1 つのコマンド サーフェスを共有します。 純粋な錆、BSD-3-Clause。
インストール
[cargo] は [droidsaw-*]]] ライブラリのクレートを crates.io から取得し、ローカルですべてをコンパイルします。 ザ・オブ・ザ・
前提条件は Rust ツールチェーン (rustup) と C コンパイラ ([cc]/clang]) のみです。
[semgrepとtrufflehogはオプション([audit --mode=full、[--mode=semgrep])、または[--mode=trufflehog)です。 YARAは内蔵されています。 なし
このページは AI により自動翻訳されています。技術的な詳細は原文をご確認ください。
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
droidsawrepo and the fivedroidsaw-*library repos as siblings, then builddroidsaw/— 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
インストール
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" }
}
}
}