Ich habe in den letzten Tagen versucht, einen DLL-Injektor zu erstellen.
Die einfachste Methode, die ich für DLL-Injektion gefunden wird CreateRemoteThread
Wie injiziere ich eine DLL in einen anderen Prozess?
Dies ist, was ich bisher geschrieben habe, ist dieser Code nicht funktioniert und warum nicht herausfinden kann.
Ich bin ziemlich sicher, dass mein Problem in den Variablentypen ist, die ich verwende, um die WinAPI-Funktionen aufzurufen, aber ich kann nicht finden, wo.
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);
}
.
.
.
Das hat funktioniert! vielen Dank! Kannst du mir bitte erklären, warum hast du 'dllPath.size() + sizeof (char)' anstatt nur 'dllPath.size()' benutzt (ist das wegen des Null-Terminators?) – HackinGuy
@HackinGuy Genau, [string: : size()] (http://en.cppreference.com/w/cpp/string/basic_string/size) gibt die Anzahl der Zeichen zurück, mit Ausnahme des abschließenden NULL. Wenn wir darüber nachdenken, sollte die String-Größe ** in Bytes ** wie folgt berechnet werden: '(string.size() * sizeof (TCHAR)) + sizeof (TCHAR)', das funktioniert also, wenn Sie std verwenden :: string mit char und std :: wstring mit wchar_t und _UNICODE ist definiert. – Neitsa
@Neitsa können Sie 'sizeof (TCHAR)' nicht verwenden, es sei denn, Sie verwenden auch 'std :: basic_string' um zu passen. 'std :: string' verwendet' char', 'std :: wstring' verwendet' wchar_t'. Verwenden Sie entsprechende Ansi/Unicode-APIs entsprechend ('LoadLibraryA' /' LoadLibraryW'). In diesem Fall wird 'std :: string' verwendet, verwenden Sie also' (string.size() + 1) * sizeof (char) '. –