티스토리 뷰







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
링크
«   2024/11   »
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
글 보관함