api befehle über sysenter ausführen
-
Hi,
// STACK ORDER: HANDLE, Base, Buffer, Size, ??? ( &HANDLE ), 0 void __declspec(naked) NtWriteVirtualMemory ( void* hProcc, void* Base, void* Buffer, unsigned int Size, unsigned int * Out ){ __asm{ mov ebp, esp sub ebp, 4 lea eax, hProcc push hProcc push Base push Buffer push Size push eax push 0 add esp, 0x18 mov eax, 0x115 mov edx,esp sysenter } } int Buffer[4000]; int main(int argc, char* argv[]) { int X = 4; // -1 für gegenwärtiger prozess, in den buffer sollen die ersten 4 byte von X geschrieben werden, keine output kontrolle. NtWriteVirtualMemory( (void*)-1, (void*)Buffer, (void*)&X, 4, 0 ); return 0; }
ich versuche gerade einen api befehl über sysenter auszuführen ( warum? weil es mich interessiert ob es klappt ^^ )...
nur das problem dabei ist, ich bin ratlos warum es sich nicht so verhält wie es sollte.es führt fehlerfrei aus, jedoch gibt es keine änderung am Buffer, hier eine kurze aufführung der ausführung der WriteProcessMemory Funktion
7C802268 50 PUSH EAX
7C802269 53 PUSH EBX
7C80226A FF75 10 PUSH DWORD PTR SS:[EBP+10]
7C80226D FF75 0C PUSH DWORD PTR SS:[EBP+C] ; OntheFly.Buffer
7C802270 57 PUSH EDI
7C802271 FF15 0414807C CALL DWORD PTR DS:[<&ntdll.NtWriteVirtualMemory>] ; ntdll.ZwWriteVirtualMemory0012FF44 FFFFFFFF
0012FF48 1337C6F4 OFFSET OntheFly.Buffer
0012FF4C 0012FF88
0012FF50 00000004
0012FF54 0012FF74
0012FF58 00000000
0012FF5C 1337A034 OntheFly.1337A0347C91DFAE n> B8 15010000 MOV EAX,115
7C91DFB3 BA 0003FE7F MOV EDX,7FFE0300
7C91DFB8 FF12 CALL DWORD PTR DS:[EDX]
7C91DFBA C2 1400 RETN 140012FF40 7C802277 RETURN to kernel32.7C802277 from ntdll.ZwWriteVirtualMemory
0012FF44 FFFFFFFF
0012FF48 1337C6F4 OFFSET OntheFly.Buffer
0012FF4C 0012FF88
0012FF50 00000004
0012FF54 0012FF74
0012FF58 00000000
0012FF5C 1337A034 OntheFly.1337A0347C91E510 n> 8BD4 MOV EDX,ESP
7C91E512 0F34 SYSENTER
7C91E514 n> C3 RETN0012FF3C 7C91DFBA RETURN to ntdll.7C91DFBA
0012FF40 7C802277 RETURN to kernel32.7C802277 from ntdll.ZwWriteVirtualMemory
0012FF44 FFFFFFFF
0012FF48 1337C6F4 OFFSET OntheFly.Buffer
0012FF4C 0012FF88
0012FF50 00000004
0012FF54 0012FF74
0012FF58 00000000
0012FF5C 1337A034 OntheFly.1337A034kann es sein das mein buffer nicht geändert wird weil ich die aufrufe der funktionen protectvirtualmemory und flushinstructioncache, die bei writeprocessmemory verwendet werden, weggelassen habe?
-
hab mein problem bereits gefunden...
im debugger meiens compillers wurde der stack von unten nach oben angezeigt, und in ollydbg von oben nach unten... dementsprechend habe ich es programmiert
*facepalm*