
Curated guide to becoming a malware analyst, covering essential knowledge, reverse engineering, analysis tools, and LLM-assisted learning with practical exercises and resources.
これは@PINKSAWTOOTHの私見で、必ずしもあなたにとって一番良い方法ではないかもしれません。勉強方法の一例として参照してもらえれば幸いです。
これを読む前に、私が尊敬するマルウェア解析者の@hasherezade氏がマルウェア解析の勉強をどのように始めたらよいかをブログにまとめています。 重複する部分があると思いますが、一読することをおすすめします。また、以下のブログは英語のソースが中心なので、可能な限り日本語を中心にしたソースを紹介したいと思います。
[!NOTE]
2026年追記: LLM時代のマルウェア解析学習
このページを書き始めた当時は、LLMやAI Agentが今のように日常的に使える時代ではありませんでした。 2026年現在、マルウェア解析やリバースエンジニアリングを勉強するのであれば、書籍やWeb上の資料に加えてLLMを積極的に利用することをおすすめします。特に、学習用プログラムの作成、コードやアセンブリの説明、解析、解析スクリプトの作成、解析結果の整理などでは非常に有用です。
一方で、多くの解析技術においてLLMが人間を上回る場面が増えてきました。しかし、だからといって基礎知識が不要になったわけではありません。LLMの出力を理解し、自分自身でその根拠や正しさを確認するためには、専門知識を持っていることが重要です(その作業に意味がなくなる日も近いかもしれませんが・・・)。本稿では、LLMを「答えを出す装置」ではなく「一緒に学習する教師、解析時の助手」として利用することを前提にしています。
まず、マルウェア解析の前提となる知識について簡単に説明します。 マルウェア解析について学ぶ前に、最低限コンピュータサイエンス(計算機科学)の知識が必要になります。
これらについては、大学や専門学校で履修する内容が理解できていればよいかと思います。 (どこかの大学のオンラインシラバス等を確認することで、より具体的な内容を知れるかと思います。) 本稿では、プログラミング言語やコンピュータサイエンスをどのように学ぶかはスコープ外としますが、以下がおすすめの資料です。
マルウェア解析に必要となる知識を大きく以下の5つに分けます。
まずはマルウェアとはなにか、マルウェア解析とは何を行う作業なのかを学ぶ必要があります。 マルウェア解析全般について学ぶのにおすすめの資料、書籍を紹介します。
マルウェア解析のオンライントレーニングもおすすめです。
マルウェアの挙動、悪用するテクニックについてまとめられているページを紹介します。
日々公開されている脅威情報やマルウェア解析を扱ったブログやレポートも重要な情報源になります。RSSリーダなどで更新を通知しておくと便利です。 それらをまとめているサイトもあるので、活用することができます。
これらの中で日本語でマルウェアの詳細な解析を取り上げているものを紹介しておきます。
他にも、YARAルールを読むことで、マルウェアの特徴について学習することができます。
リバースエンジニアリングは、マルウェア解析において一部でしかありませんが、マルウェア解析者になるためには避けて通れない道です。 サンドボックスを使った動的解析やツールを使った動的解析(手動でおこなうデバッグを除く)だけでは、マルウェアの機能の全容や使用されているアルゴリズムを特定することは困難です。
リバースエンジニアリングをおこなうためには、元のソースコードについて理解しておく必要があります。 (マルウェア解析で一般的なWindows環境を想定しますが)Windows APIを使ったプログラミングの経験なしにマルウェア解析をするのは遠回りになるでしょう。
Windows APIはMicrosoftが公式ドキュメントとサンプルを公開しています。 ※日本語翻訳されていると一部表示がおかしい場合があるので注意しましょう
WindowsのOSの仕組みを学ぶのには以下の書籍がおすすめです。
C/C++はWindowsマルウェアのリバースエンジニアリングを学ぶ上で今でも非常に重要なので、最初に学ぶ言語としておすすめします。 一方で、実際の解析対象はC/C++だけではありません。2026年現在は少なくとも以下について、バイナリやランタイムの特徴を知っておくと役立ちます。
最初からすべての言語を深く学ぶ必要はありません。開発言語やランタイムが変化すると必要な知識も変化することは知っておきましょう。
解析対象の言語や環境でのプログラミング技術が身についたら、リバースエンジニアリングについて勉強していきましょう。 マルウェア解析で一般的なWindowsのPEファイルを解析する場合、まずはCやC++の入門プログラムをリバースエンジニアリングしてみましょう。 次のステップとしては、自分でコンパイルした(ソースコードが存在する)Win APIを使ったPEファイルを解析してみましょう。同じソースコードでも、選択するプロジェクトやコンパイルやリンクのオプションなどを変更して、実行ファイルにどういった変化が現れるかまで見ておけば、リバースエンジニアリング技術がかなり付くと思います。
以前はMicrosoftのサンプルやGitHub上のコードを探し、それを書き換えながら学習することをおすすめしていました。この方法は現在も有効ですが、2026年現在はLLMやCoding Agentに自分の学習目的に合わせた小さなプログラムを作ってもらう方法も非常に有効です。
例えば、最初は10〜50行程度の小さなプログラムを生成してもらいます。
CreateFileWとWriteFileを使ってテキストファイルを作成する、
できるだけ小さなWindows Cプログラムを作ってください。
リバースエンジニアリングの教材に使いたいので、
処理を複雑にせず、各Windows APIを使う理由も説明してください。
生成されたコードを、Microsoft Learnのドキュメントと照らし合わせながら内容を確認し、自分でコンパイルします。 その後、GhidraやIDAなどで自分がコンパイルしたバイナリを解析し、元のソースコードと逆アセンブル・デコンパイル結果を比較します。
以下のループで勉強します。
LLMに小さなコードを作らせる
↓
ソースコードを読む・APIを調べる
↓
自分でビルドする
↓
Ghidraなどで解析する
↓
元のソースコードと比較する
↓
分からない部分だけLLMに質問する
↓
別の条件で再ビルドして比較する
例えば、同じ処理のソースコードについて以下を比較してみるとよいでしょう。
元のソースコードを知っている状態でバイナリを解析することは、リバースエンジニアリングを学ぶ上で非常に良いトレーニングになります。
さらにリバースエンジニアリング技術を磨くにはCTFのRev問やCrackmeを解くと良いでしょう。 特にPEファイルの問題やマルウェア解析者を対象としたものが、おすすめです。
またマルウェアのリバースエンジニアリングでは、暗号アルゴリズムの処理をリバースエンジニアリングすることが多いので、基本的な暗号技術について学ぶことを推奨します。 アルゴリズムを理解したらGitHubなどで公開されているオープンソースの暗号アルゴリズム実装のソースコードを読み、実際にリバースエンジニアリングしてみましょう。
マルウェア解析をすすめるうえで、よりよいツールを使うことやツールを使いこなすことで容易に解析できることがあります。 また、様々な知識を持っていても実際にはツールを通して解析するため、ツールの利用方法も理解しておく必要があります。
解析ツールのインストールや更新などの管理には、Windows環境ではMandiantが公開しているFLARE-VMが便利です。マルウェア解析やリバースエンジニアリングに必要なツールをまとめて導入することができます。
Linux環境では、REMnuxが利用できます。こちらもマルウェア解析に必要なツールがまとめられており、収録ツールの一覧から確認できます。
FLARE-VMとREMnuxはどちらもマルウェア解析環境を簡単に構築できるため、初めて解析環境を作る場合にもおすすめです。それぞれに含まれているツールを確認し、実際に使ってみることで、どのような解析ツールが存在し、どのような場面で利用するのかを学ぶことができます。
また、以下のリンクで紹介されているツールについても利用してみるとよいでしょう。
LLMの便利な使い方の一つは、分からないことをその場で質問できる教師として利用することです。LLMが登場する以前は、自分が理解できていないことを自分で調べ、その内容を理解する必要がありました。特に初学者の場合、そもそも何を調べればよいのか分からないことも多く、学習するうえで一つのハードルになっていたと思います。現在では、高いレベルの知識を持つLLMが、自分の理解度に合わせて何度でも丁寧に説明してくれます。分からなければ聞き直せばよいですし、「もっと簡単に説明して」、「具体例を出して」、「この理解で合っているか確認して」といった使い方もできます。 意欲さえあれば、分からないことをいくらでも質問しながら学習できる、いい時代になったと思います。
例えば、逆アセンブル結果やデコンパイル結果について、以下のような質問ができます。
この関数の役割と、そう判断できる理由を教えてください。
このデコンパイル結果から変数の型を推定したいです。
型を判断するために、どの命令、API、参照先を確認すべきですか?
このWindows API呼び出しの前後で使われている構造体について説明してください。
各フィールドを確認するためにGhidra上でどこを見るべきかも教えてください。
このアセンブリを1命令ずつ説明するのではなく、
まずbasic blockごとの役割を整理して、私が自分で処理を推定できるようにヒントをください。
私はこの関数を「設定ファイルの読み込み処理」だと推測しました。
この仮説を検証するために確認すべきポイントを挙げてください。
最初から答えを聞くのではなく、ヒント、確認ポイント、検証方法を聞く使い方がおすすめです。
2026年現在は、ChatGPTのような対話型LLMだけでなく、ファイルの読み書き、プログラムのビルド、コマンドの実行などを行えるCoding Agentも利用できるようになっています。 さらに、MCP(Model Context Protocol)などを利用することで、AI Agentから解析ツールを直接操作する方法も広まりつつあります。 例えばREMnuxには、AI AgentからREMnux上のマルウェア解析ツールを利用するためのMCP Serverが用意されています。
Ghidraについても、AI Agentから操作するためのMCP実装がいくつか登場しています。私もGhidraをHeadlessで利用し、MCP経由でAI Agentから解析を行うためのMecha Ghidraを開発しています。
IDAやその他のリバースエンジニアリングツールについても、MCPやAgentと連携するための実装が複数登場しており、これまで人間が手作業で行っていた解析作業をAgentに任せることができるようになっています。 一方で、初学者の段階からすべての解析をAgentに任せてしまうのはおすすめしません。「なぜその解析を行ったのか」「ツールが内部で何をしているのか」「出力された結果が正しいのか」といったことを自分で判断する力が身につきにくくなるためです。
まずは自分で解析し、分からない部分をLLMに質問するところから始めるとよいでしょう。慣れてきたら、解析支援スクリプトの作成、MCPによるツール連携、Agentを使った解析の自動化へと徐々に進んでいくことをおすすめします。
業務で扱っているマルウェア、顧客から提供されたファイル、未公開のIoC、インシデント情報、社内情報などを外部のLLMサービスへ入力する場合には注意が必要です。 利用しているサービスの契約内容、データの保持期間、学習への利用有無、所属組織のルールなどを確認したうえで利用しましょう。
必要に応じて、以下のような対策を検討してください。
また、マルウェア本体や解析対象のファイル、解析結果の中には、AI Agentを意図しない動作へ誘導する文字列が含まれている可能性もあります。 特に、AI Agentがファイル操作やコマンド実行、解析ツールの操作まで行える場合は、通常のLLMよりも強い権限を持つことになります。そのため、マルウェア解析でAI Agentを利用する場合は、VMなどの隔離環境上で実行し、安全性を確保することをおすすめします。
AIはかなり賢くなりましたが、それでも意図しないコマンドを実行することがあります。 これまでのマルウェア解析と同様に解析環境を隔離するという基本を守って利用しましょう。
2026年現在、マルウェア解析を勉強するために、最初から実際のマルウェアを入手する必要はありません。 むしろ初学者には、以下の順番をおすすめします。
最初のうちは、元のソースコードが分かっているプログラムを教材にするのがおすすめです。 自分で解析した結果と実際のソースコードを比較できるため、「どこまで正しく解析できたか」「どこを読み違えたか」を自分で確認できます。 いきなり実際のマルウェアを解析するよりも、まずは答え合わせのできる教材を使って、逆アセンブルやデコンパイル結果の読み方に慣れる方が効率よく学習できると思います。
ここではマルウェアの入手方法について触れますが、紹介するサービスを利用する際は利用規約を必ず読んで利用してください。 また、以下の内容は、マルウェアの入手を勧めるものではありません。
不正指令電磁的記録に関する罪では、マルウェアの作成、提供、取得、保管などについて、その目的や正当な理由の有無などが要件になります。
私は法律の専門家ではないため、どういった理由であれば法律上の正当な理由にあたるかはわかりません。
個人の趣味でマルウェア解析をおこなうことは正当な理由として認められない可能性もあります。
捜査されると困る、裁判になったら困る、正当な理由として提示できる活動実績がない、弁護費用がないなど、平穏な人生を絶対に送りたいという人は、個人の趣味でやらないほうがよいかと思います。
とはいえ過度に怯えすぎて萎縮する必要はないとは思います。 最低限、警視庁が公開している不正指令電磁的記録に関する罪に関するページには目を通して、内容を確認しておきましょう。
マルウェアを扱う上で気にしなければいけないことは、法律面だけではありません。 マルウェアを実行(故意かどうかは問わない)すると、たいていの場合は攻撃者の用意したサーバにアクセスします。 攻撃者のサーバには自分の利用しているIPアドレスのログが残りますし、接続時に利用しているシステムの情報を送信することもあります。 マルウェアによっては、攻撃者によるコマンドの実行などがおこなわれることも考えられますし、内部ネットワークのスキャンや(一番避けるべき)外部への感染活動などがおこなわれるかもしれません。 攻撃者のサーバに記録された情報は攻撃者自身だけでなく、第三者へ提供されることもあります。また、捜査機関はサーバを差し押さえてログを解析したうえで、ISPに情報開示請求をおこなうことができます。
以下のどれか一つにでも当てはまる場合は、実際のマルウェアを利用した学習は控えましょう。
実際のマルウェアを個人的に入手しなくても、学習する方法は前述しております。
最後にオタクがみんな大好きな以下の名言たちで前置きを終えます。
With great power comes great responsibilityThe abyss gazes also into you.マルウェアのサンプルやIoCを共有するためのサービスがいくつかあります。もっとも登録が多く有名なサービスはVirusTotalですが、有償アカウントのみダウンロードが可能であるため、ここでは無償で利用可能なサービスを紹介します。
この2つのサービスがサンプルの入手先としては有力です。
参考情報として以下のサービスも記載しておきます。
無料で使用できるオンラインサンドボックスのサービスは本来マルウェアの挙動を解析するサービスですが、他者の投稿したマルウェアをダウンロードすることができます。
以下はRAT(Remote Access Trojan)の実装を理解するのに役に立つリポジトリです。 ソースコードと実際のバイナリを比較することで、通信処理、コマンド実行、ファイル操作などの実装を学ぶことができます。
マルウェアのC2通信やAgentの実装を理解するためには、オープンソースで公開されているC2フレームワークのソースコードを読むことも参考になります。 C2フレームワークには、AgentとC2 Server間の通信、コマンドの受信と実行、ファイル操作、プロセス操作、通信データの暗号化など、マルウェアでもよく見られる機能が実装されています。 それぞれ実装言語やAgentの構造、通信方式が異なるため、ソースコードと生成されたAgentを比較しながらリバースエンジニアリングしてみるのもよいでしょう。