4

可能な限り単純なインジェクション DLL を作成しました。コード全体は次のとおりです。

#include "stdafx.h"
#include <stdio.h>

BOOL APIENTRY DllMain(HANDLE hModule, 
                      DWORD  ul_reason_for_call, 
                      LPVOID lpReserved)
{
    FILE * File = fopen("D:\\test.txt", "w");
    if(File != NULL)
    {
        fclose(File);
    }
    return TRUE;
}

超シンプルでしょ?まあ、私はこれを機能させることさえできません。このコードは dll にコンパイルされ、[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs] の下のレジストリにこの dll へのパスを配置しました。また、LoadAppInit_DLLs レジストリ値が 1 に設定されていることにも言及する必要があります。これを行うことで、他のアプリケーション (notepad.exe など) を起動したときに "D:\test.txt" ファイルが表示されることを期待していますが、表示されません。理解できません。非常に古く、Visual Studio '97 で記述された別の .dll があります (これを置き換えようとしています)。これは、AppInit_DLLs をそれを指すように設定し、任意のアプリケーションを開始すると正常に動作します。他のアプリケーションが開始されたときにロードされていることがわかります。

ここで何が起こっているのかわかりませんが、これはうまくいくはずですか?これ以上簡単なことはありません。私はVS 2010を使用しています。すべてのアカウントで、非常にプレーンなJane .dllを作成したと思うので、プロジェクトの設定がうまくいかないとは思いませんが、それについては完全にはわかりません。ここで何が欠けていますか?


設定情報

  • OS:Windows7 64ビット
  • OS バージョン: 6.1.7601 サービス パック 1 ビルド 7601
  • IDE: ビジュアル スタジオ 2010
  • IDE バージョン: 10.0.40219.1 SP1Rel
4

3 に答える 3

13

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs] is NOT the registry key used for injection for into 32-bit processes. Its the registry key if your OS is 32-bit.

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs] is the correct registry key to use if your OS is 64-bit.

I was under the assumption that the former was for 32-bit processes and the latter was for 64-bit processes. But really, the OS is going to ignore one of those registry keys depending on whether or not the OS itself is 64-bit or 32-bit.

于 2012-01-27T18:49:37.470 に答える
2

@Ultratrunks: これは完全に正しくありません。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs] は、32 ビット OS と 64 ビット OS の両方に対応しています。

ただし、64 ビット マシンで 32 ビット プロセスを実行する場合は、次のレジストリ キーを変更する必要があります - [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]

うわーは基本的に、64ビットシステムを実行中の32ビットプロセスと互換性があるようにするという概念です。

32 ビット OS と 64 ビット OS の両方でプログラムを実行し、64 ビット マシンで 32 ビット プロセスを実行した後に検証しました。

したがって

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs for 32/64 bit OS

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs (64 ビット OS 上の 32 ビット プロセス用)

于 2016-12-23T05:34:55.870 に答える