IT 블로그 !!

Cheat Engine Tutorial-Step9 본문

Reversing/Cheat Engine

Cheat Engine Tutorial-Step9

IT_Try 2018. 9. 24. 00:04

이번시간에는 대망의 Cheat Engine Tutorial 마지막

Step9을 풀어보겠습니다.


튜토리얼을 열게 되면 p1, p2 c.p3, c.p4가 있습니다.

Step9에서는 객체를 간단히 분석해 보겠습니다.


우선 이번 게임은 두 팀으로 나뉘어 진행됩니다.

p1, p2 VS c.p3, c.p4 이렇게요.

 

또 이 4개의 객체들은 동일 클래스에서 생성하였습니다.



예를 들어 P1, C.p3는 둘이 적입니다.

p1c.p3은 공격할 때 A라는 함수를 사용합니다.

A라는 함수는 클래스 내에서 생성된 함수입니다.

 

c.p3가 공격할 때도 A라는 함수를 사용하여 p1을 공격합니다.

즉 같은 함수, 같은 코드를 사용한다는 것이죠.

그렇다면 health를 조작하지 않고 p1c.p3은 이기게 하려면 어떻게 해야 할까요?

 

p1이 공격할 땐 데미지가 들어가고 c.p3가 공격할 땐 데미지가 들어가지 않게 하는 것입니다. 지금 보시면 클래스 안에는 함수가 하나밖에 없습니다.

 

저희는 p1c.p3은 공격할 때만 데미지가 들어가도록 코드인젝션을 수행할겁니다.

 

이것을 하기 위해서 객체를 분석해야 하는 것이지요.

여기서 HealthFloat형이라고 Tip을 주었습니다.

한번 본격적으로 시작해봅시다.



우선 모든 PlayerHealth를 찾아냈습니다.

이제부터는 각 객체들의 구조를 분석해보도록하겠습니다.

 

분석의 첫 번째 단계는 이 객체가 어떻게 쓰이는 알아봐야 합니다.

F6또는 Find out what writes to this address를 누릅니다.



ebx+04만큼에 P1Health가 있는 모양입니다.

 

이제부터 구조분석을 해보겠습니다.



치트엔진 리스트 왼쪽아래에 Memory view를 누르고

위 도구 창에서 Tool -->> Dissect data/structures를 누릅니다.



그럼 이 창이 뜨는데요.

위 도구 창에서 Structures ->> Define new Structure를 누릅니다.



이름을 정해주시고 OK를 누르시다보면



size는 구조체의 몇 바이트를 줄꺼냐고 물어보는 창이 나오는데

그냥 OK를 해줍니다.



Group1P1EBX주소를 넣어줍니다

(EBX주소는 [p1주소 4]를 해주시면 됩니다)


그럼 이렇게 되는데

여기서 Group1에 마우스 커서를 대고 오른쪽 마우스를 누른 후

Rename을 눌러 P1으로 바꿉니다.



그럼 0015번째에 Dave라고 아주 친숙한 이름이 보이실 겁니다.

String에 더블클릭 후 name으로 바꾸고

0004번째는 float형에 83이니까 Health가 될 겁니다.

그 외에는 아직 무엇인지 알 수 없습니다.



File ->> Add new group을 눌러서 새 그룹을 생성한 후

그 그룹의 이름을 P2라고 정하겠습니다.

그리고 P2EBX 주소를 넣어줍니다.



아까처럼 P2의 정보가 들어옵니다.

Eric이라는 이름과 p2Health말고는 여전히 다른 정보는 알 수 없습니다.

이제 P3도 이것처럼 해보겠습니다.



P3의 정보가 들어옵니다.

이름, Health를 확인할 수 있습니다.


0010번째, 0014번째가 달라서 의심되지만 아직 모든 객체 분석을 하지 않은 상태이기 때문에 확신하지 않겠습니다.

이제 마지막인 P4를 해보겠습니다.

 


자 이제 모든 객체들의 정보가 도출되었습니다.

0000번째 줄은 모두 005AA550을 가리키고 있습니다.

아마도 같은 함수를 사용하기 때문에 그렇지 않을까 생각됩니다.

 

0014번째 줄은 4 4 3 4 이기 때문에 무엇인지 모르겠고

0010번째 줄은 1 1 2 2 이기 때문에 Team을 나타낸 것입니다.

그러므로 0010번째 줄의 이름을 Team으로 바꿔 줍니다.



Team의 값이 1이면 플레이어팀 2이면 컴퓨터 팀인 것을 알 수 있습니다.

Team 값들은 객체의 포인터로부터 10만큼 떨어진 곳에 존재함을 알 수 있습니다.

 

자 이제 코드인젝션을 통해서 문제를 해결하겠습니다.



Show disassembler를 눌러주시고



Tools ->> Auto assemble을 눌러주신 후



Template ->> Code Injection을 눌러줍니다.



그럼 이러한 창이 뜨게 되는데요.

이 창의 의미는 현재 저 위치에서 코드인젝션을 실행할거냐 물어보는 창입니다.

그냥 OK를 눌러주시면 됩니다.

 


여기서부터 저희는 코드인젝션을 시작할겁니다.

우선 cmp라는 어셈블리어를 사용할 겁니다.

[cmpCompare라는 뜻입니다. 즉 비교한다는 뜻이지요.]

cmp는 비교하는 어셈블리어입니다.

 


CMP [ebx+10],1 //ebx+10의 주소 값이 1이면

je passattack // passattack으로 점프해라

 

만약 ebx+10의 값이 1이 아니라면 je passattack이 실행되지 않고

mov [ebx+04],eax 가 실행될 것입니다.

이제 Execute를 누르고 창이 뜨면 YES를 눌러줍니다.



그럼 다음과 같이 새 코드들이 추가됩니다.

 

이제 튜토리얼 창으로 가 Attack을 해보면

p1, p2는 체력이 깎이지 않고 p3, p4는 체력이 깎이는 게 확인됩니다.



Restart game and autoplay를 누르면 컴퓨터 플레이어들은

죽고 NEXT버튼이 활성화 됩니다.


NEXT버튼이 활성화 된 후 눌러주신 후 



이창이 뜹니다

드디어 Cheat Engine Tutorial이 끝났습니다!!

튜토리얼을 이용해서 여러가지를 해보라는 말이 적혀있습니다.

지금까지 Cheat Engine Tutorial을 풀어보았구여 앞으로 더 많은 글들을 올리도록 노력하겠습니다!!







'Reversing > Cheat Engine' 카테고리의 다른 글

Cheat Engine Tutorial-Step8  (0) 2018.09.17
Cheat Engine Tutorial-Step7  (0) 2018.09.12
Cheat Engine Tutorial Step6  (0) 2018.09.11
Cheat Engine Tutorial-Step5  (0) 2018.09.07
Cheat Engine Tutorial-Step4  (0) 2018.09.05