본문 바로가기
Reversing

닷지 게임 패치

by wlgpdnjs 2018. 1. 21.

닷지 게임이 총알을 맞아도 안 죽게 해보자.



총알 피하기 게임이고 죽으면 기록을 서버에 등록하겠냐는 메시지창이 뜬다.

그러므로 메시지박스 창부터 찾아가다보면 죽는 부분을 찾아 패치하도록 한다.



올리디버거로 열어서 모든 메시지박스 함수마다 브레이크포인트를 걸어서 게임을 실행해보면 죽었을 때 호출되는 부분을 찾을 수 있다.

이 메시지박스 함수는 00401D55에서 호출되는데 이 부분을 찾아가 보면 case문에서 비교후 wm_user가 400일 때 실행된다.


wm_user가 있는걸 보고 postmessage나 sendmessage를 찾아봤더니 ebp의 값이 2인지 확인한 후 2일 때 실행되는 부분에서 wm_user가 400인 곳으로 넘어간다. 이 부분이 바로 총알에 맞았을 때 실행되는 부분.


ebp에 값이 들어가는 부분을 찾아보니 위쪽에서 어떤 메모리에 들어있는 부분을 ebp에 복사한 후 비교를 한다. ebp값을 살펴보니 죽지 않았을 때는 1, 죽었을 때는 2가 된다.



40D868에 있는 값을 ebp에 덮어씌운 후 비교하는데 저 메모리에 값이 바뀌는 부분을 찾기 위해 올리디버거로 memory write브레이크를 걸고 실행해봤다.




004031D4에서 총에 맞는 순간 값을 2로 바꾸는데 저 부분을 1로 바꿨더니 게임이 이상하게 실행되서 그냥 nop로 바꿔주면 총알에 맞아도 게임을 계속 플레이할 수 있다.

'Reversing' 카테고리의 다른 글

Dll Injection 03  (0) 2020.05.20
Dll Injection 02  (0) 2020.05.18
Dll Injection 01  (0) 2020.05.18
[python] base64 모듈을 이용한 custom base64  (0) 2018.11.23
피카츄배구  (0) 2018.01.21