치트엔진/사용 가이드

텔레포트 핵 만드는 법 (치트엔진)

cp_good: 2022. 8. 17. 04:11
반응형

 

치트엔진으로 텔레포트 핵 만드는 법입니다.

모든 게임 똑같습니다. 저는 스카이림으로 했습니다.

안되면 보호되고 있는 게임입니다.

원리는 텔레포트할 좌표를 저장 후 캐릭터 좌표에 덮어쓰는 겁니다.

아래내용이 이해가 안되면 참고 하세요

캐릭터 좌표 찾기

 

좌표를 수정해야 되니 먼저 내 좌표를 찾아야 됩니다.

1. Y좌표(높이)로 찾으면 쉽게 좌표를 찾을 수 있습니다.

높이 있는 곳을 왔다 갔다 하면 됩니다 (계단, 사다리)

2. 좌표는 거의 모든 게임이 "float"형태입니다.

 

모르는 값이니 "Unknown initual value"로 검색해줍니다.

Y좌표는 올라가면 숫자가 증가하니

올라가서 "Increased value"

내려가서 "Decreased value"

반복해서 Y좌표를 찾아줍니다.

 

먼저 First Scan

이런 식으로 해줍니다.

 

올라가서 "Increased value" 내려가서 "Decreased value"

 

진짜 좌표인지 알아볼 때는 고정시켜보거나.

값을 변화시키면 됩니다.

 

값 고정, 변화

 

Y좌표를 찾았으니 "우클릭 -> Browse this memory region"으로

좌표 메모리를 확인해보면

 

 

이런 식으로 x, y, z 좌표가 붙어있는 걸 알 수 있습니다.

 

 

"3개 중 아무 좌표 우클릭 -> Find out what writes to this address"를 선택해서

좌표에 접근하는 주소를 확인해줍니다.

 

우클릭 -> Find out what writes to this address

 

명령어 중 movss [rcx+30], xmm1

이런 형태로 돼있는 명령어를 선택한 다음 "Showdisassembler"클릭

(여기서 "rcx"는 로컬 플레이어 베이스, "+30"은 좌표 오프셋임을 알 수 있습니다)

 

좌표에 접근하는 명령어들

 

명령어들이 뜹니다.

명령어를 후킹 해줄 건데

"Tools -> Auto assemble -> AOB Injection"선택해서

 

후킹할 명령어

 

탬플릿을 생성해줍니다.

 

탬플릿 생성

 

전체적인 코드 흐름은

1. 후킹 한 명령어에서 "newmem"으로 점프합니다.

2. "newmem"에서 "en_save"와 "en_load"가 1인지 체크합니다.

3. "en_save"가 1이면 "save"로 점프, "en_load"가 1이면 "load"로 점프합니다.

그 외 "code"으로 점프해 원래 흐름으로 돌아갑니다.

 

[ENABLE]

aobscanmodule(tel,SkyrimSE.exe,0F 29 89 20 01 00 00 48)
alloc(newmem,$1000,tel)
alloc(coord,8) // 좌표를 저장하기 위한 메모리할당 입니다.

label(code) // "code"단어를 주소로 만들어줍니다.
label(return)

label(xpos)
label(ypos)
label(zpos)
label(en_save)
label(en_load)
label(save)
label(load)
registersymbol(en_save) // "en_save"단어를 주소로 쓸수있게 만들어줍니다.
registersymbol(en_load)

coord: // 현재 좌표저장용 메모리입니다.
xpos: // x좌표 저장용 입니다.
dd 0 // x좌표를 0으로 패치하는 겁니다.
ypos:
dd 0
zpos:
dd 0

en_save: // 단축키 메모리입니다.
dd 0
en_load: // 단축키 메모리입니다.
dd 0

newmem: // 단축키 체크용 입니다.
cmp [en_save],1 // en_save가 1이면 save로 점프하는 겁니다.
je save
cmp [en_load],1 // en_load가 1이면 load로 점프하는 겁니다.
je load
jmp code // 나머진 code로 점프하는 겁니다.

save: // 좌표를 저장해주는 함수라고 생각하면 됩니다.
mov [en_save],0 // 1로 변화된 en_save를 다시 복원해줍니다 (또체크해야되기때문에)
push rbx // rbx을 사용할거기 때문에 원래값을 백업해줍니다.
mov rbx,[rcx+00000120] // x좌표를 rbx에 저장 후
mov [xpos],rbx  // xpos에 옯깁니다.
mov rbx,[rcx+00000124] // y좌표
mov [ypos],rbx
mov rbx,[rcx+00000128] // z좌표
mov [zpos],rbx
pop rbx // rbx 사용다했으니 pop
jmp code // code로 점프

load: // 저장된 좌표를 내좌표에 쓰기를 합니다
mov [en_load],0 // 1로 변화된 en_load를 다시 복원해줍니다 (또체크해야되기때문에)
push rbx // rbx을 사용할거기 때문에 원래값을 백업해줍니다
mov rbx,[xpos] // xpos에 저장되있던 좌표를 rbx에 이동
mov [rcx+00000120],rbx // 내좌표에 쓰기
mov rbx,[ypos] // ypos에 저장되있던 좌표를 rbx에 이동
mov [rcx+00000124],rbx
mov rbx,[zpos] // zpos에 저장되있던 좌표를 rbx에 이동
mov [rcx+00000128],rbx
pop rbx // rbx 사용다했으니 pop
jmp code // code로 점프

code:
  //movaps [rcx+00000120],xmm1 원본 opcode지만 좌표쓰기에 방해되서 삭제
  jmp return // return으로 점프

tel: // 후킹설치할 주소임
  jmp newmem // 후킹된 곳으로 점프
  nop 2
return: // 원래코드흐름으로 진행
registersymbol(tel)

[DISABLE]

tel:
  db 0F 29 89 20 01 00 00 // tel을 원래 바이트로 복원

unregistersymbol(tel) // 이름으로 주소를 사용할수있는 기능 삭제
unregistersymbol(save)
unregistersymbol(load)
dealloc(newmem) // 메모리 할당 해제
dealloc(coord)

 

스크립트를 다 작성했으면

단축키를 만들어야 됩니다.

"Add Address Manually"선택하고

 

 

주소 추가하는 곳에 "en_load", "en_save"를 추가해줍니다.

단어로 주소를 쓸 수 있는 이유는

단어를 주소로 쓸 수 있게 "registersymbol"로 만들었기 때문입니다.

 

"en_load", "en_save" 추가

 

"우클릭 -> Set hotkeys -> Create hotkey"

 

 

첫 번째 칸 선택해서 단축키로 쓸 키보드 누르면 등록됩니다.

2번째는 Set value to: 로 값을 설정하게 바꿔줍니다.

"en_load", "en_save"둘다 단축키 설정해줍니다.

저는 "en_load" 키패드 1번

"en_save" 키패드 2번

1이 설정되게 했습니다.

 

 

그다음 두 단축키를 선택해서 스크립트 밑으로 들어가게 합니다.

 

밑으로

 

스크립트를 체크하면 0으로 초기화되면서

작동을 합니다.

 

스크립트 활성화

 

작동 확인

1번 누르면 저장

2번 누르면 텔포

잘 작동합니다.

 

정상 작동

 

메일 : qmffhrm@protonmail.com

반응형