HN 日本語サマリー

← 一覧へ戻る
プログラミング

REA Reverse – Anythingをリバースエンジニアリングする

REA Reverse – Engineer Anything (rea.tools)

128 pointsby modinfo25 コメント

要約

REAは、コーディングエージェントがソフトウェアを検査し、その仕組みを解明するためのリバースエンジニアリングツールです。ユーザーは自然言語で質問するだけで、エージェントがアセンブリコードやデコンパイルされたコードを解析し、機能のロジックを説明したり、再現したりします。このツールは、Windows Calculatorのパーセント計算やChromeの恐竜ゲームの速度上昇ロジックの解明といった例を通じて、その活用方法を示しています。

全文翻訳

ソフトウェアがどのように機能するかをコードエージェントで発見する REAは、エージェントにプログラムを検査し、それが何をするかを説明するためのツールを提供します。 REAがどのように機能するかを見る ↓ セットアップガイド ショーケース → すでにREを知っていますか? 分析ガイドに進む → REAをセットアップする これをコードエージェントにコピーしてください: あなたのコードエージェント コピー › npx rea-agents@latest setup を使用して、REAをインストールし、このコードエージェントに接続します。 承認のためにセットアッププランを表示し、次にインストールの確認を行ってください。 または、ターミナルでこれを実行してください: npx rea-agents@latest setup コピー セットアッププランを承認し、次にエージェントを再起動してください。 リバースエンジニアリングとは? プログラム自体を調べて、ソフトウェアがどのように機能するかを発見することです。 目標: ある機能を説明、変更、または再構築するのに十分なほど理解することです。 一つの疑問: なぜCalculatorは200 + 10% に対して220を返すのでしょうか? REA以前 · あなた自身が調査する 01 ブランチをデコードする 02 コールをトレースする 03 ルールを再構築する 元の x64 · 選択された命令 0x180124945: MOV EAX, dword ptr [R13 + 0x18] 0x180124949: CMP EAX, 0x5c 0x18012494c: JZ 0x180124aba 0x180124952: CMP EAX, 0x5b 0x180124955: JZ 0x180124aba 0x18012495b: MOV EDX, 0x64 0x180124960: LEA RCX, [RSP + 0x160] 0x180124968: CALL 0x180122650 0x18012496e: LEA RDX, [R13 + 0x160] 0x180124975: LEA RCX, [RSP + 0x78] 0x18012497a: CALL 0x180109720 0x18012497f: MOV RSI, RAX 0x180124982: MOV qword ptr [RSP + 0x28], RAX 0x180124987: LEA RDX, [RSP + 0x160] 0x18012498f: MOV RCX, RAX 0x180124992: CALL 0x180123190 ; … 値コピー命令は省略 … 0x180124a14: MOV RDX, RDI 0x180124a17: LEA RCX, [RSP + 0xf8] 0x180124a1f: CALL 0x180109720 0x180124a24: LEA R8, [RSP + 0x30] 0x180124a29: MOV RDX, RAX 0x180124a2c: LEA RCX, [RSP + 0xb8] 0x180124a34: CALL 0x180123c10 命令をデコードし、コールを追跡し、計算を再構築します。 REAを使用 · エージェントに質問する 一つのプロンプト。 エージェントに平易な英語で質問します。 例のプロンプト · Calculator コピー › REAを使用してWindows Calculatorを検査してください。 なぜ200 + 10% は220になるのですか? 例の回答 · 発見に基づく + の後、% ボタンは最初の数値のパーセンテージを取得します。 200 の 10% = 20↓200 + 20 = 220 REAが提供するもの ハンドラーの命令、デコンパイルされたコード、およびコール。 あなたのエージェントが説明するもの どのブランチが適用され、何が計算され、どのように再構築するか。 インストールされている Calculator DLL からの選択されたアセンブリ。 思考と応答は発見を例示します。 Calculatorの例を続けます ↓ 二つの例を試してみましょう。 ゲームの速度を変更し、次にCalculatorに戻ってパーセントボタンを再構築します。 例01 · Chromeの恐竜ゲーム なぜ恐竜は速くなるのですか? 目標 速度調整可能なゲームを再構築する。 なぜリバースエンジニアリングするのか? その加速を再現するには、実行中のゲームのルール、つまり開始速度、増加量、停止時期を知る必要があります。 再構築されたゲームをプレイする 6 → 10 → 13 プレイ ジャンプ ↑ リスタート 速度 6.0 元のルール: 6で開始し、13に向かって増加します。 スライダーを動かして独自の速度を設定します。 スペースキーまたはジャンプでサボテンをクリアします。 REAが返したもの 実際にページで実行されているスクリプト。 エージェントは、その更新関数と速度設定を読み取り、そのルールを新しいゲームで使用します。 例のプロンプト · 恐竜ゲーム コピー › REAを使用してこの恐竜ゲームを検査してください。 なぜ速くなるのですか? 速度ルールを表示し、次に調整可能な速度を持つ小さなバージョンを構築してください。 検査対象: wayou の Chromiumベースのブラウザエディション。 REA · ロードされた index.js · 選択された行 if (this.currentSpeed < this.config.MAX_SPEED) { this.currentSpeed += this.config.ACCELERATION; } 6で開始します。 衝突がない場合、更新ごとに0.001ずつ増加し、速度が13未満の間。 速度ラボを開く → 各部分の機能 01 · REAは実行中のゲームのスクリプトを読む 実際のコードと設定をエージェントに返します。 02 · あなたのエージェントはルールを再構築し、コントロールを追加する 回復した加速を、速度スライダー付きの小さなゲームで使用します。 03 · あなたは速度を変更してプレイする 元の加速を試してから、独自のペースを選択します。 スクリプト、チェック、および分析の試行方法を見る REAは、ローカルデバッグ接続を介してHTTPブラウザエディションを検査し、ロードされたindex.jsをソースとダイジェストとともに返しました。 検査されたスクリプトからの選択された設定 ACCELERATION: 0.001, MAX_SPEED: 13, SPEED: 6 制御されたブラウザチェックで元のゲームの更新関数を呼び出し、障害物と自動スケジューリングを無効にしました。 4,000回の更新後、速度は10.0でした。10,000回後、それは13.0(小数点以下第一位に丸め)でした。 新しいミニゲームは、その速度ルールを維持しています。 描画、ジャンプ、衝突コードは、小さな教育用実装です。 ラボを開いて新しいコードを確認し、同じ速度チェックを実行してください。 ターゲットを自分で検査するには、恐竜ページを使用してブラウザ接続の手順に従ってください。 エージェントにそのページのURLとローカルデバッグエンドポイントを与え、次に上記のプロンプトをコピーしてください。 検査された速度コード · Chromium 著者 · BSDライセンス 例02 · Windows Calculator Calculatorのパーセントボタンを再構築する。 なぜ200 + 10% が220になるのかを見ました。 次に、+ と × の両方のルールを回復し、試してみましょう。 目標 + と × を正しく処理する小さな電卓を構築する。 なぜリバースエンジニアリングするのか? 同じボタンが + と × の後に異なるルールを使用します。 インストールされているアプリを検査して、パーセンテージがどの数値に適用されるかを見つけます。 計算を試す 200 + 10% 200 × 10% 200 + 20 % = リセット 200 の 10% = 20。次に 200 + 20 = 220。 検査されたパーセントルールのインタラクティブな例。 REAが返したもの 一つのブランチは100で割ります。もう一つのブランチは最初の数値に掛けます。 エージェントは両方を使用して % ボタンを再作成します。 この例では、previous = 200、current = 10 です。 例のプロンプト · % ボタンの再構築 コピー › REAを使用してWindows Calculatorの % ボタンを検査してください。 + と × の後のルールを回復し、次に両方を使用する小さな電卓を構築してください。 % ハンドラーの読みやすい要約 if (operation == multiply || operation == divide) { percent = current / 100; } else { percent = current * previous / 100; } + の場合 最初の数値の10%を取ります。 10% of 200 = 20 → 200 + 20 = 220 × の場合 10% を 0.1 に変換します。 200 × 0.1 = 20 インストールされているアプリから動作する % ボタンへ 01 · REAはcalc.exeを読む Calculatorアプリを起動します。 エージェントはms-calculator: を開きます。 次に、インストールされているアプリのライブラリを選択します。 02 · REAはライブラリを読む % ハンドラーのコードを返します。 関数は演算子をチェックし、定数100を使用します。 03 · あなたのエージェントが解釈する ルールを説明し、再現する。 ブランチをMicrosoftのソースとクロスチェックし、次に上記の + と × を試します。 実際のコードと回答がどのようにチェックされたかを見る REA · 選択された元の命令 0x180124945: MOV EAX, dword ptr [R13 + 0x18] 0x180124949: CMP EAX, 0x5c 0x18012494c: JZ 0x180124aba 0x180124952: CMP EAX, 0x5b 0x180124955: JZ 0x180124aba 0x18012495b: MOV EDX, 0x64 演算子ID · Microsoftのソース #define IDC_MUL 92 // 0x5c #define IDC_DIV 91 // 0x5b #define IDC_PERCENT 118 // 0x76 0x64 = 100 REA 4.1.0 で検査済み: Windows Calculator 11.2508.4.0, x64。 読みやすい要約は、Microsoftの公開ソースからの名前を使用して、回復されたブランチを説明します。 パーセンテージの実装 · Microsoftのテストケース · ネイティブセットアップガイド 最初のリバースエンジニアリング 小さなアプリでREAを試してください。 Notesの例をダウンロードし、CSVエクスポートをトレースし、変更された入力の一つを確認してください。 ガイド付き例を試す さらに深く掘り下げたいですか? 理解したいことや構築したいことをエージェントに伝えてください。 REAを使用すると、このウェブサイトのクローン作成から、実行可能ファイルからゲームを再構築することまで、あらゆるものに取り組むことができます。 例のプロンプト · ウェブサイト コピー › REAを使用して https://rea.tools/ を検査してください。 このウェブサイトをクローンしてください。 はい、これです。 例のプロンプト · ゲーム再構築 コピー › REAを使用して、このゲームを実行可能ファイルから再構築してください。 ゲームプレイロジックをC言語で回復し、元のものと比較してテストしてください。 DX-Ballのケーススタディを見る → セットアップと分析の手順については、ターゲットを選択してください: ネイティブバイナリ 実行可能ファイルおよびライブラリ内の関数、文字列、参照、および呼び出し関係を検査します。 ネイティブ分析ガイド JavaScript & Electron アプリケーションフォルダまたはASARアーカイブからモジュール、ルート、IPC、およびネイティブ依存関係をマッピングします。 アプリケーションワークフロー