안경잡이개발자

728x90
반응형

치트 엔진(Cheat Engine) 튜토리얼(Tutorial) 9단계

나동빈


  이번 시간은 치트 엔진 튜토리얼 9단계 문제를 풀어보는 시간을 가집니다. 튜토리얼 문제 중 마지막 문제이며 지금까지 공부한 내용들을 혼합해서 문제를 풀어야 합니다. 사실 난이도는 그다지 높지 않습니다.


  문제 요약: Player 1과 Player 2가 우리 팀이고, Player 3와 Player 4가 적 팀입니다. 게임을 시작하면 각 플레이어의 체력이 감소하는데, 치트 엔진을 이용하여 우리 팀이 이기도록 처리하면 됩니다.



  바로 먼저 Player 1: Dave의 체력 데이터 변수를 찾기 위해 다음과 같이 100을 검색합니다.



  결과적으로 다음과 같이 변수를 찾을 수 있으며 이를 주소 리스트에 추가합니다.




  기본적으로 해당 변수의 값을 감소시키는 기계어를 찾기 위해 다음과 같이 Find out what writes to this address 버튼을 누릅니다.



'


  체력을 감소시키자 다음과 같이 하나의 명령어가 검출되었습니다. 쉽게 말해 체력 정보를 감소시키는 명령어입니다.



  기계어는 mov [ebx + 04], eax입니다. 리버싱(Reversing)을 많이 해보면 이 명령어를 보자마자 배열(Array)를 떠올릴 수 있습니다. 일반적으로 플레이어와 같은 정보들은 C언어에서 구조체 형태로 저장됩니다. 결과적으로 플레이어가 여러 명이니까 플레이어 구조체가 배열 형태로 선언이 되었을 것이라고 예상할 수 있습니다. 여기에서 ebx는 일반적으로 배열의 인덱스를 위해 사용되는 변수라고 볼 수 있습니다.


  따라서 해당 구조체 변수가 선언된 메모리 공간을 확인하기 위해 Browse this memory region을 누릅니다.



  그러면 다음과 같이 하나의 구조체 안에는 체력 데이터 및 플레이어 이름 정보 등의 변수가 차례대로 담겨있는 것을 확인할 수 있습니다.



  따라서 다음과 같이 ebx 레지스터의 값을 확인해 봅시다.



  이 ebx 레지스터는 배열에서 특정한 원소 부분이 시작되는 메모리 주소를 저장한다고 예측할 수 있습니다.


  이제 우리는 각 플레이어의 점수를 서로 다르게 처리하기 위해서 플레이어를 구분하는 로직을 작성해야 합니다. 확인해 보시면 ebx 레지스터에서 조금만 더 가면 이름 데이터가 존재하는 것을 파악할 수 있습니다.




  오프셋(Offset)을 확인해보니 정확히 ebx + 15의 위치에 이름 데이터의 첫 번째 글자가 나오는 것을 확인할 수 있습니다.



  따라서 구조체 변수 내 체력 정보를 변경하는 기계어를 수정하기 위해 어셈블리어를 확인해 줍니다.



  Auto Assemble 탭을 클릭하여 코드 인젝션을 수행 할 수 있도록 합니다.




  코드를 다음과 같이 바꾸어줍니다. CMP와 JE는 함께 자주 쓰이는 어셈블리어입니다.


  CMP: 두 개의 데이터를 비교하여 그 결과를 저장합니다.

  JE: 두 데이터의 값이 일치하는 경우 특정 주소로 이동합니다.


  다시 말해 특정한 구조체 변수의 이름 데이터 값이 'D'로 시작하는 경우는 체력 데이터를 감소시키지 않고 바로 로직이 종료되도록 만드는 것입니다.




  이제 플레이어 Dave는 체력이 감소되지 않습니다. 따라서 다시 게임을 시작해보면 Dave의 팀이 승리하는 것을 알 수 있습니다. 이와 같이 간단히 치트 엔진 튜토리얼의 마지막 문제까지 풀어보았습니다.



728x90
반응형

728x90
반응형

치트 엔진(Cheat Engine) 튜토리얼(Tutorial) 1단계

나동빈


  치트 엔진 소프트웨어를 설치하면 자동으로 딸려오는 튜토리얼을 함께 풀어보도록 합시다. 가장 먼저 1단계입니다. 튜토리얼 프로그램은 정말 튜토리얼을 목적으로 만들어진 프로그램이므로 큰 부담 없이 튜토리얼에서 요구하는 대로 진행하시면 됩니다.



  튜토리얼 프로그램에서는 위와 같은 메시지가 쓰여 있습니다. 요약하자면 '치트 엔진에서 튜토리얼 프로그램을 열어보기(Open)'입니다. 치트 엔진은 특정한 프로그램을 대상으로 하여 분석을 진행할 수 있도록 도와주는데, 튜토리얼 프로그램도 하나의 프로그램이기 때문에 치트 엔진의 분석 대상이 될 수 있습니다.



  따라서 위와 같이 프로세스 리스트 항목을 열어서 Tutorial 프로세스를 선택하여 열어주시면 됩니다.



  그러면 위와 같이 현재 열려 있는 분석 대상이 Tutorial 프로그램이 된 것을 알 수 있습니다.



  이제 Next 버튼을 눌러서 다음 단계로 넘어가시면 됩니다. 보시면 패스워드(Password)라는 것이 있습니다. 치트 엔진의 튜토리얼 문제들은 각 문제마다 패스워드 값을 가지고 있으므로 나중에 다시 튜토리얼을 실행했을 때 최근까지 풀었던 문제로 바로 이동할 수 있도록 패스워드 값을 제공하는 것입니다.


※ 알아두면 좋은 상식 ※


  프로세스(Process)컴퓨터 내에서 현재 실행중인 프로그램

728x90
반응형