본문 바로가기
Wargame Write-Up/Reversing.kr

[Reversing.kr] (Reversing) Direct3D FPS 풀이

by snwo 2020. 4. 25.

 

문제파일 다운 후 압축해제하면 FPS.exe 가 나온다.


고구마같은놈들이있다. 잡아보면 뭐가 나올것같다.


참고로 닿으면 죽는다.


다잡았는데, 여기안에 나머지가 있을거같다.


 

Game Clear 문자열을 사용하는것이다. 

다 잡았을때 Game Clear 과 수상한 문자열를 출력해준다.

이것은 FLAG 라는걸 추측해볼수있고, 하드웨어 BP 를 걸어

이 값에 접근하는 함수를 찾아보자.


고구마들을 학살하다보면, 이 함수에서 고구마를 죽였을때

문자열을 참조한다.

 

0xEB3440 함수로 번호를 가져오고, 210을 곱한다.

EB9184 에서 번호에 210을 곱한값을 참조해

문자열의 번호에 해당하는값과 XOR 연산을 한다.

 

EB9184 배열값을 가져와

배열[i*4] ^ 문자열[i] 연산을하면

FLAG 가 복호화될것이다.


EB9184 - 0

EB9184 + 210 - 4

EB9184 + 420 - 8

...

EB 9184 + 6510 - 196

 

4씩 더해지는 배열이다.

배열을 따로 만들지않아도 될것같다.

 

문자열의 길이가 50이기때문에, 번호는 49까지 있는걸 확인하고 복호화해보자.


1
2
3
4
5
flag="""43 6B 66 6B 62 75 6C 69 4C 45 5C 45 5F 5A 46 1C 07 25 25 29 70 17 34 39 01 16 49 4C 20 15 0B 0F F7 EB FA E8 B0 FD EB BC F4 CC DA 9F F5 F0 E8 CE F0 A9"""
 
for i in range(0,len(flag)):
    print(chr(int(flag[i],16)^(i*4)),end="")
 

복호화과정은 간단하지만 찾기가 까다로운 문제였다