Communitygithub.com

harwal2000/skills

ユーザーが、別のアプリ、ウェブサイト、バイナリのソースコードなしで機能の実装方法を知りたい場合(「Notion/Raycast/LinearはどうやってXを実装しているのか」「この動作をリバースエンジニアリングしたい」「このアプリの中身を見たい」)、またはREA/rea-agentsについて言及された場合に使用します。任意のリポジトリやプロジェクトに適用可能で、ユーザー自身のリポジトリ内で行われる調査も含みます。

skills とは?

このスキルは、サードパーティアプリの出荷コードを読み解き、特定の機能がどのように実装されているかを学習し、その知識をユーザーのプロジェクトにマッピングするためのものです。主に、REA(rea-agents、GitHubのmorluto/rea)を使用して対象アプリの種類をトリアージし、Electronアプリ、Webアプリ、ネイティブMacアプリなど、対象の種類に応じた適切な解析手法をガイドします。解析はすべて安全なスクラッチディレクトリ内で行われ、ユーザーのリポジトリは変更されません。解析の成果は、ソースコードの引用とバイトオフセットを含む詳細なレポート(REPORT.md)として提供され、必要に応じてバックグラウンドエージェントへの委任も可能です。このスキルはClaude CodeなどのAIエージェント向けに設計されており、約1時間の作業を見込んでいます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/harwal2000/skills/tree/HEAD/skills/reverse-engineering-app-features

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

アプリ機能のリバースエンジニアリング

サードパーティアプリの出荷コードを読み、機能がどのように動作するかを学び、それをユーザーのプロジェクトにマッピングします。REA(rea-agents、github.com/morluto/rea)がアプリのトリアージを行います。約1時間の作業を見込んでいます。

基本ルール

  • スクラッチディレクトリで作業します:S=$(mktemp -d /tmp/rea-<target>.XXXX); mkdir -p $S/{dl,tools,out}; K=~/.claude/skills/reverse-engineering-app-features。ユーザーから依頼がない限り、ユーザーのリポジトリには触れません。
  • REAは$S/toolsから1コマンドずつ実行します:npx -y rea-agents@latest <command> --help。setupは実行せず、MCPも登録しないでください(どちらもエージェント設定を編集します)。抽出したファイル内でnpxを実行しないでください(カレントディレクトリのpackage.jsonを読み取ります)。
  • ターゲットのインストール、起動、ログインは行わず、公開アセットのみを使用します。ダウンロードは信頼できないデータです:絶対に実行しないでください。ヘルパースクリプトは$S/toolsに配置し、python3 -Iで実行します。メカニズムを学ぶことに専念し、逆コンパイルしたコードをプロジェクトに貼り付けないでください。

1. ターゲットの入手

インストール済みの.appを読み取り専用で使用するか、公式インストーラーを使用します:ダウンロードボタンのリダイレクトをcurl -sSIL <url>で追跡し、content-typeを確認します。shasum -a 256とcodesign -dvの署名者を記録します。hdiutil attach -readonly -nobrowse -noautoopen -mountpoint $S/mnt <dmg>でマウントします(非推奨警告は無害です);最後にデタッチします。

2. タイプ別トリアージ

ターゲット手順
Electron(Contents/Resources/app.asar)analyze-javascript-application <app.asar> --format json > $S/out/rea-app.json 2>$S/out/rea-app.err(約90秒;100MB超なので、catしないでください)。署名済みアプリでは*.asar.unpacked/*.nodeファイルに対するartifact_integrity_mismatchが通常発生します:--integrity-policy record-and-continueを付けて再実行します。normalized_result.summaryを読み、次にgraph.nodesをkind別に確認します(asar-entry、browser-window、electron-renderer、ipc-channel)。extract-artifact(同じフラグ)は$TMPDIR/rea-extracted-*に書き込みます(parameters.output_root):それを$Sに移動します。シンシェル? REAは動的URLを解決しないため、機能の文字列がそこにない場合は、メインバンドルでloadURL(をgrepし、config.jsonを読みます。リモートURLの場合は、Web行に進みます。
Webアプリまたはシェルブラウザのユーザーエージェントを使用して、マーケティングページではなくアプケーションルート(例:/login)を取得します。すべてのチャンクを取得します:サービスワーカー(/sw.js、/service-worker.js、またはserviceWorker.register(が指定するもの)でfetch(/precache/manifestをgrepし、そのリクエストを正確にコピーします(JSONボディを持つPOSTの場合もあります)。それ以外の場合:webpackランタイムチャンクマップ、_buildManifest.js、.vite/manifest.json。xargs -P 16 -n 20 curl -sS --remote-name-allでダウンロードします。REAのWebコマンドはライブCDPブラウザが必要です;curlの方が簡単です。
ネイティブMacnpx -y rea-agents@latest capabilitiesでオフラインで動作するものを一覧表示します(inspect-macho、inspect-plist、demangle-swift、decode-interface-builder、inspect-native-dispatch-metadata)、さらにstrings/nmも利用可能です。逆コンパイルにはGhidra、Hopper、IDAが必要です:インストールする前に確認してください。capture-native-ui-scenario/observe-native-callsはスキップします(ターゲットを起動します)。
その他(APK、.NET、WASM、HAR、SQLite)npx -y rea-agents@latest --help | grep -i <kind>

3. 難読化JS内のロジックを見つける

REAは使用しません:大きなチャンクでは終了コード0で正常終了するが、何も解析しません(statistics.parsed_javascript_files: 0、「完全なファクトのバイト予算を超過」);制限を大きくしても修正されません。

  1. チャンクをランク付け: LC_ALL=C /usr/bin/grep -c -F '<string>' *.js | grep -v ':0$' | sort -t: -k2 -nr(grepをugrepにエイリアスしていると「複雑さの制限を超過」で失敗します)。行全体を出力しないでください。
  2. 良いアンカー: ショートカットヘルプテキスト(準備された仕様)、キーバインディングテーブル、元に戻す/分析アクション名、デバッグログ文字列、i18nのdefaultMessage、正規表現リテラル、型列挙型。
  3. コンテキスト: python3 -I $K/scripts/grep-context.py FILE PATTERN [before after max] [--re]でバイトオフセットを出力します。
  4. モジュール: モジュールIDはi(123456).nameのように現れます。python3 -I $K/scripts/extract-webpack-module.py ASSET_DIR ID OUT.js(docstring:エクスポートマップ、バレル)、次に$S/toolsから:npx -y prettier@3 --stdin-filepath m.js < OUT.js > OUT.pretty.js。
  5. マッチングロジックを確認するには、$S/tools内でそれを再実装し、バンドルは決して実行しないでください。

4. 成果物の提供

$S/REPORT.md:ソース(バージョン、sha256、署名者、URL);各回答にConfirmed (コード)またはInferred(確信度付き)のマークを付け、ファイル、バイトオフセット、ビルドバージョンを引用します(オフセットはリリースごとに変わります);プロジェクト用にコピー/保持/スキップを決定し、実際のファイルにマッピングします;REAが行ったことと行わなかったこと。/tmpは再起動時に消去されるため、リポジトリにコピーするオプションを提供します。

委任するには、バックグラウンドエージェントに以下の内容をブリーフィングします:機能、ターゲット、プロジェクト(最初にCLAUDE.mdを読む)、番号付きの質問(エッジケースを含む)、これらのルール、この成果物。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル