Reversing/Cheat Engine

Cheat Engine Tutorial-Step5

IT_Try 2018. 9. 7. 01:52

이번시간에는 Cheat Engine Tutorial-Step5 를 풀어보겠습니다.



번 문제는 주소에 대한 문제입니다. 지금까지 1~4번 문제는 찾는 값의 주소가 일정했지만 

이번문제는 찾는 값의 주소가 매번 바뀌게 됩니다. 이번에는 계속 변경되는  값을 고정하는 방법을 배워보도록 하겠습니다.




 자 우선 Value를 찾아봅시다. Value를 찾고 이름을 Step8 Value라고 칭하겠습니다.

 AddressValue를 집중해서 잘 보십시오.. 그리고 튜토리얼 창을 닫고 다시 엽니다.




다시 닫고 열게 되면 값이 0이 되어있고 주소 값도 바뀌어 있습니다.

다시 value값을 찾으면 주소가 바뀌어 있을 것 입니다.


실행 파일인 exe파일은 기계어로 되어 있고 그것을 사람들이 읽을 수 있도록 해주는 것이 디스어셈블입니다. 디스어셈블은 기계어를 어셈블리어로 바꿔줍니다.


이 문제의 목적은 주소 값 을 고정시켜야 하기 때문에 주소 값을 계속 바꾸는 명령을 찾아 고칠 것입니다.

 밑에 리스트에서 찾은 Step8 Value를 우클릭 한 후 Find out what writes to this address 또는 F6키를 누릅니다

눌러보면 이러한 창이 뜨게 됩니다.



 

디버깅을 해도 되냐고 물어보는 창이니 걱정 말고 Yes를 눌러줍니다.



Yes를 누르고 나면 이러한 창이 뜨게 된다. 처음에는 아무것도 뜨지 않지만 

튜토리얼 창의 Change Value를 누를 때 마다 값이 바뀔 때 그 바뀌는 값을 띄워준다.



Change Value를 누르면 이렇게 뜰거다.

우선 맨 앞의 숫자 2는 변경횟수

 

00424868은 명령어의 위치(주소 값)

89 10은 기계어

mov [eax], edx는 디스어셈블된 디스어셈블러이다.

위의 창에서 Show disassembler을 눌러보면



이러한 식이 창이 뜨게 된다. 주소의 위치와 디스어셈블된 명령어를 보여줍니다.

우선 mov [eax], edx가 무슨 뜻인지에 대해서 먼저 알아보자.

mov 는 옮기다(move) 라는 뜻을 가지고 있다. eaxedx는 변수입니다.

 

mov [eax], edxgive me, choco와 같은 의미를 가지고 있다.

2번은 choco를 나에게 달라는 의미인데.

1번도 같은 의미이다. edx의 값을 eax로 옮겨라 라는 의미냐. [eax]eax가 가르키는 메모리 주소인데 그 주소위치를 바꾸어 달라는 명령어입니다.


정확하게 표현을 하자면 eax가 가지고 있는 메모리 주소를 따라가 그 값을 바꾸라는 의미입니다. edx는 변수이기 때문에 항상 값이 바뀝니다. 그러므로 EAXEDX의 값을 확인해 보자.




위의 리스트의 항목을 클릭 하면 밑에 보는 것과 같이 EAX, EBX, ECX, EDX등의 값들이 나오게 됩니다.

 

EDXB9라는 값을 EAX의 값으로 옮겨준다는 이야기입니다.

그러나 EAX또한 값이 있다. 그러나 EAX[EAX]로 괄호 안에 있어서 본래 EAX의 의미가 달라집니다.


[EAX] 괄호 안에 있기 때문에 즉 EAX의 값을 바꾸라는 말이 됩니다.

정확하게 표현을 하자면 EAX01761F48인데 이 값의 메모리 주소를 쫓아가서 그 값을 바꾸라는 뜻입니다. 단순히 EAX의 값만 바꾸는 것이 아니지요.



아래의 초록색 숫자들이 있는 곳을 클릭후 오른쪽 마우스를 눌러 Goto Address를 클릭후

 EAX의 메모리 주소를 입력해줍니다.



러면 이런식으로 EAX의 주소로 이동하게 됩니다. 이 주소는 우리가 찾은 Step8 Value의 메모리 주소일 것입니다. 

결국 값이 지속적으로 변경 되는 이유는 mov [eax], edx이 코드 때문입니다

문제에서 이 코드를 값이 변경되지 않도록 수정하는 것이 문제이기 때문에 지금부터 수정해

이 창의 Replace를 누르면 명령어의 수정이 가능합니다.



무것도 하지 않는 명령을 뜻하는 ‘nop’(no operation)으로 바꿔주면 본래 명령인 mov [eax], edx는 실행되지 않습니다.


그리고 이 창에서 Add to the codelist 눌러서 코드를 추가합니다.


이런식으로 써주고 OK를 누릅니다


그러면 ‘Change of nop’이 추가된 것을 알 수 있습니다

이제 ‘Change Value’를 눌러도 값이 바뀌지 않는 것이 확인부탁드립니다.

Next가 활성화 되었으니 다음 단계로 넘어가 봅시다.