미친해커

[Cheat Engine] Cheat Engine Tutorial Step 7 본문

Cheat Engine Tutorial

[Cheat Engine] Cheat Engine Tutorial Step 7

미친해커 2021. 7. 23. 01:00
반응형

Step 7 문제의 외형은 Step 2와 닮아 있는데 클리어 방법은 전혀 다르다. 기존의 클리어 조건이 특정 값으로 Health를 변경하는 거였다면 Step 7의 클리어 조건은 Hit me를 클릭했을 때 Health가 2씩 증가되도록하면 된다. 우선 Health의 주소부터 찾아보자

 

이렇게 찾았다면 Step 5에서 배운 Find out what writes to this address 기능을 사용해 어느 부분에서 저 값이 쓰여지는지 추적하자

Find out what writes to this address의 사용법은 Step 5에서 알려줬으니 기억이 나지 않는다면 다시한번 보고오는것을 추천한다. 아무튼 이 기능을 이용해서 어느 부분에서 값이 -1 이 되는지 확인 할 수 있다. 어셈블리는 보면
'sub dword ptr [rsi+000007E0], 01' 이라고 되어 있는걸 볼 수 있는데 영어를 좀 하시는 분이라면 sub이 어떤 단어를 뜻하는지 알 수 있을 것이다. sub은 Subtraction이다. 어셈블리를 잠깐 분석해보면 rsi+000007E0의 주소에 포인터를 참조해서 1을 뺀다라는 뜻이다. 아래 예시를 보자

 

위 예시를 봤을 때 rsi 값이 08040000이라고 한다면 08040000+7E0=080407E0에 먼저 접근한다. 그 다음 어셈블리를 보면 dword ptr 이라고 되어있는데 이 어셈블리의 의미는 '이 주소를 4바이트(dword : double word) 포인터로 참조한다.' 라는 의미이다. 그렇기에 그 주소에 있는 주소를 참조하여 있는 값을 -1 한다는 말이다. 자 그러면 어셈블리의 의미는 알았으니 이제 +2 하는 어셈블리로 변경해야한다. 변경하는 방법은 다음과 같다.

 

좀 절차가 많은데 위 순서대로 잘 따라왔다면 마지막 화면을 볼 수 있다. 이 기능은 Auto assemble이라고해서 특정 주소의 어셈블리를 패치하여 다른 기능을 하도록 바꾸는 역할을 해준다. 이제 내용을 바꿔주고 Execute 버튼을 누르자

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"Tutorial-x86_64.exe"+2D4F7) 
label(returnhere)
label(originalcode)
label(exit)

newmem: //새롭게 바꿀 어셈블리 코드
add dword ptr [rsi+000007E0],02
jmp exit

originalcode: //원본 코드
sub dword ptr [rsi+000007E0],01

exit: //원래 코드의 흐름으로 돌아가는 부분
jmp returnhere

"Tutorial-x86_64.exe"+2D4F7: //기존에 어셈블리를 패치할 코드
jmp newmem
nop 2
returnhere:


 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Tutorial-x86_64.exe"+2D4F7:
sub dword ptr [rsi+000007E0],01
//Alt: db 83 AE E0 07 00 00 01

저기 Information에서 Yes를 누르면 패치된 코드가 있는 영역으로 점프된다. 다시 원래 있던 주소로 돌아가고 싶으면 BackSpace키를 누르면 된다. 원래 주소로 돌아가면 기존에 어셈블리가 'jmp 주소' 로 변경 된것을 확인 할 수 있다. 이제 Hit me를 클릭해보면 값이 2 증가하고 Next 버튼이 활성화되는것을 확인 할 수 있다.

 

반응형
Comments