Variablen-Wert mit CreateRemoteThread und Zeiger verändern
-
Debuggen ist eigentlich ganz einfach. Mir wurde damals nur erzählt, dass ich mit F5 den Debugger starte, mit F10 im Code weitergehe und mit F11 in eine Funktion reinspringe. Mehr brauchte ich nicht zu wissen, allerdings war das mit Visual Studio. Guck dir doch sonst ein paar Tutorials dazu von Google an, ich weiß jetzt leider nicht wie die Debugger bei Code::Blocks und so funktionieren. Wäre auf jeden Fall hilfreich um das Problem zu lösen und kommst du eh nicht drumrum.

-
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)