게임 해킹에 대해서는 잘 모르지만 주로 사용되는 도구로 치트엔진(CheatEngine)이 널리 알려져 있다
아래 링크는 치트 엔진을 다운로드하는 경로이다
Cheat Engine
Cheat Engine Trouble installing/running Cheat Engine? Check out the known github issue here on how to solve it, or join the cheat engine patreon Read before download: You must be 18 years or older, or deemed an adult, to install Cheat Engine. Cheat engine
www.cheatengine.org
치트엔진을 이용한 게임 해킹도 리버싱의 영역이기 때문에 리버싱의 기초를 익히기 위해 피카추배구를 이용해서 간단하게 치트엔진의 사용법부터 알아보자
치트엔진을 켰을때 가장 메인의 화면이다 좌측 상단의 버튼을 클릭하면 프로세스를 어태치가 가능하다
가장 처음에 해볼 거는 스코어 변조이다
1p의 스코어를 3점으로 했을 때 메모리 스캔을 한번 해보자
메모리 스캔을 해본 결과 "3"이라는 값을 가진 메모리 주소(02453CFC)가 존재하는데 02453CFC의 주소가 1p의 스코어라는 것이 추측이 된다
그렇다면 해당 value 값을 변조해보자
02453CFC 주소 내 "3"이라는 Value 값을 12로 변조를 한다면 1p의 스코어가 변조가 될 것이다
해당 value를 변조해 보니 1p의 스코어가 바뀌는 것을 볼 수 있다
우리가 원하는 것은 해당 스코어를 변조를 해서 무조건 1p가 승리하도록 하는 것도 있겠지만
어디로 떨어지든지 1p의 스코어가 올라가도록 해보는 것도 좋을듯하다
그렇다면 치트엔진의 기능을 이용해 보자
우리가 가장 먼저 해야 할 것은 스코어의 메모리 주소가 어디서 반영되는지 파악을 해야 한다
아래 value를 변경해 준 주소에 마우스 우측 키를 눌러 "Find out what writes to this address" 키를 눌러보자
(단축키 F6)
해당 기능을 이용해서 살펴본 결과 1p가 스코어를 낼 때마다 특정 메모리 주소에서 값을 increase 하고 있는 것을 볼 수 있다
00403C4A - FF 44 86 3C - inc [esi+eax*4+3C]
그렇다면 "Show disassembler" 버튼을 눌러 어셈블리어로 피카추배구 파일을 봐보자
"Show disassembler"는 어태치 한 프로세스에 대해 어셈블리어로 볼 수 있을 뿐만 아니라 변조 또한 가능하다 (이전에 value 값 변조한 것처럼)
해당 조건문을 보게 되면
inc [esi+eax*4+3C]
1p 스코어가 오를 때에 관련된 증가값인데 레지스터를 상세하게 들여다보자
esi의 값은 02453CC0, eax의 값은 00000000으로 보이는데 inc 수식을 적용해 보면
02453CC0 + (00000000 * 4) + 3C 수식이 만들어진다
계산을 해보면 02453CC0 + 0 + 3C = 02453CFC가 나오게 되는데
1p의 내용만 봐서는 어떻게 해야 무조건 1p가 오를 수 있게 될까 분석해 보기가 쉽지가 않다
그렇다면 2p가 점수가 올랐을 때를 상세히 살펴보자
일단 2p의 점수를 7점까지 올려준 상태에서 치트엔진으로 스캔을 해보겠다
2p 스코어의 메모리 주소는 02453D00으로 보이고 해당 주소값의 레지스터에 대해 상세히 들여다보게 되면
1p와는 다르게 eax가 00000001로 표기되는 것을 볼 수 있다
그 외에 increase 되는 수식은 동일한 것으로 보인다
여기서 우리가 해볼 수 있는 것은 2p 스코어가 올라가는 조건과 1p 스코어가 올라가는 조건의 차이를 봐야 한다
// 1p eax=00000000
inc [esi+eax*4+3C] // 1p
// 2p eax=00000001
inc [esi+eax*4+3C] // 2p
1p 스코어와 2p 스코어의 차이점은 eax값이 다른 것을 볼 수 있다
그렇다면 2p가 점수를 획득할 때 2p 스코어가 아닌 1p 스코어가 오르도록 해주려면 어떻게 해야 할까
eax의 값을 동일하게 맞춰주면 된다 (esi의 값은 동일하기 때문 = 02453CC0)
2p의 inc 수식 내 "eax*'4"를 지워보자
해당 수식을 더블클릭하면 수정이 가능하다
위 영상을 보게 되면 2p가 이겼을 때도 1p의 스코어가 오르는 것을 볼 수 있다
그렇다면 해당 어셈블리를 변조하게 되면 1p의 스코어를 내리게도 가능하지 않을까?
해당 수식에서 increase를 decrease로 변경해 보자
위 사진은 정상적으로 decrease로 변경된 걸 보여주는 사진이다
아래 영상을 보게 되면 2p가 이겼을 때 2p의 스코어가 오르거나 1p의 스코어가 오르는 게 아닌 1p의 스코어가 깎이게 되는 영상이다
만약 1p의 스코어가 깎이지 않고 2p의 스코어가 깎이게 하고 싶다면 1p의 메모리 주소(02453CFC) 값의 eax 값에 영향을 주면 된다
inc [esi+40] // 1p의 스코어를 2p주소로 맞춤
이렇게 치트엔진을 어떻게 사용하면 되는지 기본적인 사용법에 대해 알아보았다