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
에 대한 명령 코드를 고개는 다른 세그먼트, 0x33을 jmp 0x33:0x7738b5cf
에 점프입니다 EA CF B5 38 77 33 00
이었다. 그래서 인터넷에서 읽은 것에서 이것은 64 비트 시스템의 프로세스를위한 x64 세그먼트 기반입니다. 불행하게도 나는 더 이상 디버그 할 수 없다. ida가 점프를 따라 가지 않기 때문이다. 하지만 난 64 용으로 컴파일 된 또 다른 간단한 C 응용 프로그램을 제작하고, 부착 64 IDA PRO 원격 디버거 CreateFile
을 불러 분해를 보았다, 그리고 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 애플리케이션을 만들고 점프로 세그먼트를 전환 할 수 있으며, 그냥 x32 코드를 실행합니다. db (0x00) ; x64 machine code commands
과 같은 작업을 수행하여 만들 수 있습니다. 바로이게 맞습니까?
읽기 업 이리. 먼저 16 비트 -> 32 비트 변환 후 32 -> 64 비트 전환. – enhzflep
'Ida가 나쁜 디버거이기 때문에'ida가 점프를 따라 가지 않기 때문에'불행히도 더 이상 디버그 할 수 없습니다. windbg를 사용하십시오 - 당신이 점프에 들어가도록 허락합니다. – RbMm
@RbMm Advice에게 감사드립니다. 나는 그것을 시도하고 덜 편안하지만, 분해의 측면에서 더 나은 – Vlad