미친해커

[Cheat Engine] Cheat Engine Tutorial Game Step 2 본문

Cheat Engine Tutorial

[Cheat Engine] Cheat Engine Tutorial Game Step 2

미친해커 2021. 9. 22. 20:01
반응형

Step 2는 좀 불합리한 게임이다. 클리어 조건은 상대편 2명을 죽이면 된다. 다만 내 체력해 비해 상대방의 체력이 엄청 높고 공격력 조차도 차이가 심하다. 또 상대방 타게팅은 플레이어 고정이다. 이 조건에서 클리어를 하면 된다. 

적의 체력을 모르니 당연히 처음은 Unknown initial value으로 스캔한다. 그 후 한 번 공격하고 Decreased value로 스캔을 반복한다.

이렇게 검색을 반복하다보면 다음과 같은 값을 볼 수 있다.

이제는 눈치껏 저렇게 두 값이 적 한명의 체력과 플레이어의 체력이라는걸 직감할 수 있다. 적의 체력을 리스트로 가져오고 Find out what writes to this address 기능을 사용한다.

그러면 위와 같이 하나의 Instruction이 잡히는걸 볼 수 있는데 어셈블리가 sub이다. 즉 edx 만큼 체력을 감소시킨다는 말이다. Show disassembler를 눌러 Instruction이 있는 주소로 이동한다.

이 주소에서 Find out what addresses this instruction accesses 기능을 사용한다.

그리고 적 2명을 각각 공격하여 이렇게 값을 얻어낸다.

이렇게 각각 그룹을 나눠주고 

RAX를 기준으로 Structure compare를 시도해준다. RAX를 기준으로 하는 이유는 sub [rax+60], edx 이기때문에 rax가 유저 정보를 가지고 있어서 구조체의 시작이 RAX이기 때문이다.

Only find matching groups를 체크해주고 Scan을 시작해준다. 그러면 각각 구조를 비교하여 다른점을 찾아주는데 Offset 0에 60은 체력이 존재한다는 것을 우리는 이미 코드를 통해서 알고 있다. 그 외에 적팀과 플레이어의 다른점은 Offset 0에 70번째를 가지고 구별할 수 있을 것 같다. 적팀은 1로 설정되어 있고 플레이어는 0으로 되어 있으니 이를 이용해 데미지를 조작할 수 있을 것으로 보인다. 그렇다면 Auto Assemble 기능을 사용하자

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

newmem: //this is allocated memory, you have read,write,execute access
cmp [rax+70], 0
je exit
sub [rax+60], 64
jmp exit

originalcode:
sub [rax+60],edx
ret 
add [rax],al

exit:
ret

"gtutorial-x86_64.exe"+400E3:
jmp newmem
nop
returnhere:


 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"gtutorial-x86_64.exe"+400E3:
sub [rax+60],edx
ret 
add [rax],al
//Alt: db 29 50 60 C3 00 00

코드를 위와 같이 설정하고 Execute를 해준다. 그리고 공격을 하면 플레이어는 데미지를 받지 않고 적팀에게는 100의 데미지가 들어간다.

반응형
Comments