티스토리 뷰
Reversing.kr의 문제 WindowsKernel입니다.
커널 디버깅을 요구하는 문제지만 저는 정적 분석으로 해결했습니다.
커널 분석으로도 풀어봐야겠습니다.
WindowKernel.exe 파일과 WinKer.sys 파일이 있습니다.
WindowKernel.exe 파일을 실행시켜보면,
원래는 입력하는 칸이 뜨는데 윈도우 10과 제 vmware 윈도우 7에서는 에러가 뜨네요.
IDA로 분석하겠습니다.
Check 버튼을 누르면 입력받은 값을 기준으로 WinKer.sys가 로드되며 통신을 합니다.
결과값이 1일 경우에 "Correct!"를 반환합니다.
이제 WinKer.sys 파일을 분석해보겠습니다.
READ_PORT_UCHAR이라는 함수를 통해서 키보드 스캔 코드를 읽어옵니다.
호출 순서는 DriverEntry -> sub_11266 -> sub_111dc -> sub_11156 -> sub_110D0 입니다.
키보드 스캔 코드를 검증하는 로직은 sub_111dc -> sub_11156 -> sub_110D0에 순서대로 있습니다.
이 부분들을 분석해야 합니다.
1 : 0xa5
2 :
3 : 0x92
4 :
5 : 0x95
6 :
7 : 0xb0
v3 = a1 ^ 0x12 이므로, 0x12와 XOR 연산을 해주어야 합니다.
1 :
2 : 0xb2 ^ 0x12 = 0xa0
3 :
4 : 0x85 ^ 0x12 = 0x97
5 :
6 : 0xa3 ^ 0x12 = 0xb1
7 :
8 : 0x86 ^ 0x12 = 0x94
v2 = a1 ^ 5 이고 v3는 위에서 12와 xor 연산을 했었기 때문에 a1 ^ 5 ^ 0x12로 해주어야 합니다.
1 :
2 : 0xb4 ^ 5 ^ 0x12 = 0xa3
3 : 0x8f ^ 5 ^ 0x12 = 0x98
4 :
5 : 0x8f ^ 5 ^ 0x12 = 0x98
6 :
7 : 0xb2 ^ 5 ^ 0x12 = 0xa5
총 결과는 (0xa5, 0x92, 0x95, 0xb0, 0xa0, 0x97, 0xb1, 0x94, 0xa3, 0x98, 0x98, 0xa5)입니다.
각각 128을 빼주거나 127과 AND 연산 후
https://www.supfree.net/search.asp?id=6386 에서 맞춰보면 정답이 나옵니다.
참고 : https://bbs.pediy.com/thread-249013.htm
'Reversing > Reversing.kr' 카테고리의 다른 글
[Reversing.kr] CSHARP 풀이 (0) | 2018.03.22 |
---|---|
[Reversing.kr] HateIntel 풀이 (0) | 2018.01.21 |
[Reversing.kr] Position 풀이 (0) | 2018.01.10 |
[Reversing.kr] AutoHotkey1 풀이 (0) | 2018.01.05 |
[Reversing.kr] Direct3D FPS 풀이 (1) | 2018.01.05 |
- Total
- Today
- Yesterday
- 안드로이드
- reversing.kr
- Level 01
- xcz.kr
- 17th HackingCamp CTF
- CodeEngn
- hackerschool
- 멘토링
- Level 04
- C#
- pwnable
- Advance RCE
- Level 03
- 유니티
- 안드로이드 멘토링
- Reversing
- Unity
- Android
- Level 05
- 풀이
- Write-up
- ftz
- c++
- unity2d
- wargame
- Level 02
- HackingCamp
- Programming
- Level 06
- Basic RCE
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |