27年前のEXEファイルをClaude 3.7にアップロードしたら起きた驚くべきこと
(reddit.com)ソースではなく一部だけのバイナリ(ランタイムDLLは欠けていた)から、
元のプログラムの目的を突き止め、Pythonで書き直しまで……。
良くも悪くも、まさに「人工」知能ですね。
翻訳:
長年AIに失望させられてきた末に、私は本当に大きな衝撃を受けました。これはよくある「AIはすごい」という類いの話ではありません。少なくとも今日までは、私は懐疑的でした。
背景 : 多くの人と同じように、私もコーディング支援のためにChatGPTや他のAIツールを使ってみました。結果はどうだったか? 一貫して期待外れでした。自信満々の説明で包んだ間違ったコードを吐き出す、豪華版の検索エンジンにすぎませんでした。
課題 : 今日は2歳の孫娘が遊びに来ていました。そこで、私が1997年にVisual Basic 4で作った簡単なアプリのことを思い出しました。ですが、27年前の実行ファイルを動かす? 古いDLLや互換レイヤーもなしに? そう、その通りです。
The Hail Mary : 好奇心から、実際のEXEファイルをClaude 3.7にアップロードして、こんな簡単な質問を投げてみました。"このファイルを実行する方法を教えてもらえますか? Visual Basic 4で作られたもののようです。Pythonに変換できるとよさそうです。"
予想していた結果 : 「古いファイルなのでセキュリティ上のリスクがあり、あれこれ……」という定型的な返答が返ってくることでした。
実際に起きたこと: Claude 3.7は予想どおりの警告から始めましたが、その後が面白くなりました。どういうわけかバイナリを分析し、特定の構成要素を識別したのです。
- "Form1"
- "cntTimer"
- "btnExit"
- さらには埋め込まれたサウンドファイルまで検出しました!
そのうえで、他のどのAIもやらなかったことをやってのけました。Pygameを使って完全なPython移植版を書いたのです。
- 機能を完璧に再現した。
- インストール手順が明確だった。
- しかも一発で実際に動いた
所要時間: 5分未満。誇張ではありません。
スペースキーに音を割り当てたり、カラフルなフォントを追加したりといった調整を頼むと、すぐに完璧なコード更新を返してきました。
AIを使い始めて以来、初めて本気で感心しました。単なるパーティートリックではなく、実際に私の作業時間を節約してくれる実用的な解決策だったのです。
最終的に私は、感銘を受けたことと、なぜすごいと思ったのかを拙く要約してClaudeに送りました……すると、その後Reddit投稿まで書き直してくれました。実際、「ほぼ」まともに聞こえます。 (この部分は私が書きました)。
<同じ日の5時間後> 更新
この投稿の更新/要約(私が書いたもの)を投稿しました。これが正しいやり方かはよくわかりませんが、少なくともインターネット上の誰か1人がそう言っていたので、きっと本当なのでしょう。
https://www.reddit.com/r/ClaudeAI/comments/1iz1i61/update_i_uploaded_a_27yearold_exe_file_to_claude/
<更新 - 11時間後>
どうやら私は「Redditおじいちゃん」らしいです。面白いですね。
いくつか訂正します:
- はい、ClaudeはEXEのアップロードを許可しました。
- コンパイル済みEXEには認識できる文字列がいくつかありますが、多くはありません。
- Claudeがこの本文とタイトルを書きました。それ以外では、ワンショットでできたことがいちばん重要な点です。
- 今では29歳になった娘が、キーボードを叩くとwavファイルを再生し、テキストを表示していました。
コメント欄でチャットリンクが見えない人がいたので追加します:
https://claude.ai/share/3eecebc5-ff9a-4363-a1e6-e5c245b81a16
<更新 - 1日後>
Twitter/Xに再投稿したこの話は、閲覧数が100万件を超えました。全文はこちら。私は、スクリプトと投稿を書いたのと同じ文脈のまま、すべてのコメント付きで投稿全体をClaudeにアップロードしました。特に批判点を要約してほしいと依頼しました。以下はClaudeによる要約です。
有効な技術的文脈
一部の人は、VB4の実行ファイルはマシンコードではなくp-コードにコンパイルされるため、完全コンパイル済みの実行ファイルより分析しやすいと正確に指摘していました。これは実際にその通りです。.NET以前のVBは解釈可能なバイトコード形式を保存していたため、完全にコンパイルされたバイナリよりも情報を抽出しやすかったのです。
複雑さへの懐疑
別の人たちは、生成されたPythonコードが比較的単純(約100行)だと指摘しました。これは、アプリ自体が複雑なアプリケーションではなく、基本機能を持つシンプルなプログラムだったからです。印象的だったのは、生成コードの複雑さではなく、バイナリから動作するコードへ移るまでに何の労力も必要なかった点です。
プロセスに関する誤解
一部の批評家は、私がClaudeが伝統的な意味で実行ファイルを「逆コンパイル」したと主張していると受け取ったようでした。実際には、会話の中で説明したように、可視の文字列を分析して機能を推測したのであって、依然として印象的ではあるものの、本当の逆コンパイルとは異なります。
一般的なAI懐疑論
技術業界にはAIの能力に対する懐疑的な見方が自然に存在し、一部のコメント投稿者は、印象的なデモを反射的に偽物、誇張、あるいは「単なるパターンマッチング」と切り捨てがちです。これはAIの進歩に対する典型的な反応パターンです。私が最も妥当だと思う批判は、この成果は文脈に沿って捉えるべきだという点です。というのも、Claudeが任意のコンパイル済みコードに対して本物のバイナリ解析を行ったのではなく、VB実行ファイル内のテキスト文字列から巧みに推論したからです。
9件のコメント
実際、ただのテキスト文書を読んで分析するのと大して変わらないけどね..
わあ、昔の忘れられた資料も復元できるんでしょうか(笑)
昔の DOS ゲームの映像を上げたら exe ファイルが出てくるとか…
本文の意見のとおり、VBのexeは書かれたコードをそのまま確認できますが、C++のexeなので、アセンブリだったならまだ不可能だったでしょう。
AIの強みの一つは、命令を理解して応用できることで、他の言語へのマイグレーション作業も意外とうまくこなすんですよね。
Claudeの学習データの中に、VB 4.0のp-code関連文書が含まれていたのではないかと思います。
そうでないなら(事前学習済みの何かがなかったなら)、AIの立場から見てVB 4.0のp-codeとx86(あるいはarmなど)の機械語コードに違いはあるのでしょうか。どちらも、ある規則を持つ数字の並びにすぎませんよね。短いサンプルからパターンを読み取ったのだとしたら、それはそれで恐ろしいですね。
VBやPythonのような言語でexeを作ると、機械語にコンパイルされるわけではないので、exeさえあれば関数名や変数名がそのまま残った状態でソースコードを取り出せます。
こうした規則を学習して応用するということは……よほどでない限り、将来は開発者として生き残るのは難しそうですね。
でも、どうせアセンブリにも仕様があるので、仕様も一緒に渡せばすぐに翻訳できそうですね。
アセンブリから読める自然言語のコードとして出てくるのは、不要なものが削ぎ落とされたあとに再創造される領域(変数名、関数名など)なので、うまく出てくるようになるには少し時間がかかるのではないかと思います。
簡単かもしれませんね(笑)
私も10年以上前に似たようなもので論文を書きました
わあ、これはちょっと驚きですね