일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Windows
- hacking
- C언어 패킷캡쳐
- windows kernel debugging
- pwnable
- 개발 환경 준비
- 포너블
- pcap packet
- 시스템해킹
- 바이트 오더
- Network Byte Order
- pcap packet capture
- vcruntime140.dll
- packet capture
- Msvcrt.dll
- Windows Kernel Debug
- IAT Hooking
- Windows Kernel
- 개발하기
- arudino
- ucrtbase.dll
- 윈도우 커널
- 윈도우 커널 드라이버
- apphelp.dll
- Windows Kernel Driver
- HackCTF
- 네트워크 바이트 오더
- vcruntime.dll
- 해킹
- 윈도우 커널 디버깅
- Today
- Total
미친해커
[WoW] 32Bit 응용 프로그램에서의 Kernel 함수 호출 본문
[WoW] 32Bit 응용 프로그램에서의 Kernel 함수 호출
미친해커 2022. 5. 4. 00:35Windows 64Bit에서 32Bit 응용 프로그램을 실행하고 디버거로 커널 함수의 어셈블리를 확인하면 대부분 다음과 같은 형식을 띄게 된다.
mov eax, 0x00000026 # Windows System Call Number
mov edx, Wow64SystemServiceCall # 64비트 모드 전환 함수
call edx # 모드 전환 함수 호출
ret # 리턴
우리가 알고 있는 커널 함수의 호출은 syscall 어셈블리를 사용해 커널에 호출하게 된다. 하지만 Windows on Windows로 돌아가고 있는 32Bit 응용 프로그램은 syscall이 아닌 Wow64SystemServiceCall 이라는 함수를 호출하고 있다. 해당 함수는 Windows 64Bit 운영체제의 32Bit용 ntdll.dll에 존재하는 함수로써 32Bit 응용 프로그램이 커널 함수를 호출하면 해당 호출을 가로채게 된다.
그 이유는 응용 프로그램은 32비트이지만 커널은 64비트로 동작하기 때문에 32Bit 응용 프로그램이 직접적으로 커널에 요청하지 못하도록 한다. 대신 Wow64SystemServiceCall 함수를 통하여 64비트 모드로 변경 후에 syscall 수행하고 다시 32비트 모드로 변경해 해당 반환값을 전달해준다.
jmp dword ptr ds:[Wow64Transition] # Wow64Transition = wow64cpu.dll + 0x6000
Wow64SystemServiceCall은 x86 ntdll.dll의 Wow64Transition이라는 전역변수의 값을 참조하여 wow64cpu.dll의 어느 공간으로 점프한다. 해당 주소는 wow64cpu.dll + 0x6000 주소로 점프한다. 치트엔진으로 해당 주소를 가보면 다음과 같은 어셈블리어를 볼수 있다.
해당 어셈블리를 확인해보면 처음보는 jmp insturction과 x64 시스템의 레지스터와 어셈블리어를 사용하는 것을 확인할 수 있었다.
이로써 32Bit 응용 프로그램은 64Bit로 모드를 전환하여 무언가를 수행한다는 것을 확인할 수 있었다.
'Windows > Heaven's Gate (Windows on Windows x64)' 카테고리의 다른 글
[WoW] WoW 프로세스의 커널 함수 호출 과정 (0) | 2022.06.14 |
---|---|
[WoW] Windbg를 이용해 WoW 프로세스 디버깅하기 (0) | 2022.06.13 |
[WoW] Far와 Near 어셈블리 명령의 차이점 (0) | 2022.06.01 |
[WoW] 32Bit 모드에서 64Bit 모드로 전환하기 (0) | 2022.05.31 |
[WoW] WoW64(Windows on Windows 64-Bit)란? (0) | 2022.05.03 |