English · 简体中文
機能 · 構成 · インストール · 要件 · 失敗カタログ · スコープ · メンテナンス · 免責事項
apk-reverse
Android APK のリバースエンジニアリング、デブロート、広告除去、外科的な
dex パッチ、再パッケージ、およびランタイム/サーバー解析のための Agent Skill。
これはスキルであり、チュートリアルではない。エージェント(Claude Code、
Codex、または Agent Skills 形式をサポートする任意のハーネス)が作業中に読み込むことを前提に書かれており、
段階的開示のために構成されている — 意思決定指向の短い SKILL.md、あるステップが必要としたときにのみ読み込まれる詳細なリファレンス、そして直接実行できるパラメータ化されたスクリプト。
エージェントがこれをどう消費することが期待されているか
SKILL.md は助言としてではなく、意図的にゲート付きの手順として書かれている。なぜなら、
観察される失敗モードは無知ではなく — モデルが全体を読み、それに同意し、
それでもなお第一原理から推論してしまうことだからである。
したがって、本文中には読むのではなく行動することが意図された4つの要素がある:
- 4つのオーバーライドルール(R1–R4)。 これらが現在の計画と衝突する場合、証拠が
それらを覆すまで、これらが優先される。
- 症状インデックス。 各行はすでに代償を払った失敗である。一致する行は停止信号である:
さらにコマンドをいくつか実行した後ではなく、別のコマンドを実行する前にそのファイルを読み込む。
既知の症状を推論で乗り越えることが、同じ時間を二度費やす方法である。
- 4つのゲート(G1–G4)、 それぞれが合格基準を伴うアクションである。「考えは理解した」では
ゲートは通過できない。これらは、分類、環境の真実、および対照ビルドが、最初のパッチの前に
行われるように存在しており、3度目の失敗の後ではない。
- ツーストライクルールと停止条件。 同じ形の失敗が2回あれば、モデルが間違っているのであり、
パラメータが間違っているのではない。すでに2回失敗した仮説の3番目の変種は、ラウンドが
死にゆく場所である。
そして最後に保留されることが意図された1つのこと:**「完了」**には定義がある(6項目)。クリーンな
ログはそのうちの1つではない。6項目すべてに満たないものはチェックポイントであり、残っているものとともに
チェックポイントとして報告されるべきである。
もしあなたがこれを読んでいるエージェントなら:最も安価な最初のコマンドは
python skills/apk-reverse/scripts/doctor.py である。これは、ここにこれらのツールのどれが存在するか、どの
スクリプトが実際に実行できるか、そして環境内の何かがすでにあなたの
測定を汚染していないかを教えてくれる。
何が得意か
- リクエストがクライアント側でそもそも達成可能かどうかを迅速に判断する。サーバーによって
強制されているペイウォールに何時間も費やす代わりに。
- 作業を始める前に成果物が取るべき形態を判断する — ルート化されていない、
自己完結型の成果物は「このマシンで動かす」とは別の問題であり、この2つを混同することが
この領域で最も高くつくドリフトである。
- 与えられた変更に対して最も安全なパッチ層を選び、アプリを
壊す層を避ける。
- 成功に見える再パッケージ失敗を捕まえる:アプリがインストールされ、起動し、
完璧に描画される一方で、すべての署名付きリクエストが拒否される。なぜならクライアントは
自身の署名証明書からリクエスト署名鍵を導出しているからである。
- 自分自身のミスをアプリやサーバーの問題から分離する — 機能スコープの失敗(ログイン、登録、支払い)は、
しばしば1つのコードパス上の TLS/証明書の問題であり、あなたが今ビルドしたパッチの
結果ではない。デバイスの状態、死んだデバイスサーバー、クロックドリフトも同じように
偽装する。
- マニフェストが同梱しているものやデバイスが主張するものを信頼するのではなく、
どのアーキテクチャとどのライブラリが実際に実行されているかを確定する。
- パック/ハードニングされたターゲットを攻略する:パッカーを特定し、アンパックし、
メモリダンプをパッチ済みのインストール可能な APK に戻す。
- 意図的にプロセスを終了させるハードニングされたライブラリを扱う — 通常のヌル参照
バグにそっくりに見える意図的なクラッシュ形状(
fault addr 0x4)や、
修正が機能するか、原因とはまったく似ていない形でアプリ全体をフリーズさせるかを決める
「無効化するが、決してリターンしないようにしてはならない」ルールを含む。
- どのツールに手を伸ばすべきか、そしてそれぞれがどこで嘘をつくかを知る — GUI としてしか
存在しないものも含むため、より弱い方法を黙って代用するのではなく、人間に依頼する。
- パッチ済みビルドをパッチ済みのまま維持させる:バージョンチェック、強制アップグレードダイアログ、
自己更新インストーラーを無効化し、作業がリモートでオフにできないようにする — そして、バージョン変更なしに
それを静かに元に戻しうるホットアップデート/リモート設定チャネルを認識する。
- クライアント側のサインインゲート(パッチ可能)とアカウントスコープのリソース(サーバーが
答えるものを持たないため空)を分離し、セッションを偽造するとサインアウトよりも悪い状態を
生み出すことを知る。
- 長時間のタスクを誠実に保つ:ライブ記録、格付けされた結論、較正されたタイムアウト、および
有界の待機により、進捗が失われず、同じミスが二度行われないようにする。
- 完璧にビルドされ、ランタイムで死ぬ APK を生み出す特定のミスを
避ける。
- APK が選択肢にならない場合に成果物がどうあるべきかを判断する — 複数の独立したチェックによって
拒否された再パッケージは高コストではなくブロックであり、フォールバックのはしごはシステムレベルの
モジュール、ローカル RPC サービス、または境界を明示した正直なレポートである。
- 本物のメモリダンプと抽出シェルの骨組みを見分け、どの復旧経路が
適用されるかを知る —
frida 自体が拒否された場合の root 側ダンプを含む。測定が何を見ることができ、
何を見ることができないかは skills/apk-reverse/references/advanced-unpacking.md にある。
- リバースするよりも呼び出す方がコストが高い場合に、リバースするのではなくルーチンを呼び出す:
ホスト上でのエミュレート実行、または Frida RPC を介してサービス化されたライブ関数。
- ネイティブ関数が OLLVM によってステートマシンに平坦化された場合に、命令レベルの実行証拠を
読む — 実機で Stalker が噛みつき返すと測定された2つの方法を含む。
- ユーザー空間フッキングがチェックにまったく到達できない場合(生の
svc システムコール、
init_array による早期検出)を認識し、上下の次の層が実際に何をできるか、そしてエスカレーションが
間違った答えとなるのはいつかを知る。
- REST ではないプロトコルを扱う — スキーマなしの protobuf、gRPC、QUIC/HTTP3 — および
システムトラストストアを無視するネイティブ側の証明書ピンニング。
- スマートフォン自体から作業する:MT Manager の編集/再パッケージ/署名フローとその APK MCP サーフェス、
LSPosed Manager、およびオンデバイスのデータ検査を、PC ツールチェーンの代わりではなく
並行して使う。
- プロセスライフタイムのどの時点にも存在しない復号済み DEX を何時間も探し回る前に、
Java2C と抽出シェルを見分ける — コードは
.so にコンパイルされていたのである。
- split APK / App Bundle セットとして届くビルドを扱う:デバイスからセットを読み取り、
pm install-multiple のためにすべてのメンバーを1つのキーストアで署名する、またはそれが合法な場合に
コード/ネイティブメンバーをスタンドアロン APK にマージする。
- 既知平文差分を用いて本物の Dex VMP を攻略する — どのリンクが自動化でき、どれができないか、
コンパイル済みフィクスチャが何に到達でき、何に到達できないか、そして導出された
プライベートオペコードテーブルを主張するのではなく証明する方法。
- ターゲットを公開せずに学んだことを公開する — アイデンティティ形状をそのコンテキストとともに報告するスキャナー、
何を伏せてはならないか(ツール、ライブラリ、プロトコルフィールド、CVE、ハードニング製品、公開 crackme)の明示的なリスト。
これらを伏せると再利用可能な部分が破壊されるためであり、コミットをゲートする終了コード。
- このリポジトリがすでに収束した作業を繰り返す前に前例を読む:記録の肯定的な
半分であり、行き止まりを含む経路、すべての主張に対する格付け、そしてケースが書き戻すべきと
言うファイルを伴う。
構成