DD

droidsaw/droidsaw

Developer tools

このページは AI により自動翻訳されています。技術的な詳細は原文をご確認ください。 原文を見る

35 stars 4 forks 品質 66 トレンド 16BSD-3-Clause

純粋な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 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
GitHub で README 全文を見る

インストール

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" } } } }