Ich suchte, wie NtDll
für x86-Prozesse funktioniert, und ich debuggte die Funktion NtCreateFile
mit IDA PRO. Der Code dafür ist folgende:Implementieren x86 zu x64 Assembly Code-Schalter
mov eax, 55h ; NtCreateFile
mov edx, offset [email protected] ;
call edx ; Wow64SystemServiceCall() ;
retn 2Ch
Und die Wow64SystemServiceCall()
:
mov edx, large fs:30h
mov edx, [edx+464h]
test edx, 2
jz short loc_7738B5C8
int 2Eh ; DOS 2+ internal - EXECUTE COMMAND
; DS:SI -> counted CR-terminated command string
retn
loc_7738B5C8: ; CODE XREF:
jmp far ptr byte_7738B8FF
suchte ich nach jmp far ptr byte_7738B8FF
den Befehlscode und es war EA CF B5 38 77 33 00
, die ein Sprung zu einem anderen Segment ist, 0x33 jmp 0x33:0x7738b5cf
. Also, was ich im Internet gelesen habe, ist dies die x64-Segmentbasis für Prozesse auf 64-Bit-Systemen, oder? Leider kann ich nicht weiter debuggen, weil Ida dem Sprung nicht folgt. Aber ich machte eine andere einfache C-Anwendung für x64 kompiliert und genannt CreateFile
angebracht x64 IDA PRO Remote-Debugger und Demontage nachgeschlagen und NtCreateFile
sah aus wie so:
x64_NtCreateFile proc near
mov r10, rcx
mov eax, 55h
test byte ptr ds:7FFE0308h, 1
jnz short loc_7FFED6695B85
syscall
retn
loc_7FFED6695B85:
int 2Eh ; DOS 2+ internal - EXECUTE COMMAND
; DS:SI -> counted CR-terminated command string
retn
So habe ich ein paar Fragen, wie funktioniert der sprung von x86 process attached ntdll far jump jmp 0x33:0x7738b5cf
landet einfach in x64_NtCreateFile
erste anweisung? Wie erfolgt der Wechsel von x86 zu x64 in diesem Fall genau? Im Grunde kann ich nur x86-Anwendung machen, und Segment mit springen, und führen Sie einfach den x64-Code dort, die ich erstellen kann, indem Sie einfach etwas wie db (0x00) ; x64 machine code commands
tun, ist das richtig?
Lesen-up über die Art und Weise, dass ein OS Sie Bootstrap ist von Vorteil sein kann Hier. Zuerst der 16bit -> 32bit-Übergang und dann später der 32 -> 64-Bit-Switch. – enhzflep
'Leider kann ich nicht weiter debuggen, weil Ida dem Sprung nicht folgt, weil Ida ein schlechter Debugger ist. benutze windbg - es erlaubt dir, in den Sprung einzutreten – RbMm
@RbMm danke für die Beratung. Ich versuchte es und es war weniger bequem, aber besser in Bezug auf die Demontage – Vlad