| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: Zeus Technik im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hi, Ich beschäftige mich schon seit längeren mit Hooking und habe mir gerade den Zeus Code geholt. Da ich ...
![]() |
| | #1 (permalink) |
| Registriert seit: 16.05.10 ![]() Likes: 0 | Anzeige Hi, Ich beschäftige mich schon seit längeren mit Hooking und habe mir gerade den Zeus Code geholt. Da ich denke man darf den Src Code nicht posten hoffe ich mal das sich damit schon jemand anders beschäftigt hat, aufjedenfall versteh ich die Injection ansich nicht. Verstanden habe ich schon void *newImage = Core::initNewModule Aber der Abschnitt: Code: LPTHREAD_START_ROUTINE proc = (LPTHREAD_START_ROUTINE)((LPBYTE)newImage + (DWORD_PTR)((LPBYTE)Core::_injectEntryForThreadEntry - (LPBYTE)coreData.modules.current)); HANDLE thread = CWA(kernel32, CreateRemoteThread)(process, NULL, 0, proc, NULL, 0, NULL); newImage ist die Adresse im Fremden Prozess + 0 - GetModuleHandleW(NULL) Aber wieso Funktioniert das und welche Methode ruft dieser dann auf ? Ich schätze mal ich übersehe irgendwas grundsätzliches, hoffe mir kann jemand helfen da mich die Technik dahinter doch recht intressiert |
| | |
| | #2 (permalink) | |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Also: Code: void *Core::initNewModule(HANDLE process, HANDLE processMutex, DWORD proccessFlags)
{
void *image = PeImage::_copyModuleToProcess(process, coreData.modules.current);
if(image == NULL)return NULL; "_copyModuleToProcess" alloziert Speicher und macht einige Schritte des Windows PE Loaders nach - vor allem Sections korrekt im Speicher ausrichten sowie vorhandene Relocationstabelle durchzugehen. Sofert man sich mit dem PE Format auskennt, sollte das nachvollziehen keine großen Schwierigkeiten bereiten (sonst in PECOFF von Microsoft oder zahlreichen PE Referenzen nachschlagen D.h nach diesem Schritt: Code: Core::initNewModule(blub) Damit das Ganze auch funktioniert, müssten eigentlich auch die Imports abgearbeitet werden und die IAT entsprechend gefüllt werden : Code: initLoadModules Code: if(!PeImage::_loadImport(coreData.modules.current, __GetProcAddress(coreData.modules.kernel32, "LoadLibraryA"), __GetProcAddress(coreData.modules.kernel32, "GetProcAddress")))return false; Zu Deiner Rechnung: Zitat:
Ich mag zwar grundsätzlich kein C/C++ und bin da längst nicht so fit, allerdings schaut mir das sehr nach der Ermittlung der Methodenadresse aus und nicht nach einem Aufruf Würde also Ergeben: ImageBase im Fremden Prozess + Adresse von "_injectEntryForThreadEntry" im aktuellen - ImageBase des aktuellen Prozess == Adresse von "injectEntryblub" im fremden Prozess. D.h CreateRemoteThread ruft im Injecteten Code letzendlich "_injectEntryForThreadEntry" auf, die den Inittialisierungskram erledigen sollte.
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Senior Member Registriert seit: 13.07.08 ![]() ![]() ![]() Likes: 85 | Ich bin wirklich deeply impressed, ZeuS ist ja mal sehr sauber geschrieben.
__________________ "It is the human race! The deterioration of the spirit of man. Man undermining himself, causing a self-willed, self-imposed, self-evident self-destruction."+++ BREAKING +++ Troll ertrinkt im Planschbecken +++ |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |