1

メモリ コード インジェクション (Windows システム上) を特定するために、システム上のすべてのプロセスのメモリをハッシュする必要があります。たとえば、calc.exe のメモリが常に x で、現在は y の場合、誰かがcalc.exe コードに挿入されます。

1:この考え方は正しいですか?プロセスメモリのどの部分が常に同じままで、どの部分が変化していますか?

2: dll は別のメモリを持っていますか、それとも exe のメモリにありますか? つまり、dll のメモリのハッシュを生成できますか?

3: c++ でプロセスまたは dll のメモリをダンプするにはどうすればよいですか?

4

3 に答える 3

3

Windows を実行しているときに、プロセスにコードが継続的に挿入されます。

一例として、遅延ロードされた DLL があります。プロセスが起動すると、コア DLL のみが読み込まれます。特定の機能が実行されると、コードはまず新しい DLL (コード) をディスクからロードしてから実行します。

もう 1 つの例は、.NET マネージ アプリケーションです。ほとんどのコードは、コンパイルされていないコードとしてディスク上に置かれています。アプリケーションの新しい部分を実行する必要がある場合、.NET ランタイムはそのコンパイルされていないコードをロードし、コンパイル (別名 JIT) してから実行します。

あなたが解決しようとしている問題は価値がありますが、非常に困難です。OS 自体がこの問題を解決してプロセスを保護しようとします。

ウィンドウがバックグラウンドで行っていることよりも高度なことをしようとしている場合、最初にすべきことは、ウィンドウがプロセスを保護し、プロセスを有効にしながら、プロセスに挿入されているコードを検証するために必要なすべての手順を理解することです。コードを動的にロードする (これは必須です)。

幸運を。

それとも、解決しようとしているより具体的な問題がありますか?

于 2014-06-27T01:35:14.620 に答える
1

1) アイデアは素晴らしいです。しかし、プロセスが実行されている限り、それらはメモリを変更する (または何もしない) ため、機能しません。あなたができることは、メモリのコード部分をハッシュすることです。

2) いいえ、DLL は別のプロセスではなく、コードにリンクされたライブラリです。それらは静的ではなく動的にロードされるだけです(http://msdn.microsoft.com/en-us/library/windows/desktop/ms681914%28v=vs.85%29.aspx

3) 通常、OS は隣接プロセスのメモリへのアクセスを禁止しています。プロセスでそれを許可すると、マルウェアが非常に簡単に拡散し、1 つのプロセスがクラッシュすると他のすべてのプロセスがクラッシュする可能性があるため、システムが非常に不安定になります。したがって、そのような種類のダンプを行うのは非常に難しいでしょう! ただし、プロセスに適切な特権がある場合は、ReadProcessMemory()を確認できます。

于 2014-06-26T23:45:28.197 に答える
0

私は基本的にこれらのスクリプトをc#に似たようなことをしました:

http://www.exploit-monday.com/2012/03/powershell-live-memory-analysis-tools.html

于 2014-07-11T08:56:36.170 に答える