닷지 게임이 총알을 맞아도 안 죽게 해보자.
총알 피하기 게임이고 죽으면 기록을 서버에 등록하겠냐는 메시지창이 뜬다.
그러므로 메시지박스 창부터 찾아가다보면 죽는 부분을 찾아 패치하도록 한다.
올리디버거로 열어서 모든 메시지박스 함수마다 브레이크포인트를 걸어서 게임을 실행해보면 죽었을 때 호출되는 부분을 찾을 수 있다.
이 메시지박스 함수는 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 |