[Reversing.kr] Direct3D FPS

실행해보면 그럭저럭 무난한 FPS 게임을 볼 수 있습니다.


그런데 대체 무엇을 하라는건지 알 수가 없습니다. 쏴도 저 고구마처럼 생긴것들이 없어지는 것도 아니고.. 일단 코드를 봤습니다.



Search for all referenced string으로 Game Clear 부분을 잡긴 했는데 Text가 굉장히 이상합니다. 그래도 나름 140점짜리 문제가 설마 저 텍스트를 그대로 긁어서 제출한다고 맞을리는 없을 것 같고, 인게임 중에 저 부분의 값이 바뀐다고 생각하면 조금 합리적일겁니다. 그러면 저 텍스트 영역을 언제 어떻게 건드리는지 알아야하는데, 그걸 알기 위해 치트 엔진을 사용했습니다. 피카츄배구를 분석하려고 신명나게 하던 짓들이네요.



일단 Cheat Engine으로 Ckfk@@@ 영역을 잡긴 했고 이제 이 부분의 값을 어떤 명령어가 건드리는지 확인하면 될 것 같습니다. 뭔가 느낌적인 느낌으로 저 고구마를 죽일 때 바뀐다거나, 맵의 특정 영역에 들어가면 바뀐다거나, 내가 죽으면 바뀐다거나 총을 쏠 때마다 바뀐다거나 뭐 그런 가능성들이 있을 것 같네요.



찾았습니다! 한 마리를 죽이니까 값이 바뀌네요. 맨 처음엔 이상한 돔도 찍어보고 하늘에 별도 쏴보고 죽어도 보고 온갖 삽질이란 삽질은 다 하다가, 고구마에게 주구장창 총을 쏘니까 죽는걸 확인할 수 있었습니다.  D2342D번지를 확인해보면



뭐 대충 이렇게 생겨있습니다. 뭔가 썩 잘 와닿지 않게 생겼네요. 동적으로 분석을 해야겠습니다. 분석을 정성들여 하고 싶었는데 피곤해서 뇌가 정상이 아니어서 일단 D2341B번지의 JG를 JE로 바꾸어 총에 1대만 스쳐도 몹이 죽도록 바꾸고 다 죽였습니다.(저 부분이 뭔가 체력을 체크하는 부분인 것 같았습니다.)



음 Congraturlation~ Game Clear! Password is Thr3EDPr@@ 이네요. 끝 두 글자빼고는 다 해결이 된 느낌인데 흠.. 뭔가 신박한 해결책을 찾다가 EAX에 다음번에 변경할 문자열의 index가 들어간다는 점에서 착안, 코드 자체를 뜯어고쳤습니다.



EAX에 0x30, 0x31을 차례로 대입해 값을 강제로 바꾸게 한 결과



메모리에 Password가 제대로 들어가있는 것을 볼 수 있습니다. 창도 떴는데 실수로 껐네요. 루틴을 깊게 파악하는 것도 의미가 있겠지만 모로 가도 서울만 가면 된다고 어찌됐든 답을 알아냈으니 만족합니다..ㅎㅎ

'워게임 > Reversing.kr' 카테고리의 다른 글

[Reversing.kr] Ransomware  (0) 2017.12.31
[Reversing.kr] Position  (0) 2017.12.30
[Reversing.kr] ImagePrc  (0) 2017.12.29
[Reversing.kr] Replace  (0) 2017.12.29
[Reversing.kr] Music Player  (0) 2017.12.29
[Reversing.kr] Easy Unpack  (0) 2017.12.29
  Comments