コンピュータの RAM にアクセスして読み取る方法:実践ガイド
この記事は、コンピュータの RAM の内容を読み取る方法に関する包括的なガイドです。
ランダム アクセス メモリ (RAM) は、コンピュータ システムの重要なコンポーネントであり、システムがその機能を実行するために必要なデータを一時的に保存する役割を果たします。ただし、RAM の内容は非常に揮発性が高いため、通常はシステムをシャットダウンすると失われます。
RAM の内容を保存する 1 つの方法は、RAM ダンプを実行することです。これは、RAM の内容をハード ドライブなどの記憶装置にコピーするプロセスです。 RAM ダンプを分析すると、そこに含まれるデータから、ダンプ取得時のシステムの状態に関する貴重な洞察が得られます。
この記事では、RAM の内容を読み取るプロセスを説明するとともに、RAM ダンプとは何なのか、そしてそれがコンピュータ システムの分析にどのように役立つのかについて説明します。また、RAM ダンプを実行する方法と、結果のデータを分析する方法についても段階的に説明します。
RAM データを読み取る理由
ディスクからデータを読み取ることは、あなたにとって馴染みのある操作かもしれません。しかし、最も重要な情報が保存されている RAM から直接データを読み取ることもできるのでしょうか?
開発者として、空間の複雑さを調査し、RAM をさらに詳しく調べて、何が起こっているのかを理解することができます。
RAM の内容にアクセスして読み取ることは、さまざまなシナリオで役立ちます。一般的な使用例の 1 つは、コンピューター システムの問題のトラブルシューティングと診断です。 RAM の内容を調べることで、特定の時点でのシステムの状態を把握できます。
たとえば、コンピュータが突然クラッシュした場合、RAM の内容を調べるとクラッシュの原因を特定するのに役立ちます。
もう 1 つの使用例は、フォレンジック分析です。不正行為の証拠を求めてコンピュータ システムを調査する場合、RAM の内容を調べると、システム上で実行されていたアクティビティについて貴重な洞察が得られます。
たとえば、セキュリティ専門家は RAM 分析を使用して、システム上で特定のプロセスが実行されているかどうかを判断したり、最近アクセスされたファイルを特定したりすることがあります。
さらに、RAM の内容にアクセスして読み取ることは、ソフトウェア開発者や研究者にとっても役立ちます。 RAM に保存されたデータを分析することで、開発者はソフトウェアのパフォーマンスについて洞察を得ることができ、潜在的な問題やボトルネックを特定できます。研究者は、RAM 分析を使用してマルウェアの動作を研究したり、新しいセキュリティ ツールや技術を開発したりすることもできます。
全体として、RAM の内容にアクセスして読み取ることは、トラブルシューティング、フォレンジック分析、ソフトウェア開発、研究に役立ちます。これは、コンピュータ システムの内部動作に関する洞察を得る貴重な方法を提供し、問題や潜在的なセキュリティ脅威を特定するのに役立ちます。
詳細に進む前に、命名法を簡単に見てみましょう。これは一般的な知識かもしれませんが、このガイドを読み進める際には用語を理解する必要があるため、再確認する価値があります。
RAM (Random Access Memory の略) と呼ばれる物理ハードウェア デバイスがあり、これには物理メモリ、CPU、ハードディスク、その他の物理コンポーネントが含まれます。
これに加えて、オペレーティング システムがあります。オペレーティング システムは常に「カーネル」として知られるハードウェアと通信しています。これは、このソフトウェアの最も重要な側面の 1 つです。
ユーザーの観点から物事を考えると、タスクを実行できるように最初にオペレーティング システムにログインします。そのタスクの大部分にはアプリケーションの実行が含まれます。
カーネルとは何ですか?
カーネルは、舞台裏で実行されるプログラムの助けを借りてユーザーからの指示を受け入れるオペレーティング システムの基本部分です。これは、バックグラウンドで実行しているプログラムに関係なく発生する可能性があります。
計算する必要があるものはすべて中央処理装置 (CPU) によって処理されますが、何をするにしても、CPU によって提供されるサービスをどのように管理するにしても、データ、命令、コード、プログラムはすべてランダム アクセス メモリ (RAM) を経由する必要があります。
これは、任意の時点でデータに対して行ったあらゆる結果がメモリ上で利用できることを意味します。あなたがプログラマーで、何らかのデータ構造を構築している場合、これはすべてのデータが RAM 上に存在することを示します。
RAM に直接アクセスして、データ構造がどのように作成され、それらがどのように配置されているかを確認でき、空間の複雑さがそこでどのように機能するかを確認できます。
たとえば、Chrome などの Web ブラウザについて説明している場合、アプリケーションでセキュリティ上の欠陥が発生した可能性があります。したがって、最も効果的な方法は、RAM に移動してデータがどのように動作しているかを調査することです。
Chrome (または任意のブラウザ) で gmail.com などの安全な Web サイトを開いたとします。ユーザー名やパスワードなど、Gmail に入力した情報はすべて、インターネット経由で Google が運営するサーバーに送信されます。そのデータは完全に暗号化されており、パスワードを解読するのは不可能ではないにしても困難です。
しかし、パスワードを入力するには、キーボードが接続されたコンピュータを使用することが多いでしょう。その後、一部のプログラムはデータを暗号化してインターネットに送信します。これは、最初はデータが RAM に存在していたことを意味します。
まず、パスワードは標準データであり、RAM の最上位に置かれます。その後、一部のプログラムがデータを暗号化してインターネットに送信します。 RAM にアクセスできる場合は、RAM を調べて、パスワードが暗号化されているかどうかを判断できます。このプロセスは非常に簡単です。
これがどのように機能するかを例で見てみましょう。 「a」が変数、「9」がデータであると仮定します。プログラムを実行すると、このデータが RAM にロードされます。プログラムが終了すると、RAM のデータは失われますが、まだ誰もそれを証明していません。しかし、これは事実であり、少しの調査でそれを証明できます。
では、このデータがメモリの一番上にロードされている場合、アプリケーションの実行が終了した後も、このデータがまだ RAM に存在するかどうかをどのように確認すればよいでしょうか?
RAM からこれらの内容はすぐに消去されます。 「RAM ダンプ」は、すべての RAM をキャプチャするプロセスです。これは、データ セット全体がアクセス可能になって初めて RAM にロードされる実際の形式を示しています。次に、メモリからデータをキャプチャまたは抽出する方法を学びます。
これを実現するには、何らかの形式のソフトウェアが必要です。その結果、このプログラムの目標は、記憶のさらに奥へ旅することです。メモリに移動し、保存されているすべてのデータをメモリから取得してから続行します。
LiME とは何ですか?
Linux メモリ抽出ツール (LiME とも呼ばれます) は、強力なソフトウェアです。これは、Linux からメモリを抽出するために使用するものです。このソフトウェアはドライバーとも呼ばれ、モジュールとも呼ばれます。これは、RAM がデバイスであるためであり、これが事態をさらに複雑にします。
デバイスの内容を読み取れるように、デバイスにアクセスするには何らかの形式のドライバーが必要です。 LiME はドライバーの一例であり、Linux に詳しい方は、ドライバーを機能させるには、カーネルの支援を受けてドライバーをロードする必要があることをご存じかもしれません。
Linux のコンテキスト内では、ドライバーはモジュールとも呼ばれます。つまり、LiME は Linux カーネル モジュールです。いわゆるカーネル読み込み可能モジュールにアクセスできるため、オペレーティング システムにモジュールをインストールできます。
背景については十分に説明しました。ここで、RAM の内容を抽出する方法を見てみましょう。このプロセスを実践的な方法で段階的に説明していきます。
セットアップ およびインストール
したがって、必要なのは LiME ドライバーだけです。この特定のモジュールをダウンロードするためのリンクは次のとおりです:https://github.com/gursimarsm/LiME。
次に、Linux システムを起動します (私は RedHat Enterprise Linux を使用しています)。 free -h を使用できます。 コマンドを使用して、使用されている RAM メモリの量、使用可能な RAM メモリの量、その他の詳細を確認します。私の場合は次のようになります:
free -m の実行による出力 コマンド
RAM にアクセスするには、カーネルがいくつかの追加モジュールをロードできるソフトウェアが必要です。この場合、モジュール名は LiME です。したがって、インストールするソフトウェアは「kernel-devel」と呼ばれます。 」および「カーネルヘッダー」 ”。これら 2 つのソフトウェアは、その後のアクション、つまり LiME モジュールを使用するためにインストールする必要があるものです。
ソフトウェアをインストールする場合は、「yum」を設定しておく必要があります。文脈としては、ええ は、RedHat Linux オペレーティング システムにソフトウェアをインストールするために使用できるコマンドです。参考のために、付録で設定方法をデモします。
インストール
ソフトウェアをインストールしたら、GitHub からいくつかのドライバーをダウンロードする必要があるため、もう 1 つソフトウェアが必要になります。したがって、Git をまだインストールしていない場合は、Git をインストールする必要があります。これを行うには、コマンド yum install git を使用します。 。また、アカウントを操作できるように設定する必要があります。
# git config --global user.name "Your Name"
# git config --global user.email "you@example.com"
上記のリポジトリを共有しました。これはロード可能なカーネル モジュール (LKM) です。これにより、Linux オペレーティング システムまたはあらゆる種類の言語オペレーティング システム (Android も Linux をベースにしているため、Android デバイスを含む) からメモリ全体を取得できます。
**# g**it clone**** [**https://github.com/gursimar**sm**/LiME**](https://github.com/gursimarsm/LiME) を使用してモジュールをダウンロードできます。 コマンド。
それをダウンロードした後、ソフトウェアのディレクトリに移動する必要があります。そこには複数のフォルダーが見つかります。ただし、メイン コードを実行するには、「src」ディレクトリに移動する必要があります。
このディレクトリには、C 言語に基づく複数のプログラムがあります。したがって、ファイルを使用するには、それらをコンパイルする必要があります。これを行うには、make を使用できます。 コマンド。次のようにインストールします。
# yum install make
# yum install gcc
ディレクトリ /LiME/src/ で、make を実行します。 コード全体をコンパイルするコマンド。
エラーが発生した場合は、最新バージョンの LiME を使用していることが原因である可能性があります。このバージョンには、orc メタデータ生成と呼ばれる新機能が付属しています。この機能を実装するには、LiME の一部である elfutils-libelf-devel と呼ばれるものをもう 1 つインストールする必要があります。 。以下に示すように、yum を使用してこれを行うことができます。
elfutils-libelf-devel のインストール方法
それが完了したら、make を実行すると、 コマンドは、GCC コンパイラーにコード全体をコンパイルするように要求します。コンパイル後、カーネル オブジェクト ファイルと呼ばれる最後のオブジェクト ファイルが 1 つ作成されます。これが LiME の最後のモジュールです。
出力
ls を使用すると、同じディレクトリでこのファイルを見つけることができます。 コマンド。
モジュールの使用方法
このモジュールを使用すると、カーネルは RAM 全体をキャプチャまたは読み取る機能を備えています。デフォルトでは、RAM 全体を一度に読み取ることはできませんが、LiME モジュールのおかげで、それが可能になりました。
LiME モジュールの詳細については、modinfo を使用してください。 コマンド。 modinfo と入力します lime とともに 。これにより、ファイルが利用可能な場所などの詳細が表示され、また、ある種の追加パラメーターが付属するすべてのモジュールまたはドライバーも表示されます。すべてのパラメータにはいくつかの利点があります。
modinfo
ここでは、非常に重要な 2 つのパラメータを使用します:path と format .
path つまり、RAM全体を読み取るときは、RAMのデータを何らかのファイルに保存する必要があります。したがって、作成する宛先ファイルを指定するには、その特定の情報をここで指定する必要があります。
次のパラメータ format 、RAM データを読み取る形式を指定します。そこで今回はRAMのフォーマットをそのまま読み込みたいと思います。 RAM に保存されているデータのほとんどはバイナリ形式であり、そのバイナリ形式のみでデータ全体を読み取り、生の形式でキャプチャしたいと考えています。
したがって、形式は生のままで、パスを指定した場所にファイルに保存されます。
最後に、RAM からデータを読み取ります。それでは、RAM 全体の読み取りを開始するのに役立つメイン コマンドに移りましょう。
デモンストレーション
このデモでは、Chrome で Gmail アカウントのパスワードを入力します。これは、RAM からデータをキャプチャする方法と、パスワードが暗号化されているかどうかを学ぶのに役立ちます。
これら 2 つのことを確認するには、コマンド プロンプトに移動し、データがまだ RAM 上にあるかどうかを確認します。コマンド insmod を使用して特定のモジュールをロードする必要があります。 。これはモジュールを挿入するのに役立ちます。
モジュールの完全なパスをコピーし、insmod とともに貼り付けます。 コマンド。
insmod コマンド
このモジュールはカーネルの助けを借りてロードされます。モジュールは RAM からデータ全体のキャプチャを開始し、myram.data などのファイルに保存します。
また、メモリ ダンプ全体または RAM ダンプ全体をこのファイルにロードし、キャプチャする形式も指定します。したがって、形式は raw 形式になります。
これら 2 つのパラメータを使用します (今のところは心配しないでください)。実行に必要なパラメータは 2 つだけです。このコマンドを押すとすぐに、あらゆるデータがキャプチャされ、この特定のファイルに保存されます。 CPU の速度と RAM 内のデータ量に応じて、このコマンドには通常数秒かかります。
コマンド
データの読み取り方法
これで、myram.data ファイルが作成され、RAM のデータ全体がこのファイルに保存されます。このデータは生の形式でキャプチャしたため、データはバイナリになります。このファイルからこのデータを直接読み取ろうとした場合、人間としては、head コマンドを使用して最初の行から上位 10 行の一部を読み取ってみても、データを読み取ることはできません。
出力
したがって、データ全体を読み取る「cat」コマンドを使用できます。しかし、やはり同じことが起こります。データ全体が読み取られますが、データはバイナリ形式で表示されます。次に、このコマンドでパイプ関数を使用し、それを strings という別の新しいコマンドと組み合わせる必要があります。 :
コマンド
String は、データを人間が読める形式の通常のテキストに変換するコマンドです。
出力
リストはまだまだ続きます。 Ctl+C を使用して中断できます。 .
現時点では、データ全体を確認したり読んだりすることにはあまり意味がありません。 RAM 上にあるデータの一部は、mywebpasswordgmail というパスワードであることがわかっています。したがって、このデータが RAM 上で利用可能であることを確認するために、grep とともにもう 1 つのパイプを使用できます。 コマンド。 grep コマンドはデータの並べ替えに役立ちます。
cat /myram.data | strings | grep mywebpasswordgmail
ここで、データ全体でこの文字列を検索します。データを通常のテキストに変換し、その特定の文字列が表示される場合はどこでも grep がその行を取得して検索を開始し、このデータを表示します。
したがって、この単純な例からわかるように、キーボードで入力したものはすべて RAM に入る可能性があります。パスワードやサーフィンしている安全なサイトであっても、データは RAM 上にあります。どのようなプログラムを実行するかは関係ありません。キーボードを使用して入力すると、すべてが RAM にロードされ、抽出できます。これはメモリ ダンプと呼ばれます。
LiME は他にも多くの強力な機能を提供します。現在、アクションを実行するシステムから直接データを取得しています。ただし、システム上で LiME を実行することもでき、リアルタイムでデータをキャプチャし、そのデータをネットワーク経由で別のコンピュータに送信できます。
これはどういう意味ですか?このように考えてください。たとえば、誰かが Web サイトを開いて、リアルタイムで何かを入力しているとします。このメッセージ全体が別のコンピュータにリアルタイムで送信されています。
ここではキーロガーについて話しているのではなく、RAM について話しているだけです。プログラムの実行中に何が起こっても、データベースには何らかのデータが保存されます。プログラムがハードディスクの他の部分からデータを読み取っています。また、RAM 上で起こっていることはすべて、システムによってリアルタイムでキャプチャされ、ネットワーク経由で他のコンピュータに送信されます。
結論
ついにこの記事も終わりに来ました。楽しんでいただき、何か新しいことを学んでいただければ幸いです。
LinkedIn では、いつでも提案や議論を歓迎します。ダイレクト メッセージで私に連絡してください。
私の執筆を楽しんでいただき、私のモチベーションを維持したい場合は、GitHub から離れて、LinkedIn で関連するスキルについて私を推奨してください。
次の回まで、安全を確保し、学び続けてください。
無料でコーディングを学びましょう。 freeCodeCamp のオープンソース カリキュラムは、40,000 人以上の人々が開発者としての職に就くのに役立ちました。始めましょう
-
AppleMusicプレイリストをSpotifyに移動する方法
今日の周りには、Apple Music、Deezer、Google Play Music、Spotifyなどの優れた音楽ストリーミングサービスがたくさんありますが、それらの間でプレイリストを移動するのはそれほど簡単ではありません。 Apple MusicのプレイリストをSpotifyに表示したい場合、またはその逆の場合は、次のようにします。 SongShiftを使用したプレイリストの移動 プレイリストをAppleMusicからSpotifyに直接移動する方法はないため、このタスクを実行するには、サードパーティのアプリを使用する必要があります。プレイリストをインポートおよびエクスポートするオン
-
Macでログイン画面をカスタマイズする方法
Macのメニューバー、Dock、その他の要素をカスタマイズした可能性があります。しかし、macOSではログイン画面をニーズに合わせて変更できることをご存知ですか? セキュリティを強化するために、ログイン時にユーザー名とパスワードの両方を要求したい場合があります。または、パスワードを頻繁に忘れて、ヒントを表示したい場合もあります。あなたが一日を始めるのが好きなお気に入りの引用がありますか?ログイン画面に追加することもできます。 ここでは、Macでログイン画面を簡単に変更する方法について説明します。 Macのログイン画面を変更する ログイン画面の設定のほとんどは、システム環境設定にあります。