미친해커

[Cheat Engine] Cheat Engine Tutorial Step 6 본문

Cheat Engine Tutorial

[Cheat Engine] Cheat Engine Tutorial Step 6

미친해커 2021. 7. 22. 19:03
반응형

Step 6 문제의 제복은 Pointers(포인터)이다. 프로그래밍을 좀 해본 사람이라면 무슨 포인터가 무슨 말인지 눈치 챘을 것이다. 모르는 사람을 위해서 간단하게 설명하자면 100이라는 값이 존재하면 이 값을 가지고 있는 주소가 존재할 것이다. 그렇다면 이 주소도 어딘가에 존재 할 수 있는것이 아닌가? 이렇게 값이 존재하는 주소를 가지고 있는 것을 포인터라고 부른다. 클리어 방법은 Change pointer 버튼을 누르고나서 값을 5000으로 바꿔주면 클리어다.

 

위 그림과 같이 주소를 가지고 있는 타입을 포인터라고 부른다. 이번 문제에서는 이 포인터라고 하는 개념을 알아야만 문제를 해결 할 수 있다. 우선 늘 그랬던 Change value를 눌러가며 100이 저장되어 있는 주소를 찾아보자

 

이렇게 값을 찾아서 리스트에 저장해뒀다면 Change pointer 버튼을 누르고 값을 5000으로 바꿔보자

 

분명 값을 5000으로 바꿨지만 Next 버튼이 활성화 되지 않는 모습을 확인 할 수 있다. 또 Change value를 눌러도 리스트에 있는 값은 바뀌지 않는다. 왜 그런것일까?? 

 

위 그림처럼 우리가 찾은 주소는 0x01510350 이다. 그리고 AAAA라고 하는 공간에 그 주소가 저장되어 있다. 프로그램 내부에서는 값을 변경할 때 AAAA에 접근하여 값을 변경한다. 하지만 Change pointer를 누른순가 AAAA에는 새로 공간의 주소가 들어가게 된다. 그러면서 값이 저장되는 위치가 기존 0x01510350에서 다른 공간으로 바뀌게 된다. 그렇기 때문에 우리가 찾은 0x01510350은 더 이상 사용하지 않게되면서 값을 저장하는 공간이 아니게 되어 버린것이다. 그럼 우리가 Change pointer를 클릭하고나서 값을 5000으로 바꾸려면 값의 주소를 저장하는 AAAA라고 하는 주소를 알아야 한다. 이번엔 바뀐 주소를 다시 구해보자

 

새로 구한 주소를 Value에 넣어주는데 그 전에 앞에 Hex에 체크를 하자 Hex는 16진수 값이나 주소를 검색할 때 사용하는 옵션이다. 그리고 Scan을 하면 우리가 검색한 주소를 가지고 있는 주소가 나오게 된다. 0x100306AD0가 진짜 Change pointer를 눌러 주소가 바뀌더라도 바뀐 주소를 가지고 있는 주소이다. 이 주소를 외워두자 그리고 다음과같이 진행한다.

 

Add Address Manually -> Pointer 체크 -> 아까 구한 주소 값을 작성 -> OK -> 리스트에 P->주소 형태로 저장

위 절차대로 완료 했다면 Value는 현재 값과 같지만 Address가 P->주소 형식으로 되어 있을 것이다. 이것에 의미는 현재 추가한 주소가 포인터이니 그 주소를 참조하여 값(공간)에 접근하다는 의미이다. 그럼 우리는 이제 아까 구한 0x100306AD0 주소를 통해 항상 값에 접근 할 수 있게 되었다. Change pointer를 누르고 3초 내로 값을 5000으로 바꿔보자

 

그러면 Next 버튼이 활성화 되는것을 볼 수 있는데 그 외로 P->주소도 바뀐것을 확인 할 수 있다. P가 진짜 값을 가지고 있지만 포인터로서 값을 참조하는것을 알 수 있다.

반응형
Comments