치트엔진/사용 가이드

나만 무적으로 만드는 법 (치트엔진 AOB Injection)

cp_good: 2022. 8. 1. 04:06
반응형

 

저번 편처럼 코드를 수정하면 모두가 무적이 되는 상황이 발생합니다.

 

적까지 적용된 무적

 

나만 무적이 되고 싶으면 레지스터를 살펴보면 됩니다.

 

방법

체력에 접근하는 opcode에 우클릭 후

 

저번편에 찾은 체력에 접근하는 opcode입니다

 

Find out what addresses this instruction accesses를 눌러줍니다.

명령어에 접근하는 주소들을 찾아주는 기능입니다.

 

"sub [ebx+04],esi" 에 접근하는 주소들을 찾는 기능

 

눌러주면 이창이 뜨고 적들에게 피해를 입혀주면?

 

 

적들의 체력들이 찾아지게 됩니다.

 

 

찾은 체력들을 우클릭 -> Show register states클릭

 

레지스터 보기

 

그럼 캡처한 레지스터들이 보입니다.

여기서 레지스터를 비교해 적과 나를 구분하고 무적을 만들 겁니다.

 

비교대상은 작은 숫자, 체력 주소와 비슷한 주소입니다.

비교해보면 ESI, EBP가 다릅니다. 하지만 특정할 수 없는 값이기 때문에

남은 건 EBX의 체력 주소와 비슷한 주소밖에 없습니다.

 

박스 친 곳이 플레이어의 EBX를 보면 체력 주소와 비슷한 곳인데 

 

 

내 체력에 접근하는 opcode를 확인했을 당시 ebx와 같다는 걸 알 수 있습니다.

※이런 "ebx"를 플레이어 베이스, "+04"를 오프셋이라 합니다.

 

플레이어 베이스와 체력 오프셋

 

플레이어 베이스와 비교를 위해 스크립트를 수정해야 됩니다.

순서는

1. 플레이어 체력 베이스 주소를 얻어오기

플레이어 체력 베이스 주소는 포인터 스캔해서 찾아왔습니다 ("[ac_client.exe+0017E360] + EC")

"ac_client.exe+0017E360"를 포인터 오프셋1, "EC"를 포인터 오프셋2라 하겠습니다.

2. 플레이어 베이스 주소 찾아가기

위 사진을 보면 ebx+04가 체력값이니 -04를 해주면 플레이어 베이스 주소가 나오겠죠.

 

[ENABLE]

aobscanmodule(INJECT,ac_client.exe,29 73 04 8B C6)
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov eax,[ac_client.exe+17E254] 
  // 포인터 오프셋1, 에서 +0xEC(포인터 오프셋2) -0x4(체력 오프셋)을
  // 하면 플레이어 베이스가 찾아집니다
  add eax,+0xEC-0x4 
  cmp eax,ebx // 오프셋계산을 한후 ebx(플레이어 베이스주소)를 비교해줍니다
  jne code // 같지않으면 code:로 점프 (무적아님)
  jmp return // 같으면 return:로 점프 (무적임)
code:
  sub [ebx+04],esi
  mov eax,esi
  jmp return

INJECT:
  jmp newmem
return:
registersymbol(INJECT)

[DISABLE]

INJECT:
  db 29 73 04 8B C6

unregistersymbol(INJECT)
dealloc(newmem)

 

스크립트를 치트 테이블에 놓고 적용시켜보면

 

 

저만 무적이 되었습니다.

이런 식으로 모든 게임을 수정이 할 수 있습니다.


메일 : qmffhrm@protonmail.com

반응형