AOB Scan은 여기 있습니다.
AOB Injection를 이용해 어셈블리를 수정하는 방식입니다
모든 게임에 적용됩니다
무적 치트는 체력과 관련 있으니 체력을 검색해줍니다
게임은 어썰트 큐브라는 게임입니다
1. 체력 검색
체력은 float 아니면 4 Bytes이니 먼저 4바이트로 "100" 검색해줍니다

725개의 값을 찾았네요
개수를 줄이기 위해 체력 값에 변화를 줘야 합니다


체력이 "49"가 됐으니 "49"로 Next Scan 해줍니다

2개로 줄었네요
※ 여전히 개수가 많다면 반복 검색을 해서 줄여주면 됩니다

2. opcode 찾기
2개 중 진짜 체력 값을 찾아야 하는데
확인해본 결과 "008D1D14"는 화면에 표시해주는 값이었고
"0C0B5348"가 진짜 체력 값이었습니다
아래처럼 확인했습니다
체력 값이 변한다는 뜻은 체력 값에 접근하는 opcode가 있다는 거니
체력 값에 쓰기하는 opcode를 찾아줄 겁니다
각 주소에 우클릭 -> Find out what writes to this address (주소에 접근하는 opcode를 찾아줍니다)


이런 창이 뜨고

체력 값에 변화를 주면
변화를 주는 opcode가 나옵니다

쓰기 한 값 opcode를 클릭 후 Show disasembler를 클릭합니다


추가 설명
00484499 - 89 82 EC000000 - mov [edx+000000EC],eax
opcode 주소입니다
opcode를 16진수로 해석한 값입니다
opcode입니다
[]로 둘러싸여 있으면 주소를 참조한다는 뜻입니다
mov : 이동시키는 겁니다, eax를 [edx+000000EC]로
0041C223 - 29 73 04 - sub [ebx+04],esi
sub : 뺀다는 뜻입니다, [ebx+04] 값을 esi로 뺀다)
메모리 뷰어가 뜨면서 많은 opcode들이 보일 겁니다
그중 체력에 접근하는
opcode우클릭 -> Replace with code that does nothing클릭 (아무 동작 안 하는 코드로 만드는 겁니다)



opcode를 아무 동작 안 하는 코드로 바꾼 후 대미지를 받아보면
진짜 체력 값, 무적이 됐네요
이런 식으로 진짜 체력 값을 찾아줬습니다

화면에 표시만 해주는 값
그냥 죽어버리네요

이제 진짜 체력에 접근하는 opcode를 AOB Injection로 수정해줄 겁니다
3. AOB Injection
AOB Injection은 aobscan(치트엔진 기능)을 이용해 자동화해주는 기능입니다
게임을 껐다 켜면 opcode주소가 변하게 되는데 주소는 변하되 opcode는 바뀌지 않습니다
변하지 않는 opcode의 16진수 값을 검색해 opcode 주소를 찾아주는 기능입니다
※aobscan : 시그니처 검색, 바이트 검색이라고도 합니다
Memory Viewer -> Tools -> Auto assemble -> Template -> AOB Injection로 코드 생성해줍니다

자동 생성된 코드입니다 (주석 지우고 설명글 넣었습니다)
전체적인 흐름은 대미지를 받으면 INJECT:로 진입합니다
jmp newmem을 만나 newmem:로 점프합니다
jmp return을 만나 return:로 점프합니다
체크 해제하면 INJECT:을 원래대로 되돌리고
이름과 메모리 할당을 해제합니다
// 체크하면
[ENABLE]
// ac_client.exe 모듈에서 29 73 04 8B C6가 있는 주소를 INJECT로 바꾼다는 뜻
aobscanmodule(INJECT,ac_client.exe,29 73 04 8B C6)
alloc(newmem,$1000) // 메모리 할당받습니다
label(code) // label은 주소를 "code" 단어로 사용할 수 있게 해줍니다
label(return) // 주소를 "return" 단어로 사용할 수 있게 해줍니다
newmem: // INJECT: 에서 점프해옵니다
// 밑에 함수랑 이어져있다고 보면 됩니다. 그대로 code: 함수로 진행됩니다
code: // 원하는 코드로 수정해도 됩니다
//sub [ebx+04],esi 아무것도 안하게 주석처리 해줍니다
mov eax,esi
jmp return // return:으로 점프합니다
INJECT: // 원래 opcode가 있던 위치입니다
jmp newmem // newmem:으로 점프합니다
return:
registersymbol(INJECT) // INJECT 이름을 주소로 사용할 수 있게 합니다
// 체크 해제하면
[DISABLE]
INJECT:
db 29 73 04 8B C6 // INJECT: 에 29 73 04 8B C6로 바이트 패치하는 겁니다
unregistersymbol(INJECT)// INJECT 이름 해제
dealloc(newmem) // 할당받은 메모리 해제
참고 사진

치트 테이블에 올려서 체크 가능하게 해 줍니다


잘됬는지 확인해보면 잘됩니다

그런데 이렇게 해버리면 자신뿐만 아니라 적도 무적이 되는 경우도 있는데
그건 다음 편에 포스팅하겠습니다
나만 무적으로 만드는 법 (치트엔진, AOB Injection)
저번 편처럼 코드를 수정하면 모두가 무적이 되는 상황이 발생합니다 나만 무적이 되고 싶으면 레지스터를 살펴보면 됩니다 방법 체력에 접근하는 opcode에 우클릭 후 Find out what addresses this instruc
cpgood.tistory.com
메일 : qmffhrm@protonmail.com
'치트엔진 > 사용 가이드' 카테고리의 다른 글
치트엔진 Mono Features을 이용한 스피드해킹(Dissect mono, .Net Info) (4) | 2022.08.07 |
---|---|
플레이어 충돌 없애기 (치트엔진, No player collision) (0) | 2022.08.01 |
나만 무적으로 만드는 법 (치트엔진 AOB Injection) (0) | 2022.08.01 |
치트엔진 드라이버 로드하기(우회방법, 오류해결) [cheat engine] (0) | 2022.07.07 |
[cheat engine] 안티치트로 보호된 모듈 주소 구하기 (0) | 2022.07.05 |