Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » VirtualAllocEx-Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.04.2005, 11:41 Uhr
~MarkusNeuburger
Gast


Hallo,

Ich habe ein Problem mit VirtualAllocEx. Ich starte zuerst mit CreateProcess einen Prozess (zum Testen habe ich einfach mal Word.exe genommen) und möchte mir mit VirtualAllocEx in dem neuen Prozess dann Speicher sichern. Bei CreateProcess bekomme ich noch ein gültiges Handle zurück, aber bei VirtualAllocEx erhalte ich dann über GetLastError() die Fehlermeldung Access Denied. Hier ist der Code-Schnipsel:


C++:
       DWORD* BytesWritten;
        int ThreadID;
        AnsiString ProcessName = Standartbrowser();
        STARTUPINFO stInfo;
        ZeroMemory( &stInfo, sizeof(STARTUPINFO));
        stInfo.cb = sizeof(STARTUPINFO);
        stInfo.wShowWindow = SW_SHOWDEFAULT;
        stInfo.dwFlags = STARTF_USESHOWWINDOW;
        PROCESS_INFORMATION prInfo;
        ZeroMemory( &prInfo, sizeof(PROCESS_INFORMATION) );
        bool ok = CreateProcess( NULL, "C:\\Microsoft Office\\Office11\\Winword.exe",
                           NULL, NULL, true,
                           PROCESS_VM_OPERATION, NULL, "C:\\" , &stInfo, &prInfo );
        ResumeThread(prInfo.hThread);
        WaitForSingleObject( prInfo.hProcess , INFINITE);
        HANDLE hDLLProcess;

        hDLLProcess = VirtualAllocEx ( prInfo.hProcess, NULL, sizeof(dllName), MEM_COMMIT , PAGE_EXECUTE_READWRITE ); // Hier tritt der Fehler Access Denied auf, dllName ist ein AnsiString, der der Funktion übergeben wird.



Kann mir jemand sagen wo der fehler liegt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.04.2005, 13:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


probier mal mit PROCESS_ALL_ACCESS stat PROCESS_VM_OPERATION ob er nicht dann VirtualAllocEx erlaubt. evtl musst du ja erst noch mit VirtualProtectEx die Region freigeben

evtl solltest du auch prüfen ob er dir die Rechte PROCESS_VM_OPERATION überhaupt gibt, ansonsten musste über EnableTokenPrivilege/SetSecurityInfo erst die nötigen Rechte verschaffen, evtl mag Word nicht das jemand in seinem Speicher "rumpfuscht" (oder haste evtl nen Virenscanner laufen? die blocken sowas manchmal auch)
--
class God : public ChuckNorris { };

Dieser Post wurde am 03.04.2005 um 13:45 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.04.2005, 15:49 Uhr
Spacelord
Hoffnungsloser Fall


PROCESS_VM_OPERATION ist schon in Ordnung allerdings bei OpenProcess .

Probier mal dir das Handle für VirtualAllocEx mit OpenProcess zu holen.
Und da das ganze anscheinend darauf hinaus läuft ne Dll zu injizieren setz gleich noch das Flag PROCESS_VM_WRITE.
Wenn du dann immer noch nen Handle bekommst schauen wir mal weiter ansonsten musst du,wie von Flo geschrieben, dir erstmal die Rechte besorgen.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.04.2005, 19:47 Uhr
Spacelord
Hoffnungsloser Fall


Was mir gerade noch auffällt:
Wenn du unter AnsiString ein char Array verstehst kannst du in VirtualAllocEx
nicht sizeof(dllName) benuzten.
strlen wäre hier das Mittel zum Zweck.
Der Rückgabewert von CreateProcess ist BOOL(also int) und nicht bool.
Und dein DWORD Pointer zeigt auf kein DWORD sondern irgendwo hin!Den kannst du später definitiv nicht an WriteProcessMemory übergeben .

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.04.2005, 20:03 Uhr
Spacelord
Hoffnungsloser Fall


Ach ja,
und WaitForSingleObject wartet bis das Handle des Prozesses signalisiert wird.
Das ist genau dann der Fall wenn der Prozess beendet wird.
Danach in dem virtuellem Adressraum der Anwendung noch Speicher zu reservieren dürfte schwer fallen...
Und was soll dass mit dem ResumeThread wenn du denn Process doch nicht Suspended erzeugst?

Naja,alles in allem hab ich so meine Zweifel ob du für Hack´s wie Dll Injection schon ausreichend fit bist....(nicht bös gemeint)

MfG
Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.04.2005, 08:47 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


für DLL Injections gibts außerdem fertige libs, da muss man nur noch InjectLib(processhandle,dll,funktion) aufrufen und der startet dir die funktion in der dll im programm
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.04.2005, 18:30 Uhr
~MarkusNeuburger
Gast


@Spacelord & FloSoft

Danke erstmal für die Hilfe! Ich hab das ganze jetzt hingekriegt. ResumeThread hatte ich nur noch drin stehen, weil ich vorher zum testen mal das Flag Create_Suspended gesetzt hatte. Die fertigen Libs kenn ich schon, aber ich hatte dann doch den Ergeiz es selber zu machen

LG Markus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: