2017-10-29 9 views
0

チートエンジンなどのメモリエディタは、他のプロセスのメモリを読み込んで変更することができます。メモリエディタの仕組み(と理由)

どのようにするのですか(コードスニペットが面白いでしょう!)プロセスは通常、別のプロセスのメモリにアクセスする能力を持っていません。私が聞いた唯一のケースは、サブプロセス/メモリエディタは、通常、どのような方法でもターゲットプロセスに関連していません。

なぜ機能しますか?どのようなシナリオでは、この機能を他のプロセスをハックするのに使用する以外にも役立ちます。なぜオペレーティングシステムは無関係なプロセスが互いのメモリを読み込まないようにしませんか?

Windowsでは
+1

オペレーティングシステムは管理者のために機能しますが、その逆はできません。 –

+0

''プロセスは、通常、他のプロセスのメモリにアクセスする能力を持っていません。なぜそうではありませんか?いつでも好きなときにメモリアドレスに直接書き込むことができます。 ''なぜ彼らは働いているの? '' - 他のプロセスの実行時の値と命令を変更することによって。たとえば、実行中のゲームでメモリアドレスに「スコア」が格納されている場合、そのメモリアドレスの値を変更して「スコア」を変更することができます。 – David

+0

私はオペレーティングシステムを習ってからしばらくしていますが、私が正しく覚えているのは、仮想メモリアドレスの背後に隠れているすべての「実際の」メモリアドレスと、仮想メモリアドレスの結果にないものセグメンテーションで? – drulludanni

答えて

1

、通常、別のプロセスのメモリを変更するために使用される関数がWriteProcessMemoryと呼ばれている:あなたは、両方の彼らのパスカルコードとCでそれを見つけることができますWriteProcessMemoryためCheat Engine source codeを検索する場合

https://msdn.microsoft.com/en-us/library/windows/desktop/ms681674(v=vs.85).aspx

カーネルコード。これは基本的にあなたが管理者としてチートエンジンを実行する必要があることを意味するプロセスへのPROCESS_VM_WRITEとPROCESS_VM_OPERATIONアクセスが必要です。

WriteProcessMemoryは、別のプロセスの実行時の動作を変更する場合に使用します。チートエンジンやModOrganizerなどの正当な用途がありますが、もちろん不正なものもたくさんあります。アンチウィルスソフトウェアは、通常、このAPI呼び出しを探すように訓練されているので、あなたのアプリケーションがホワイトリストに登録されていない限り、そのAPI呼び出しが原因となっている可能性があります。

+0

一般的な正当な使用方法はデバッガです。デバッグするプロセスのメモリを変更する必要があります。 – MSalters

1

オペレーティングシステムでは、通常、システムコールを使用してユーザー空間プログラムがターゲットプロセスのメモリを検査できるシステムコールが公開されています。

たとえば、Linuxカーネルはptraceシステムコールをサポートしています。このシステムコールは、よく知られているデバッガgdbと、straceなどの一般的なシステムコールトレースユーティリティによって主に使用されます。

ptraceシステムコールでは、ターゲットプロセスのメモリ内容、コードインジェクション、レジスタ操作などの検査が可能です。あなたがもっと学ぶことに興味があるなら、私はリソースとしてthisを提案します。

Linuxでは、gdbからバイナリを実行するか、プロセスにアタッチすることができます。後者の場合、昇格された特権が必要です。 hereなど、ptraceでできることを制限しようとする他の保護があります。

Windowsでは、OpenProcess、GetProcAddress、VirtualAllocEx、WriteProcessMemory、CreateRemoteThreadの順に次の関数を使用することで、同じ効果を得ることができます。あなたがもっと知ることに興味があるなら、私はリソースとしてthisを提案するでしょう。新しいWindowsバージョンでこれを行うには、特権を昇格する必要があります。