반응형

Step 8: Multilevel pointers: (PW=525927)

This step will explain how to use multi-level pointers.

In step 6 you had a simple level-1 pointer, with the first address found already being the real base address.

This step however is a level-4 pointer. It has a pointer to a pointer to a pointer to a pointer to a pointer to the health.


You basicly do the same as in step 6. Find out what accesses the value, look at the instruction and what probably is the base pointer value, and what is the offset, and already fill that in or write it down. But in this case the address you'll find will also be a pointer. You just have to find out the pointer to that pointer exactly the same way as you did with the value. Find out what accesses that address you found, look at the assembler instruction, note the probable instruction and offset, and use that.

and continue till you can't get any further (usually when the base address is a static address, shown up as green)


Click Change Value to let the tutorial access the health.

If you think you've found the pointer path click Change Register. The pointers and value will then change and you'll have 3 seconds to freeze the address to 5000


Extra: This problem can also be solved using a auto assembler script, or using the pointer scanner

Extra2: In some situations it is recommended to change ce's codefinder settings to Access violations when 

Encountering instructions like mov eax,[eax] since debugregisters show it AFTER it was changed, making it hard to find out the the value of the pointer






Extra3: If you're still reading. You might notice that when looking at the assembler instructions that the pointer is being read and filled out in the same codeblock (same routine, if you know assembler, look up till the start of the routine). This doesn't always happen, but can be really useful in finding a pointer when debugging is troublesome



파파고번역

#############################################################################

단계: 다단계 포인터: (PW=525927)
이 단계에서는 다중 레벨 포인터를 사용하는 방법을 설명할 것이다.
6단계에서는 간단한 레벨 1 포인터를 사용했으며, 첫 번째 주소는 이미 실제 기본 주소였습니다.
그러나 이 단계는 레벨 4의 포인터다. 포인터에 포인터를 연결하여 포인터를 상태 포인터에 연결한다.

당신은 기본적으로 6단계에서와 같은 일을 한다. 어떤 것이 값에 접근하는지 알아보고, 지시사항과 아마도 기본 포인터 값, 오프셋이 무엇인지 살펴본 후, 이미 값을 입력하거나 기록하십시오. 그러나 이 경우 찾을 주소도 포인터가 될 것이다. 그 포인터에 대한 포인터를 그 값과 정확히 같은 방법으로 찾아내야 한다. 어떤 액세스 권한을 찾았는지 알아보고, 조립자 지침을 살펴보고, 가능한 지침과 오프셋을 기록한 후 사용하십시오.
그리고 더 이상 얻을 수 없을 때까지 계속하십시오(일반적으로 기본 주소가 정적 주소일 때, 녹색으로 표시됨).

튜토리얼이 상태에 액세스할 수 있도록 하려면 Change Value를 클릭하십시오.
포인터 경로를 찾았다고 생각되면 [등록 변경]을 클릭하십시오. 그러면 포인터와 값이 바뀌고 주소를 5000으로 고정하는 데 3초가 주어진다.

추가: 이 문제는 자동 조립기 스크립트 또는 포인터 스캐너를 사용하여 해결할 수도 있음
Extra2: 경우에 따라 ce의 코더파인더 설정을 액세스 위반으로 변경하는 것이 권장되는 상황
디버그 레지스터가 변경된 후부터 Movie eax와 같은 명령어를 입력하면 포인터의 값을 알 수 없게 된다





엑스트라3: 아직도 읽고 있다면. 포인터가 동일한 코드 블록으로 읽혀져 작성되고 있다는 조립자 지침을 볼 때(일련자를 알고 있다면, 루틴이 시작될 때까지 올려다보라) 알아차릴 수 있다. 이러한 현상이 항상 발생하는 것은 아니지만 디버깅이 귀찮을 때 포인터를 찾는 데 정말로 유용할 수 있다.



#########################################################################################


다중포인터의 문제이다.

4번의 포인터 연산이 이루어진다고 되어있다. 이번엔 각 포인터 연산에 오프셋이 주어질것으로 보인다.

먼저 첫값을 통해 주소를 찾고 그 주소로 접근하는 부분을 찾아보자

Find out what access this address 옵션으로 들어가서 change value를 눌려보면

mov [rsi+18], eax

mov ecx,[rsi+18]

이라고 나온다.

이전문제에서는 rsi로 접근하였으나 이번에는 rsi에 18을 더한 주소로 이동하고있다.

rsi+18이 우리가 접근한 주소이다.

우리는 rsi를 바꾸어주는 곳을 다시 추적해야한다.

rsi로 접근하는 주소 즉 위에서 얻은 주소에서 18을 뺀 주소를 찾아야한다.

이번엔 rsi에서 18을 뺀 주소로 접근하는 주소를 찾아보자

mov rsi,[rsi]

이번엔 오프셋이 없다.

접근하는 주소에 값을 바로담고있다.

얻은 주소를 통해 또다시 반복해서 찾아보자

mov rsi,[rsi+18]

다시 18의 오프셋값을 가지고 있다.

오프셋은 잘 기록해놓자

다시 찾은 주소값에서 18을 뺀 주소로 접근하는 주소를 찾아보자

mov rsi,[rsi+10]

4번째이니 아 다음엔 특정주소로 접근하는 부분이 나올것으로 예상된다.

찾은 주소에서 10을 빼서 다시 검색해보자

이번에 나온 주소는 초록색으로 표기되고있다.

아마 특정주소로 바로 접근하는경우 주소가 정적인 경우에는 그렇게 표시되는거같다.

mov rsi,[100306B00]

100306B00이라는 주소에 있는값을 통해 포인터를 따라 이동하여 값이 바뀌는것을 확인할수있다.

정리해보면 [[[[[100306B00]+10]+18]]+18]이 value라는것을 알수있다.

복잡해 보일수있지만 100306B00이라는 주소에 든 값에 10을 더한 주소에 든 값에 18을 더한 주소에 든 값의 주소에 든 값에 18을 더한 주소의 값에 든 값이 value라는것이다.

실제로 이렇게 복잡하게 다중포인터 쓰지는 않을것이다.

최종적으로 change pointer를 눌리게되면 100306B00이라는 주소에 들어간 값이 바뀔것이다.

이제 포인터를 추적하게 만들어보자

add Address Manually를 통해 들어가서 pointer를 체크해준뒤 100306B00라는 주소를 넣어주고

오프셋값을 차례대로 추가해보자 역순으로 10을 추가하고 18,0,18을 차례대로 추가한뒤 ok를 눌리면

value값이 표시된 값을 따라 바뀌는걸 볼수있다.

이제 change pointer를 눌러보면 처음 추가했던 주소의 value값은 엉뚱한값으로 변경되지만

포인터를 추적하게 만들었던 값은 value값을 잘 추적하는것을 알수있다.

value값을 5000으로 변경한뒤 active를 체크하여 100306B00이라는 주소의 값을 동결시키면 

next버튼이 활성화되는것을 볼수있다.





반응형

'보안 > 치트엔진' 카테고리의 다른 글

Cheat Engine 튜토리얼 게임 step1,2간단후기  (0) 2020.02.16
Cheat Engine 튜토리얼 9번  (0) 2020.02.16
Cheat Engine 튜토리얼 7번  (0) 2020.02.02
Cheat Engine 튜토리얼 6번  (0) 2020.02.02
Cheat Engine 튜토리얼 5번  (0) 2020.02.02
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기