ワークフロー&基本ツール · JimLiu/baoyu-skills

baoyu-electron-extract

インストールされている任意のElectronアプリ(`.asar`バンドル)からリソースとJavaScriptを抽出し、利用可能な場合は`.js.map`ファイルから元のソースコードを復元し、利用できない場合はPrettierで圧縮されたコードを整形します。ユーザーが「Electronアプリを抽出したい」「Electronを逆コンパイルしたい」「<app>のソースコードを取得したい」「app.asarをインスペクトしたい」「看 Electron 应用源码」「提取 .asar」と要求した場合や、デスクトップElectronアプリの構築方法を尋ねた場合に使用します。`node_modules`はスキップされ、macOSとWindowsの両方をサポートします。

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author JimLiuGitHub JimLiu/baoyu-skills ↗Stars 25926License MIT(仓库根 LICENSE,Copyright (c) 2026 Jim Liu;GitHub API spdx_id=MIT)Commit 1567581c26
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

自前実装による展開ではなく、実行時にnpx経由でサードパーティパッケージ@electron/asarをオンデマンドで取得してextractを実行します。引数は配列形式でspawnに渡され、シェル文字列の連結は行われません。

skills/baoyu-electron-extract/scripts/main.ts
const args = ["-y", "@electron/asar", "extract", asarPath, dest];
処理内容:「asarの展開」という単一の処理を公式エコシステムツールに委託し、本スキルはアプリの検出、ディレクトリ構成、復元、およびレポート生成のみを担当します。引き換えとして、実行時に本リポジトリでバージョン固定されていないサードパーティコードをnpm registryからダウンロードして実行することになります(本ディレクトリにはpackage.json / lockfileが存在しません)。

元のソースツリーを復元するには.js.map内にsourcesContentが埋め込まれていることが前提です。満たされない場合はPrettierによる圧縮コードの整形にフォールバックします。これが公称される「逆コンパイル」の実際の能力境界です。

skills/baoyu-electron-extract/SKILL.md
only works when the `.js.map` embeds `sourcesContent`
同セクションで、これが最新のバンドラー(webpack/esbuild/Vite/rollup)における一般的な挙動であると説明されています。埋め込みのないmapはスキップされ、extract-report.jsonのwarningsに記録されます。すなわち、復元されるのはビルド成果物に元々含まれているソースコードのコピーであり、逆コンパイルアルゴリズムによるものではありません。

利用可能なsource mapが存在しないJS/CSSは、npx prettier --writeによってインプレースで一括整形され、圧縮コードの可読性を向上させます。

skills/baoyu-electron-extract/scripts/main.ts
const args = ["-y", "prettier", "--write", ...batch];
バッチ単位で呼び出されます。終了コードが0以外の場合でも警告を出力して続行し(`prettier batch exited with code ${code} (continuing)`)、整形の失敗によってメイン処理が中断されないように保証します。

クロスプラットフォームのアプリ検出:macOSは/Applicationsおよび~/Applicationsを列挙し、WindowsはLOCALAPPDATAやPROGRAMFILESなどのルートを検索します。複数ヒットした場合はエラー終了し、絶対パスでの指定を要求します。

skills/baoyu-electron-extract/scripts/main.ts
const roots = ["/Applications", join(homedir(), "Applications")];
SKILL.mdには次のように明記されています:`If discovery finds multiple matches, the script exits and lists them — re-run with an absolute path.`。Linux等のプラットフォームでは直接エラーをスローし、--asarの指定を要求します(`platform ${process.platform} is not auto-supported. Pass --asar /path/to/app.asar to override.`)。

ディスク書き込みの厳格なガードレール:ルートディレクトリ、ユーザーホームディレクトリ自体、またはカレントワークディレクトリへの出力を禁止します。既存の空でない出力ディレクトリへの書き込みには--forceが必須です。

skills/baoyu-electron-extract/scripts/main.ts
const forbidden = [root, home, cwd];
SKILL.md原文:`the script refuses to write to `/`, the user home directly, or the current working directory, and refuses to populate an existing non-empty output dir without `--force`.` さらに、--dry-runでは解決結果の表示のみが行われ、ディスク書き込みは行われません。

node_modulesとwebpack/runtimeのノイズは、展開の統計、source-mapの復元、Prettier整形の全フェーズで完全にスキップされます。

skills/baoyu-electron-extract/scripts/main.ts
return s.includes("node_modules/") || s.startsWith("webpack/runtime/");
SKILL.mdでは製品原則として次のように規定されています:`**node_modules** is always skipped — both for source-map restoration and Prettier formatting — because vendored dependencies are noise when inspecting an app.`

source-mapのsources[]がディスクへの書き込みパスを決定します。実装上はまずmapが存在するディレクトリを基準に解決し、可読パスをrestored/配下に集約し、安全なパスに縮約できない場合のみハッシュ値によるフォールバックを行います。

skills/baoyu-electron-extract/SKILL.md
Use `restored/__unknown/<hash>.<ext>` only when the source name is empty or cannot be reduced to a safe file path.
これは本スキルで唯一「信頼できない入力がパスを決定する」箇所です。SKILL.mdでは「Readable paths over hashes」の段落で「解決後にサニタイズする」と規定しています。コード上ではwriteFileSync(target, content)の直前におけるディレクトリの組み立てと制約処理に該当します。

成果物はファイルツリー+機械可読なレポートです:デフォルトは~/Downloads/<AppName>-electron-extract/で、extract-report.json(カウント、warnings)を含み、--jsonによる単一行サマリーもサポートします。

skills/baoyu-electron-extract/scripts/main.ts
join(outputDir, "extract-report.json"),
SKILL.mdの出力ツリー:`extract-report.json # JSON summary: counts, warnings, resolved paths`。--json指定時は単一行のJSON出力に切り替わり、エージェントがカウントを直接読み取りやすくなります。

2コア機能

01アプリ名または絶対パスによるapp.asarの自動検出(macOS/Windows両対応)
02asarの展開(@electron/asarに委託)およびapp.asar.unpacked/の同時コピー
03sourcesContentからのオリジナルソースディレクトリツリーの復元(sourceRootの解決およびバンドラーの相対パス集約を含む)
04mapが存在しない場合にPrettierで圧縮されたJS/CSSをインプレース整形(--skip-formatで無効化可能)
05安全なディスク書き込みポリシー:危険な出力先ディレクトリの拒否、空でないディレクトリの上書き拒否(--force指定時を除く)、--dry-runによる事前シミュレーション
06構造化された成果物とレポート:extracted/ + restored/ + extract-report.json(スキップされたmapをwarningsに列挙)

3外部依存関係

KindDependency / Endpoint
clinpx(Node 自带)/ bun
package@electron/asar(运行时 npx 拉取,未锁版本)
packageprettier(运行时 npx 拉取,未锁版本)
clibun(首选运行时;无 bun 时由 npx -y bun 兜底)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: bun {baseDir}/scripts/main.ts(または npx -y bun …)——SKILL.mdで指定された実行方法
  • 网络端点: 外部ネットワークアクセスの宣言: registry.npmjs.org:初回実行時にnpx -yによって@electron/asarとprettierを取得(本ディレクトリ内にpackage.jsonは存在しない)
  • 本地工作目录: ファイルの読み書きと成果物の出力: デフォルトは ~/Downloads/<AppName>-electron-extract/:extracted/、extracted.unpacked/、r
監査ノート: 3段階の自己検証:① 判定対象は本スキルディレクトリ(SKILL.md + scripts/main.ts + main.test.ts)であり、ホスト環境ではありません。② ディレクトリ内の自身の振る舞い=ローカルにインストールされたElectronアプリのapp.asarリソースを読み取りディスクに書き出す処理(~/Downloads/…へ出力、forbidden=[/、home、cwd] および --force ガードレールあり)。ユーザーデータが外部送信されることはありません。唯一の外部通信は予測可能な固定エンドポイントからのパッケージ取得のみです:`skills/baoyu-electron-extract/SKILL.md` に `**No global installs** — `@electron/asar` and `prettier` are resolved on-the-fly via `npx -y`.` と明記されており、実行時にregistry.npmjs.orgからバージョン未固定のサードパーティパッケージ2点を取得してコードを実行します。③ 認証情報の読み取り、ユーザーデータの外部送信、リバースエンジニアリング、なりすまし、セキュリティ機構のバイパス/ダウングレードは存在しないため、オレンジやレッドへの引き上げは行いません。サプライチェーン上の留意点(バージョン未固定のnpx取得)はverdict.risksに記載済みです。

5二重目の独立検証

  • [ok] 解包委托 @electron/asar(非自研) — main.ts:404 逐字为 `const args = ["-y", "@electron/asar", "extract", asarPath, dest];`,spawn 以 argv 数组调用,无 shell 拼接。
  • [ok] npx 拉取未锁版本第三方包(供应链面) — 本目录无 package.json / lockfile,main.ts 内两处 npx 调用分别拉 @electron/asar 与 prettier;SKILL.md Notes 自述 'resolved on-the-fly via `npx -y`',与代码一致。
  • [ok] source map 还原能力边界(需内嵌 sourcesContent) — SKILL.md 明写只在 `.js.map` 内嵌 sourcesContent 时可用,未内嵌则跳过并记 warnings;无夸大表述。
  • [ok] 写盘护栏(/、home、cwd 拒绝;非空目录需 --force) — main.ts assertSafeOutputDir 用 `const forbidden = [root, home, cwd];`;SKILL.md Safety 段文字与代码一致。
  • [ok] 平台支持范围(仅 macOS/Windows 自动发现) — main.ts:310-313 对非 darwin/win32 平台直接抛错要求 --asar;SKILL.md 同述,无夸大。
  • [ok] 外部依赖清单是否完整 — 全目录扫描 URL/API/凭证 token 零命中;唯二第三方包为 @electron/asar 与 prettier(均经 npx),运行时 bun/npx 为宿主运行时而非依赖。
  • [ok] 元数据(license/stars/commit) — git rev-parse HEAD=1567581c26ec29f4216c6e6835415bf30343b0e3;仓库根 LICENSE 首行 'MIT License'、'Copyright (c) 2026 Jim Liu';GitHub API 返回 MIT / 25926 stars / 2026-09-10T15:13:43Z。
  • [discrepancy] 『decompile』措辞与实际能力是否相符 — 出题/触发词里的『decompile Electron』并不等于反编译:实际是解包 + 用构建产物自带的 source map 还原 + Prettier 美化(SKILL.md 自己写明前提是 sourcesContent 存在)。判级与结论不受影响,但详情页应写清这不是字节码/压缩代码的结构化反编译。

6結論

  • 「Electronアプリの内部を確認する」というニーズを単一のコマンドに統合:アプリ検出、展開、復元、整形、レポート生成を完全に自動連携し、ワークディレクトリを汚さずにデフォルトでDownloadsへ出力。
  • 整形よりも復元を優先:sourcesContentが存在する場合は元のディレクトリ構造を再構築し(webpack://、file://、?loaderなどのノイズは除去)、単なるコード整形を大幅に上回る成果を提供。
  • ドキュメントだけでなくコードレベルで実装された安全ガードレール:/、home、cwdへの書き込み拒否、空でないディレクトリに対する--forceの強制、--dry-runによる事前確認。
  • node_modulesやwebpack runtimeをスキップして出力対象をアプリ自体のコードに集中。スキップや異常は握りつぶさずwarningsに集約。
  • 最適な用途: ローカルにインストールされたデスクトップElectronアプリの内部構造(メニュー、アップデータ、組み込みAPIエンドポイント、フロントエンドリソース)を迅速に調査したい開発者やセキュリティ研究者に最適です。特にサードパーティ製クライアントの挙動検証、Electronアプリ向け拡張機能の開発、他者のプロジェクト構成を学ぶ際に適しています。macOS/Windows上で1つのコマンドで実行可能です(例:bun scripts/main.ts Codex)。
    不向きな用途: 出力を公式ソースコードとして扱いたい場合や法的なフォレンジック調査には不向き(復元はビルド成果物に含まれるsource mapに依存し、mapがなければPrettierで整形された圧縮コードしか得られません)。bun/Node環境がないLinux環境や、完全オフライン環境(初回実行時にnpxパッケージの取得が必須)には不向き。ネイティブバイナリやバイトコードの逆コンパイルを期待する用途には不向き(本スキルが処理するのはasar内のJS/CSS/リソースのみです)。
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload baoyu-electron-extract.tar.gz
    sha256: 3d2a2257d7155c7c…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 1567581c26.