2016-03-25 3 views
0

私はここ数日間DLLインジェクタを作成しようとしています。私はDLLインジェクションが見つかり
最も簡単な方法は、これは私がこれまでに書かれたものであるCreateRemoteThread別のプロセスにDLLを挿入するには?

を使用している、このコードは動作しませんし、理由を見つけることができません。

私の問題は、私がWinAPI関数を呼び出すために使用している変数の型にあるとは確信していますが、どこに見つけることができません。

bool Injector::Inject(HANDLE hProcess) 
{ 
    //hProcess is a process with writing and reading access 
    HANDLE hThread; 
    void* pLibRemote = 0; 
    string dllPath = "Some dll path"; 
    HMODULE hKernel32 = GetModuleHandle(__TEXT("Kernel32")); 


    pLibRemote = VirtualAllocEx(hProcess, NULL, sizeof(dllPath.c_str()), MEM_COMMIT, PAGE_READWRITE); 

    WriteProcessMemory(hProcess, pLibRemote, dllPath.c_str(), sizeof(dllPath.c_str()), NULL); 

    hThread = CreateRemoteThread(hProcess, NULL, 0,  
        (LPTHREAD_START_ROUTINE) ::GetProcAddress(hKernel32,"LoadLibraryA"), 
        pLibRemote, 0, NULL); 


    . 
    . 
    . 

    CloseHandle(hThread); 

    } 
. 
. 
. 

答えて

2

少なくとも2つの問題:

pLibRemote = VirtualAllocEx(hProcess, NULL, sizeof(dllPath.c_str()), MEM_COMMIT, PAGE_READWRITE); 

1)sizeof(dllPath.c_str()):あなたはので、あなたはおそらく結果として、4または8を得るでしょう、ポインタ(c_str() returns a pointer)にはsizeofを行っています。 dllPath.size() + sizeof(char)std::wstringを使用する場合はcharの代わりにwchar_t)を使用してください。

2)だけではなく、MEM_COMMITMEM_RESERVE | MEM_COMMITを使用する:あなたはが同時に予約メモリをコミット予約したいです。

また、両方のプログラムが同じISA(x86/x86; x64/x64、しかしISAの不一致ではない)を使用していることを確認してください。

+0

これはうまくいった!どうもありがとうございました!あなたはなぜ 'dllPath.size()'の代わりに 'dllPath.size()+ sizeof(char)'を使ったのですか?(NULLターミネータのためです) – HackinGuy

+0

@HackinGuyまさに、[文字列: :size()](http://en.cppreference.com/w/cpp/string/basic_string/size)は、終了NULLを除いた文字数を返します。それを考えると、文字列サイズ**は、 '(string.size()* sizeof(TCHAR))+ sizeof(TCHAR)'として計算されるべきです。これは、std :: wchar_tと_UNICODEを持つcharとstd :: wstringの文字列が定義されています。 – Neitsa

+0

@Neitsa 'std :: basic_string 'も使用しないと 'sizeof(TCHAR)'を使うことはできません。 'std :: string'は' char'を使い、 'std :: wstring'は' wchar_t'を使います。適切なAnsi/Unicode APIを適切に使用します( 'LoadLibraryA' /' LoadLibraryW')。この場合、 'std :: string'が使用されているので、'(string.size()+ 1)* sizeof(char) 'を使用してください。 –

関連する問題