我在看如何NtDll
適用於x86進程,我使用IDA PRO調試功能NtCreateFile
。它的代碼如下:執行x86到x64彙編代碼開關
mov eax, 55h ; NtCreateFile
mov edx, offset [email protected] ;
call edx ; Wow64SystemServiceCall() ;
retn 2Ch
而且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
我擡頭命令代碼jmp far ptr byte_7738B8FF
,這是EA CF B5 38 77 33 00
這是一個跳轉到另一段,0x33 jmp 0x33:0x7738b5cf
。所以從我在互聯網上閱讀的內容來看,這是64位系統上進程的x64段基礎,對吧?不幸的是,我無法進一步調試,因爲ida沒有跟上跳躍。但我做到了編譯爲64另一個簡單的C程序,並呼籲CreateFile
,連接64 IDA PRO遠程調試器,擡頭拆卸,並NtCreateFile
一直在尋找像這樣:
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
所以,我有幾個問題,如何做從x86進程跳轉連接ntdll遠跳jmp 0x33:0x7738b5cf
剛剛登陸到x64_NtCreateFile
第一條指令?在這種情況下,從x86切換到x64究竟如何?基本上,我可以製作x86應用程序,並跳轉切換段,然後在那裏執行x64代碼,我可以通過執行類似db (0x00) ; x64 machine code commands
這樣的操作來創建x64代碼,是嗎?
約的方式閱讀機,一個OS自舉可能對你有利這裏。首先是16位 - > 32位轉換,然後是32位 - > 64位轉換。 – enhzflep
'不幸的是我不能進一步調試,因爲ida不遵循跳轉,因爲ida是錯誤的調試器。使用windbg - 它允許你進入跳轉 – RbMm
@RbMm感謝您的建議。我試了一下,它不太舒服,但在拆卸方面更好 – Vlad