メインコンテンツへスキップ
見出し画像

【エージェント】REA|AIにアプリの中身を調べさせる逆解析ツール|express を解析させたら「分からない」を2,305個、行番号つきで返してきた

    AIに解析させたら、「分からない」を2,305個返してきた。

    しかも全部に、どのファイルの何行目かが付いてた。最初は「え、全然分かってないじゃん」って笑ったんだけど、読み進めるうちに、これがこのツールのいちばん大事なところなんだって分かってきた。

    紹介するのは REA。正式名は Reverse Engineer Anything で、GitHub の morluto/rea で公開されてる。私が見たときはスターが15万5千を超えてて、フォークも3万5千以上あった。MITライセンスの無料ツール。

    何をするものかというと、ソースコードが手元にないアプリの中身を、AIエージェントに調べさせるための道具。README の最初に書いてある売り文句は、「気に入った機能を見つけたら、それがどう動いてるのかをバイナリのレベルまで理解する」。

    たとえば、あるメモアプリの検索がやけに速いとする。どうやってるんだろう、って思っても、ふつうは中を見る手段がない。REA を入れたAIエージェントに「このアプリの検索の仕組みを調べて、証拠を見せて」と頼むと、エージェントが中を調べに行く。

    ここで「逆解析」っていう言葉について少しだけ。アプリって、人が書いたコードを機械が読む形に変換して配られてる。その機械向けの形から、人が読める形に戻していく作業が逆解析。昔から専門家が Ghidra や IDA みたいな専用ソフトでやってきた、根気のいる仕事。

    REA は、その専用ソフトとAIエージェントの間をつなぐ通訳みたいなもの。MCP っていう、AIが外の道具を使うための共通の差し込み口があって、REA はそこに刺さる。Claude Code、Codex、Cursor、Gemini CLI なんかから使える。

    調べられる相手がとにかく広い。機械語になったネイティブアプリ、JavaScript や Electron で作られたデスクトップアプリ、.NET のアプリ、Webサイト、Go のバイナリ、WebAssembly、SQLite のデータベース。最近の版では Android アプリも加わった。

    入れ方は、Node.js が入っていれば npx rea-agents setup の1行。どのエージェントに入れるか聞いてくるので、選んで承認して、エージェントを再起動するだけ。設定ファイルは自動でバックアップを取ってくれる。

    ネイティブアプリを深く読むには、Hopper か Ghidra か IDA のどれかが別に要る。Ghidra は無料。JavaScript の解析だけなら、何も追加しなくていい。

    ここからが本題。気になって、自分で動かしてみた。

    相手に選んだのは、Webサーバーを作るときによく使われるオープンソースの express。ライセンスもMITなので、中を見るのに問題はない。JavaScript のファイルが12個、合わせて約95KBの小さなライブラリ。

    コマンド1行で解析させたら、10.2秒で終わった(初回はダウンロード込みで23.2秒)。使ったメモリは最大で約300MB。これならうちのよわよわPCでも余裕で動く。

    で、返ってきた結果が11.2MB。95KBの入力に対して、約118倍の大きさの答えが返ってきた。

    中身を開くと、6,731個の部品と、それらのつながりが4,877本。ここまではまあ想像どおり。驚いたのはその次で、「ここは分からなかった」という記録が2,305個、全部ちゃんと並んでた。

    分からなかった理由も分類されてた。どの関数を呼んでるのか候補が複数あって決められないのが931個。値が実行してみないと決まらないのが670個。呼び出し先がその場で組み立てられてるのが621個。

    しかも1個ずつに「response.js の1053行目」みたいに場所が付いてる。全体の網羅度も「不明」、項目ごとには「部分的」と、自分から書いてきた。

    これの何がうれしいのか。

    AIに難しい調べものをさせていちばん怖いのって、それっぽい嘘なんだよね。分からないところを、もっともらしい説明で埋めてしまうやつ。逆解析みたいに答え合わせが難しい作業だと、それに気づけない。

    REA は、そこを仕組みで止めようとしてる。調べた結果は全部「証拠」っていう単位で返ってきて、どのファイルの何行目かと、内容の指紋みたいなハッシュ値が付いてる。結論を言うなら、その根拠の場所まで出しなさい、っていう作り。

    そして、分からないことは分からないと、数まで添えて書く。限界の欄には「コードは一度も実行していない」「見つけたつながりが、実際に動くことの証明にはならない」とまで書いてあった。

    人間の仕事でもそうだけど、「分かりません」を正確に言える人のほうが、結局は信用できる。それを道具の側でやってる感じ。私はここがいちばんいいなと思った。

    ただ、気をつけたいところもある。

    まず、これは使い方しだいで危なくもなる道具。プロジェクト自身が、使っていい場面と、手伝わない場面をはっきり書いてる。いいのは、セキュリティの研究、マルウェアの分析、学習、互換性のための調査、自分のものか許可をもらったソフトの調査。

    コピーガードやライセンス確認の回避、ゲームのチート、認証の突破、他社のコードや素材の丸写しは、明確に「手伝わない」と書いてある。国や契約によっては、逆解析そのものが制限されてることもある。触るのは、自分のものか、許可があるものだけにしておきたい。

    それから、解析はPCの中で動くけど、結果を受け取ったエージェントの先にはAIの会社がある。調べた中身はそっちのデータ方針に従って扱われる。仕事のアプリを調べるときは、そこも頭に置いておいたほうがいい。

    あと、「機能を理解して自分のプロダクトで作る」っていう売り文句と、「保護されたコードの複製はしない」っていう約束のあいだには、ちょっと難しい線がある。仕組みを理解して一から作り直すのと、写すのは別物。でもその境目をAIがどこまで守れるかは、使う人の判断に結局かかってくると思う。

    うちのPCで動くか。JavaScript の解析なら動く。必要なのは Node.js の22.19以降と、数百MBのメモリだけ。ネイティブアプリを深く読むほうは、Ghidra なんかを別に入れることになるので、そこは少し重くなりそう。

    これがここまで来たなら、次は「AIが調べた結果を、人がどう検証するか」がもっと大事になると思う。証拠に行番号とハッシュが付いてるなら、それを別のAIや人がチェックする流れも作れそうだし。

    2,305個の「分からない」を見て、ちょっと安心した。分からないって言えるAIのほうが、私は一緒に仕事したい。

    #AIエージェント #リバースエンジニアリング #MCP #REA #オープンソース

     
     
    テクノロジーが超進化する現代、不安な人へ… 「未来が楽観できる」ブログです。 @earth 著者情報 - Mina Eureka Ernst > 幾何とSIと金融と普遍性とバイオと……について勉強してます

    あなたへのおすすめ