Hey StageTwo Coder,
Ich bin dabei eine 32-bit DLL in einen 32-bit Prozess auf einem 64-bit System zu injecten.
Die DLL enthält einen hook.
So nun zu meinem Problem. Ich kann die DLL zwar erfolgreich injecten (MessageBox erscheint), jedoch wird der hook nicht durchgeführt.
Ich finde das sehr mysteriös, denn wenn ich einen in C++ geschriebenen Injector nehme, dann funktioniert das ganze und der hook greift.
Habe schon etliche C# Injectoren aus dem Internet getestet und keiner geht. Mein eigener auch nicht.
Habt ihr einen Rat?
Kuh
Code:
Code
- public bool Inject()
- {
- UIntPtr bytesout;
- IntPtr bytesout2;
- Int32 LenWrite = dllFilePath.Length;
- ASCIIEncoding enc = new ASCIIEncoding();
- adjustDebugPriv(procID);
- IntPtr hProcess = OpenProcess(ProcessAccess.AllAccess, false, procID);
- if (hProcess == null)
- return false;
- IntPtr AllocMem = (IntPtr)VirtualAllocEx(hProcess, (IntPtr)null, (uint)LenWrite, 0x1000, 0x40);
- if (AllocMem == null)
- return false;
- bool wpm = WriteProcessMemory(hProcess, AllocMem, enc.GetBytes(dllFilePath), (uint)LenWrite, out bytesout);
- if (!wpm)
- return false;
- UIntPtr Injector = (UIntPtr)GetProcAddress(API.GetModuleHandle("kernel32.dll"), "LoadLibraryA");
- if (Injector == null)
- return false;
- IntPtr hThread = (IntPtr)CreateRemoteThread(hProcess, (IntPtr)null, 0, Injector, AllocMem, 0, out bytesout2);
- if (hThread == null)
- return false;
- uint Result = API.WaitForSingleObject(hThread,10 * 10000);
- if (Result == 0x00000080L || Result == 0x00000102L || Result == 0xFFFFFFFF)
- {
- if (hThread != null)
- API.CloseHandle(hThread);
- return false;
- }
- Thread.Sleep(1000);
- API.VirtualFreeEx(hProcess, AllocMem, 0, FreeType.Release);
- if (hThread != null)
- API.CloseHandle(hThread);
- return true;
- }