Ghidraがさらに進化!?マルウェア解析を激変させるMCPサーバー登場!
引用元:https://news.ycombinator.com/item?id=43474490
いつかどんなバイナリファイルもワンクリックでソースコードに変換できるツールが欲しいなー。全てのゲームが“オープンソース”になったら超楽しいじゃん?今はOpenGothicとかopenageみたいなプロジェクトがあるけど、コミュニティの努力が何年も必要だしね。
今のSOTAモデルってREがマジで下手なんだよね。オープンデータで学習しても改善するとは思えない。ネット上に高品質な例が少ないし、コード書く人も積極的に難しくしてるし。
リバースエンジニアリングを学習させるための高品質な合成データを作るのは簡単だよ。適当なオープンソースプロジェクトを使って、モデルにバイナリからコード(または同等のもの)を生成させればいいんだから。
そうだね。コード難読化ツールとか使って、もっと多様でリアルな例を作っても良いかも。
自分のじゃないコードはオープンソースにできないよ。彼らはクリーンな新しいバージョンを実装してるんだ。逆に、企業がGPLプロジェクトを選んで、コードを逆コンパイルして、プロプライエタリとしてリリースすることもできない。
>彼らはクリーンな新しいバージョンを実装してるんだ。
リバースエンジニアリングって既存のコードを分析することが多いし、それは秘密でもなんでもないよ。みんながリバースエンジニアリングの結果を議論したり共有したりするフォーラムもあるし。それがないと、元のゲームファイルを使えるような、ほぼ100%互換性のあるクローンを作るのはほぼ不可能だよ。
LLMがコードを理解するには、ASTネイティブであるべきだと思う。コードはツリー構造なのに、モデルには構造を明示せずに線形に与えてる。今のモデルは再帰性とか真の記憶がないから、階層構造を効果的に推論できないんだよね。
LLMは自己回帰モデルだよね。でも、ASTの順序って存在しないかもしれない。特に計算や制御フローの並列ブランチでは。各ブランチをN個のシーケンスにほどくこともできるけど、制御フローの情報が消えちゃう。ノードの子に客観的な順序がある場合でも、{先行順, 後行順} × {幅優先, 深さ優先}の4つのトラバーサルオプションがあるしね。ARC-AGI向けのカスタムAST DSLをいじった経験から言うとね。
ARC-AGIに取り組んだことがあるって聞いて嬉しいなー。俺もちょっと触ったことあるんだ。並列ブランチがあると、トラバーサル空間がめちゃくちゃになるってのはマジでその通り。トークンレベルで曖昧だったものが、ASTでは構造化された曖昧さになるんだよね。LLMはトラバーサル空間全体を解決する必要はなくて、クリーンで抽象的なインターフェースがあればいいと思う。タイプと構造で推論できれば、Copilotみたいなツールの信頼性が爆上がりすると思う。
>LLMは自己回帰モデルだよね。
ほとんどのLLMは自己回帰モデルだけど、例外もあるよ。例えば、Mercury[0]は拡散LLMだよ。
[0]https://www.inceptionlabs.ai/news
えーと、diffusion modelsの理解がめっちゃ浅いんだけど、あれって基本的には固定長の構造、特に連続空間に適用されるものだよね。木構造で使えるようにする方法もあるかもしれないけど、それはマジで簡単なことじゃないと思うよ。
Autoregressive LLMsは大体において木構造じゃなくて、上限付きの線形トークン列で動いてるんだよね。それって固定長のシーケンスと同型じゃん。なんで木構造で処理する必要があると思ったのか分かんないなー。diffusion language modelsはマジで存在するし。Mercuryはプロプラだけど、LLaDAもあるよ。https://ml-gsai.github.io/LLaDA-demo/
バイナリをAST形式に変換する研究ってあんまりないのかな?誰かが考えそうな気もするんだけど、見たことないんだよね。汎用的にできるのか、特定のコンパイラを知る必要があるのか?言語も特定する必要がある?あるいは、同じバイナリになる別の言語の仮説的なASTを作ったりできるのかな?
ASTというよりグラフの方がしっくりくるな。プログラムを、元々はテキスト→ASTとしてエンコードされた、ごちゃごちゃしたデータフロー/コントロールフロー/依存関係グラフとして考えるんだよね。GNNはいくつか試みられたけど、推論への道って感じはしなかった。datalogで簡単にできることを、RL推論器にやらせるにはどうすればいいんだろう?
コードのこと忘れちゃって、モデルに直接行動させればいいんじゃない?それが俺の予想。
LLMって情報を完全に順番に処理するんだよね。それがコアな能力で、人間っぽく感じる理由だと思う。
>LLMs process information in a strictly sequential manner。”LLM”っていうクラス全体がそうってわけじゃないよ。ほとんどのLLMはautoregressiveモデルだからそうだけど、diffusion LLMもあるし、autoregressiveモデルみたいに順番じゃないんだ。
>It’s their core capability
順番であることは能力じゃないし、LLMを定義するコアなものでもない。
>and what makes them feel so anthropomorphic.
それにも同意できないなー。LLMが人間っぽく感じるのは、人間が他人を人間として認識する時に言語を重視するからだと思う。LLMの出力は人間の言語使用をモデル化して、人間らしさの認識に使われる重要な特徴を直接ターゲットにしてるんだ。
LLMのギミックは、まるで話しかけてくるかのように、順番にテキストを出力すること。それが「生きてる」とか「知的」に感じさせるんだよ。(皮肉なことに、この順番性こそが実際には知性を制限してるんだけどね。AIの盛り上がりは見た目重視で、事実じゃないんだ。)
> That’s what makes them feel “alive” and “intelligent” to us.
この主張の根拠は何?「A」(チャットボットは順番にテキストを出力する)は真実で、「B」(彼らは知的に感じられる)も真実だけど、「AがBを引き起こす」って主張は根拠がないじゃん。たまたま両方とも真実で、個人的に因果関係があると感じるってだけで、何も証明にならない。
> The gimmick of the LLM is that it outputs text sequentially, as if it is talking to us. That’s what makes them feel “alive” and “intelligent” to us.
元の主張はそうだったね。でもやっぱり同意できない。彼らが生きているとか知的だと感じられるのは、人間みたいな言語を出力するからで、出力が順番に構築されるプロセスじゃないんだ。同じくらいの出力品質の非autoregressive LLMも、autoregressive LLMと同じくらい生き生きとして知的に見えるはず。tokenごとに順番に出力されるのがユーザーに見えないようなインターフェースのautoregressive LLMは、出力がストリーミングされるものと変わらず知的に見えるよ。
もしLLMが視覚的にテキストを順番に出力しないで、一度に出力したら、今ほど成功しないってことかな? そうだよ。人間の言葉は順番に出てくる(音を一つずつ出す)。LLMがトークンごとに自動補完でこれを真似ると、人間っぽく見えるんだよね。(「成功」って言葉には異議があるけど。LLMを人間みたいな知能として売るのは、ただのギミックで詐欺まがいだよ。) 完全にはそうじゃないよ。TransformerのAttentionのポイントは、トークン同士の関係を色々なレベルで計算するクロスワイズ処理なんだ。だからLLMは読むのが速いんだよ。全部の入力トークンを並行して処理してるから。LLMは外側のループでは順番にトークンを出すけど、内部の活性化関数には計画された出力全体の非シーケンシャルマップがあるのは明らかだよ。そうじゃないと、首尾一貫した文章を作ったり、動詞を最後におくドイツ語を話したりできないもん。 今MCPを呼び出せるツールって何があるの?少し読んだだけだけど、ClaudeのデスクトップアプリがローカルでMCPを使えるって知ったよ。MCPをリモートで使えるチャットインターフェースってある?ChatGPT、Claude、GeminiのウェブインターフェースでMCPのエンドポイントと関数を指定して、リモートのサーバーを呼び出せるようにしたいんだよね。GPTsとかGemsみたいに。 ビデオで少し触れたけど、Claude Desktopの他に、5ireが割とモデルに依存しないローカルMCPクライアントだよ。他にもあると思う。samaも最近ChatGPT DesktopにMCPクライアント機能が「すぐ」搭載されるって言ってた。リモートクライアントについては、Cloudflareに便利なツールがあるよ。”AI Playground”を見てみて。 OpenAIがAgents SDKでサポートを発表したよ。https://news.ycombinator.com/item?id=43485566 Cursorで使ってるよ。MCPサーバーを書くのは簡単で、CursorにTypeScriptで書いてもらうだけ。ローカルのMCPサーバーを使って、好きなリモートAPIを呼び出したり(または他のタスクを実行したり)できる。MCPサーバーはstdin/stdoutを使ってCursorと通信するよ。 Librechatを使ってるけど、かなり機能が充実してると思う。Obsidian MCPを更新して、最新の日記エントリがセラピストのように振る舞うようにしたんだ。設定例はこちら:https://www.jevy.org/articles/obsidian-mcps-to-work-with-not… @jevyjevjevsさん、サイトのブログにRSSフィードを追加してくれませんか?興味深くて役立つ記事がいくつかありました。購読したいのですが、RSSまたはメール購読が見当たりません。 SAM(Solace Agent Mesh)でMCPサーバーを使えるよ。チャットインターフェースがあって、リモートで実行できる。リモートで一番簡単なのは、無料のSlackワークスペースを使ってSAMにSlack連携することかな。そうすれば、ブラウザUIを提供するために穴をあける必要はないよ。https://github.com/SolaceLabs/solace-agent-mesh おっ、同じ疑問持ってた人いたんだ!Google検索したら、ここにリストがあったよ: サーバーのリストはこっちにあるね: BlockのGooseってツールがMCP使ってるらしいよ。 Gooseをうまく使うコツってあるのかな?ちょっと試したけど、手動で設定したOpen Web UIに比べて不安定だったんだよね。 Unity、Blender、Photoshopにも、MCP連携機能があるみたい。GitHubで探せるよ。 プロキシサーバーを使えば、MCPサーバーをリモートで実行できるかもね。 CursorがMCPをサポートしてると思うよ。 前にGhidraとLLMを連携させた動画も良かったよ。 まだ彼女のYouTubeチャンネルを見たことないなら、チェックしてみて!技術的な内容も面白いけど、レトロなOSグラフィックを使った編集も楽しいよ。 マジですごいよね。技術的なコンテンツ、動画と連携したGitHubのリポジトリ、セットデザイン、レトロな編集…大手スタジオの作品よりもクオリティが高いものが多いと思う。 radare2用のもあるよ: もし全てのバイナリが完璧にリバースエンジニアリングできるようになったら、セキュリティはどう変わると思う? みんなプロプライエタリなプログラムを、サーバーと通信するただのクライアントに置き換えるんじゃない?それか、準同型暗号に全力投球するか。 形式的に証明されたシステムだけが安全になるだろうね。 アセンブリが読めれば、全てはオープンソースみたいなもんだよ。 セキュアエンクレーブがほとんどのコンピュータに現れるだろうね。暗号化なしに何も実行されなくなるかも。 ghidraからLLMにコピペして解析させようとしたけど、うまくいかなかったんだよね。ベンチマークとかあると嬉しいな。 一度だけ試したけど、逆の経験をしたよ。PS2のゲームから5つくらいの関連関数を与えたら、グラフィックスコードに関連するものだと正しく推論して、パラメータに適切な型と名前を付けたんだ。もちろん、これは当たるも八卦当たらぬも八卦だと思うけど。 同じような経験をしたよ。ghidraからの不安定なデコンパイルを取ってきて、パラメータと関数に名前を付けることができたんだ。文字列内の単一の名前に基づいてゲームを把握することもできた。ラベル付けされたデコンパイルの私の読み方に基づくと、それはおおむね正しそうに見えた。そして間違いなく私よりずっと速い。たとえ100%頼らなくても、間違いなく関数の素晴らしい下書きパスだった。 ほとんどの場合、トレーニングデータから認識された、どこかに紛れ込んだシンボルがあっただけだと思うよ。 それどこから来てるの?ランダムなPS2ゲームのコードシンボルが学習データに入ってる可能性はめっちゃ低いと思うよ。コードを理解して書き換える能力があるって方がずっとありそう。LLMが何年も前からやってることじゃん。 親コメントは経験なしで想像で言ってるね。LLMは16進数とかバイトコードとかbase64とかrot13とかも理解できるんだよ。俺はいつもLLMを使ってバイトコードをデコンパイルしてるよ。 こういう系のベンチマークをどう作るかずっと考えてるんだけど、LLMを審査員にする以外に良いアイデアが浮かばないんだよね(でもすぐぐちゃぐちゃになる)。現在のニューラルデコンパイルの試みが、構文エラーなしで再コンパイルできるか、とか、再コンパイルの機能的な同等性とか、一見意味のないベンチマークで評価されてる理由もわかる気がする。 えー、特にリバースエンジニアリングに関しては、最高のベンチマークがあるじゃん。オリジナルのコードをチェックできるんだから。 それってLLMを審査員にする必要があるよね。 いや、そんなことないよ。実際のソースコードとdiffを取ればいいだけじゃん。実際のdiffよりはもっとファジーで連続的なものになるだろうけど、それでも。 機能的な同等性に加えて、ニューラルデコンパイルの重要な価値は、それが復元したシンボル(関数名、変数名、メンバ名を含む構造体定義)にあるよね。もしLLMが、元々“find_pool”と呼ばれてた関数に対して“FindFirstFitContainer”を予測したとしたら、これは正しいの?間違い?26.333%正解? 2つのコード片が同等であることを証明するのって、めっちゃ難しいよね(計算不可能)。 MCPサーバーの“カタログ”を作ってる人いる?Githubで検索しても、なかなか見つからないんだよね。 最近、MCPサーバーのリストみたいなウェブサイトがめっちゃ増えてる気がする。 ちょっと詳しく説明するね。全部のMCPサーバーをインデックスしてるんだけど、中にはMCPサーバー自体をリモートでホストしてくれるサービスもあるんだ。Glamaとかmcp.runとか、最近だとCloudflareもその仲間入りしてるよ。 これらのMCPレジストリって、MCPサーバーも公開してるのかな?そうすればクライアントはレジストリを使ってMCPサーバーを自動で見つけられるよね。 すでにディレクトリはいくつかあるよ。いくつかメモにまとめたから見てみて。 これすごくいいね!でもMCPサーバーにもっと機能があったら嬉しいな。例えば、プログラムの任意のアドレスを読み書きできるとか。前にXORされた命令を自己解凍するCTFの問題に取り組んだんだけど、XORされたアドレスの値を読みたかったんだ。 関連情報(マージされたもの):GhidraMCP: AIがマルウェアをリバースエンジニアリング [動画] - https://news.ycombinator.com/item?id=43475025 REは正確さと注意深い推論が必要な作業で、LLMの推論は当てにならない。LLMは推論が苦手だから、AIに僕らの仕事は奪えないね。 そうとは限らないよ。“まあまあ”とか“十分”って思えるレベルでいいなら、今のLLMでも十分代わりになる。色々壊しながらもね。 パンドラの箱を開けちゃったね。 lauriewired、愛してる。もっとコメントを表示(1)
https://openai.github.io/openai-agents-python/mcp/
https://github.com/punkpeye/awesome-mcp-clients
https://github.com/punkpeye/awesome-mcp-servers
https://block.github.io/goose/
https://news.ycombinator.com/item?id=42860849
Malimite – iOS and macOS Decompiler
https://news.ycombinator.com/item?id=42829402
Jan, 2025 (37 comments)もっとコメントを表示(2)
https://github.com/dnakov/radare2-mcp
例えば:
>https://mcpservers.org/”
>https://glama.ai/mcp/servers”
>https://www.claudemcp.com/servers”
それにいつものGitHubのやつ:
>https://github.com/punkpeye/awesome-mcp-servers”
マジで流行ってるね。もっとコメントを表示(3)
https://notes.dsebastien.net/30+Areas/33+Permanent+notes/33…