Variablen-Wert mit CreateRemoteThread und Zeiger verändern
-
System_Shutdown schrieb:
kann mir jemand diese Ausgabe erklären?
Du hast nicht beachtet, daß ein Remotethread im "Kontext" von "hProc" ausgeführt wird.
Ist es eine gute Idee, den Remotethread bei "(LPTHREAD_START_ROUTINE)ThreadFunc" auszuführen?
Zur Ausgabe:
Der Remotethread ist in die "main()" vom ersten Programm reingebrezelt, hat die Adresse von "i" (lokal -> stack!) ausgegeben und rödelt nun fröhlich zusammen mit dem Mainthread in der while-Schleife herum (darum die i.e. doppelt so schnelle Ausgabe).
-
ahh okay.. stimmt daran habe ich garnicht gedacht, dass der gesamte Remote Thread genau an diese Speicheraddresse geschrieben wird.
sehr anschaulich beschrieben

hm okay das bedeutet also das ich mir speicher im fremden Prozess reservieren muss?
VirtualAllocEx(...) ???

-
omg
da muss ich ja gleich ne ganze DLL-Injection machen um den effekt zu erzielen -.-
-
Richtig. 7 Zeilen Code.
-
7 Zeilen?? oO
-
dann nochmal eine frage zu diesem Code vom HaBo-Wiki über DLL-Injection:
#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() { } int main() { HANDLE hProc; LPVOID start, thread; DWORD funcsize, written; HINSTANCE hDll; INJECTSTRUCT is; DWORD id; hDll = LoadLibrary("KERNEL32"); is.LoadLibrary = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA"); is.GetProcAddress = (fpGetProcAddress)GetProcAddress(hDll, "GetProcAddress"); strcpy(is.path, "C:\\DLL.dll"); strcpy(is.func, "Funktion"); funcsize = (DWORD)threadend-(DWORD)threadstart; printf("ID: "); scanf("%d", &id); 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); return 0; }Warum stürzen alle Programme ab, in die man versucht zu injecten? (DLL ist in C:\ und auch 100% korrekt)
bin mitlerweile echt ratlos -.-
-
Zeig doch mal den Dll Code her.
Ansonsten Rückgabewerte checken, GetLastError aufrufen und Debugger benutzen.
-
Der DLL-Code:
#include <windows.h> extern "C" void __declspec(dllexport) Funktion() { Beep(1000, 1000); } BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) { return TRUE; }Hm kann ich versuchen, aber ich vermute mal der Fehler hat nichts mit den Funtkionen an sich zu tun sondern ist eher wieder i.ein speicher-problem.
-
Vergiss die Frickelkacke

Also, ich geb dir nen Tipp:1. Funktion: VirtualAllocEx
2. Funktion: WriteProcessMemory
3. Funktion: GetProcAddress
4. Funktion: CreateRemoteThread
5. Funktion: WaitForSingleObject
6. Funktion: CloseHandle
7. Funktion: VirtualFreeExProcesshandle vorausgesetzt.
-
kay kay werds versuchen ^^
soll ich den injector-code dann mal posten? (wenn ich's fertig hab)