문제파일 다운 후 압축해제하면 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"""
flag=flag.split()
for i in range(0,len(flag)):
print(chr(int(flag[i],16)^(i*4)),end="")
|
복호화과정은 간단하지만 찾기가 까다로운 문제였다