kann sich eine DLL selber injecten?
-
Ich habs mal so probiert - ohne Erfolg. Geht es nicht oder ist mein Code falsch?
#include <windows.h> #include <cstdio> typedef HINSTANCE (*fpLoadLibrary)(char*); typedef LPVOID (*fpGetProcAddress)(HINSTANCE, char*); typedef void (*fpFunktion)(void); struct INJECTSTRUCT { fpLoadLibrary LoadLibrary; fpGetProcAddress GetProcAddress; char path[255]; char func[255]; }; DWORD WINAPI threadstart(LPVOID addr) { HINSTANCE hDll; fpFunktion funktion; INJECTSTRUCT * is = (INJECTSTRUCT*)addr; hDll = is->LoadLibrary(is->path); funktion = (fpFunktion)is->GetProcAddress(hDll, is->func); funktion(); return 0; } void threadend() { } extern "C" void __declspec(dllexport) Funktion() { HANDLE hProc; LPVOID start, thread; DWORD funcsize, written; HINSTANCE hDll; INJECTSTRUCT is; DWORD id = 3972; hDll = LoadLibrary("KERNEL32"); is.LoadLibrary = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA"); is.GetProcAddress = (fpGetProcAddress)GetProcAddress(hDll, "GetProcAddress"); strcpy(is.path, "C:\\DLL.dll"); strcpy(is.func, "Funktion2"); hProc = OpenProcess(PROCESS_ALL_ACCESS, false, id); printf("Prozess Handle: %x\n", hProc); start = VirtualAllocEx(hProc, 0, funcsize+sizeof(INJECTSTRUCT), MEM_COMMIT, PAGE_EXECUTE_READWRITE); printf("Memory: %x\n", start); WriteProcessMemory(hProc, start, (LPVOID)&is, sizeof(INJECTSTRUCT), NULL); thread = (LPVOID)((DWORD)start+sizeof(INJECTSTRUCT)); WriteProcessMemory(hProc, thread, (LPVOID)threadstart, funcsize, NULL); CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)thread, start, 0, 0); CloseHandle(hProc); } extern "C" void __declspec(dllexport) Funktion2() { MessageBox(0, "selbst ist die DLL!", "xD", 0); }
-
GetLastError(). It helps.
-
Verwende erstmal unfrickligeren Code. Eine DLL in einen Prozessraum mappen geht sauber mit 7 Zeilen, du brauchst nur das Prozess-Handle und den Pfad zur DLL.
-
der Code hab ich ja aus einem Tutorial, der stimmt sicherlich. Es geht hier nur darum dass eine DLL sich selber in einen anderen Prozess lädt(natürlich muss sie von einer exe gestartet werden) ist das möglich?
-
ja na klar wieso soll das nich gehen, is doch völlig egal ob der die aufrufe zu VirtualWrite etc inner exe oder inner dll sind is genau das gleiche

-
ja aber die Funktion die ich injecte befindet sich in der selben DLL!
-
na und, des is doch völlig latex, dieser frickel code is aber echt ma hässlich, mach das ordentlich schritt für schritt und dann wirds auch gehen. irgendwelchen frickel code aus tutorials von irgendwelchen selbsternannten "experten" zu kopieren is meist keine gute idee und ich hab jetzt och kene lust dei code zu debugg0rn. also entweder mit GetLastError() schauen wo es hakt oder sauberen eigenen code schreibz0rn
have fun
-
GetLastError gibt 87 zurück und das heißt Invalide Parameter aber das hilft mir auch nicht weiter
-
GetLastError() nach welcher Funktion

-
ups hab mich vertan, nach dem 2. WriteProcessMemory bekomme ich 487 Error Code