반동 부분을 찾아봅시다
지난 글에서는 총알 개수쪽의 메모리 주변을 이용하여 총속을 찾았습니다.
비슷한 방법으로 반동 부분도 한 번 찾아봅시다.
총 쏘는 게임에서 반동 부분이 어떤 식으로 거쳐가는지를 생각해보면
어떤식으로 접근할지 감이 올 거 같습니다.
마우스 좌클릭을 누른다 -> 총알이 감소한다 -> 총알이 날아가면서 플레이어는 반동을 겪는다
대충 이런식으로 구조가 되어있을거라 생각하면
총알이 감소하는 구간은 저희가 이미 찾았었죠? 그 뒷 부분 명령어들을
좀 봐야할 거 같네요.
총알을 감소 시키는 명령어 쪽입니다.
이 밑 명령어들 중 총을 쐈을때의 이벤트라 볼 수 있는 반동, 탄 튀는것 등등의 효과를
출력하는 함수가 존재한다고 생각할 수 있습니다.
살짝 내려다보면 이런식으로 2가지 조건이 있고 호출하는 함수가 2개가 존재하네요.
그렇다면 이 두 함수들 중 반동 관련이 있을거라고 생각해볼 수 있겠네요.
디버깅을 걸어서 봤을 때 2개가 일치하여 점프를 하지 않는걸 확인할 수 있습니다.
일단 비교하는 대상 2개가 무엇인지는 정확하게 모르겠지만 총기 관련임은 확실하죠.
그러면 이 jne 부분을 한 번 jmp 시켜서 함수 2개를 실행시키지 않도록 해보겠습니다.
총속을 적용해놔도 화면 올라가는 현상이 없어졌습니다.
예상한대로 반동 관련 부분이 맞았네요.
SCMarine-Win64-Shipping.exe+19FB501 - 48 8B 06 - mov rax,[rsi]
SCMarine-Win64-Shipping.exe+19FB504 - 48 8B CE - mov rcx,rsi
SCMarine-Win64-Shipping.exe+19FB507 - 48 8B 15 1A728504 - mov rdx,[SCMarine-Win64-Shipping.exe+6252728] { (30024) }
SCMarine-Win64-Shipping.exe+19FB50E - 48 89 5C 24 30 - mov [rsp+30],rbx
SCMarine-Win64-Shipping.exe+19FB513 - 48 8B 98 60020000 - mov rbx,[rax+00000260]
SCMarine-Win64-Shipping.exe+19FB51A - E8 01352D00 - call SCMarine-Win64-Shipping.exe+1CCEA20
조금 더 정확히 보자면 위의 call SCMarine-Win64-Shipping.exe+1CCEA20 이 부분이
반동 부분과 연동이 되 있는 구간이긴 합니다. Step 형식으로 디버깅 걸어가다보면
SCMarine-Win64-Shipping.exe+1BF51B4 - 48 8D 0C 49 - lea rcx,[rcx+rcx*2]
SCMarine-Win64-Shipping.exe+1BF51B8 - 48 8D 04 CA - lea rax,[rdx+rcx*8]
SCMarine-Win64-Shipping.exe+1BF51BC - 48 85 C0 - test rax,rax
이 구간이 있는데 여기에서 rdx+rcx*8 에 담긴게 그 총의 기본 설정 값인듯 합니다.
빨간색으로 드래그 해놓은 곳을 바꿔치기해도 반동이 제거 되는것을 볼 수 있었습니다.
이 게임을 해보면 스팀팩이라는게 있는데 이를 먹으면 일정 시간동안 총속과 나의 스피드가
증가하는 걸 확인할 수 있습니다.
다음 시간엔 이를 이용하여 스피드 부분을 한 번 찾아보도록 하겠습니다.
'Reversing & Cheat Engine' 카테고리의 다른 글
21. 간단한 게임 치트 도전 - 월핵(d3d11) (1) | 2024.03.07 |
---|---|
20. 간단한 게임 치트 도전 - 스피드핵 (0) | 2024.03.05 |
18. 간단한 게임 치트 도전 - 총속 (0) | 2024.03.03 |
17. 간단한 게임 치트 도전 - 데미지 (0) | 2024.03.02 |
16. 간단한 게임 치트 도전 - 무적 (0) | 2024.03.01 |