본문으로 건너뛰기

Cheat Engine 값 유형 완전 정리: 바이트, 실수(Float), 문자열, AOB

Cheat-Engine.net 작성자: Cheat-Engine.net 읽는 데 9분 조회 34회

Byte, 2/4/8 Bytes, Float, Double, String, Array of byte: 각 유형이 저장하는 값, 부호 있음과 부호 없음의 차이, 리틀 엔디언 바이트 순서, 유형을 모를 때 고르는 방법까지 알려드려요.

Cheat Engine에서 스캔을 할 때마다 두 가지를 정해야 해요. 어떤 값을 찾을 것인지, 그리고 그 값이 어떤 방식으로 저장되어 있는지예요. 두 번째 질문이 바로 값 유형(Value Type) 드롭다운이고, 스캔 결과가 아무것도 나오지 않는 가장 흔한 이유가 이 유형을 잘못 고르는 거예요. 이 가이드에서는 각 유형의 의미, 숫자가 메모리에 배치되는 방식, 게임이 어떤 유형을 쓰는지 전혀 모를 때 유형을 고르는 방법을 설명해요.

예제는 First Scan과 Next Scan을 이미 할 줄 안다고 가정해요. 아직 모른다면 초보자를 위한 치트 엔진 튜토리얼부터 시작해 보세요. 늘 그렇듯 이 기법은 싱글 플레이 및 오프라인 게임에서만 사용하고, 무언가를 바꾸기 전에 세이브 파일을 백업해 두세요.

유형이 중요한 이유

메모리는 그냥 길게 늘어선 바이트의 나열이에요. 숫자 1000은 "1", "0", "0", "0"이라는 문자로 저장되는 게 아니라 이진 패턴으로 저장되고, 같은 패턴도 어떻게 읽느냐에 따라 의미가 달라져요. 정수로 읽으면 1000인 4바이트가 float로 읽으면 알아볼 수 없을 만큼 아주 작은 숫자가 돼요. Cheat Engine에 유형을 알려 주면 각 주소에서 몇 바이트를 읽고 어떻게 해석할지 알려 주는 셈이에요. 유형이 틀리면 입력한 값과 절대 일치하지 않아요.

유형 한눈에 보기

유형크기범위게임에서의 일반적인 용도
Byte1바이트0 ~ 255 (부호 있음: -128 ~ 127)플래그, 작은 카운터, 레벨, 99로 제한된 아이템 수량
2 Bytes2바이트0 ~ 65,535 (부호 있음: -32,768 ~ 32,767)오래된 게임, 능력치 포인트, 인벤토리 묶음
4 Bytes4바이트0 ~ 4,294,967,295 (부호 있음: 약 ±2.1 billion)돈, 탄약, 경험치, 대부분의 정수
8 Bytes8바이트0 ~ 약 1.8 x 10^19 (부호 있음: 약 ±9.2 x 10^18)매우 큰 재화, 타임스탬프, 64비트 게임의 포인터
Float4바이트유효 숫자 약 7자리체력, 스태미나, 위치, 속도, 타이머
Double8바이트유효 숫자 약 15~16자리배정밀도를 쓰는 엔진과 스크립트 런타임
String가변텍스트, ASCII 또는 UTF-16캐릭터 이름, 아이템 이름, 대사
Array of byte가변모든 바이트 시퀀스, 와일드카드 사용 가능코드 시그니처, 원시 구조체

정수 유형: Byte, 2 Bytes, 4 Bytes, 8 Bytes

이 유형들은 소수점 없이 개수만 나타내는 정수예요. 이름을 보면 각각 몇 바이트를 쓰는지 알 수 있어요. 4 Bytes는 최신 게임에서 개수를 나타낼 때 압도적으로 많이 쓰여서 Cheat Engine의 기본값이에요. 약 4.29 billion을 넘을 수 있는 숫자, 예를 들어 방치형 게임 후반의 재화는 8 Bytes가 필요해요. 255를 넘지 않는 값은 공간을 아끼려고 하나의 Byte에 담기도 하는데, 특히 오래된 게임이나 켜짐/꺼짐 플래그에서 그래요.

부호 있음과 부호 없음

같은 비트도 부호 있음(음수 허용) 또는 부호 없음(0 이상)으로 읽을 수 있어요. 4 Bytes에서 FF FF FF FF 패턴은 부호 있음이면 -1, 부호 없음이면 4,294,967,295예요. 스캔 자체는 비트 패턴을 비교하기 때문에 주로 값이 표시되는 방식에만 영향을 줘요. 주소 목록에서 항목을 우클릭해서 부호 있음/없음 표시를 바꿀 수 있어요. 값을 0 아래로 낮췄더니 갑자기 엄청나게 큰 숫자로 보인다면, 부호 있는 값을 부호 없음으로 표시하고 있거나 게임에서 언더플로가 발생한 거예요.

바이트 순서: 리틀 엔디언과 계산 예시

Windows PC는 리틀 엔디언 바이트 순서를 사용해요. 가장 낮은 자리의 바이트가 먼저 저장돼요. 메모리 뷰어의 16진수 보기에서 메모리를 보거나 Array of byte 패턴을 직접 작성할 때부터 이게 중요해져요.

4 Bytes로 저장된 숫자 1000을 예로 들어 볼게요.

  1. 1000을 16진수로 쓰면 3E8이에요.
  2. 4바이트로 채우면 00 00 03 E8이고, 사람들이 보통 숫자를 쓰는 방식대로 가장 높은 자리의 바이트부터 적은 거예요.
  3. 리틀 엔디언은 바이트 순서를 뒤집기 때문에 메모리에서는 E8 03 00 00으로 보여요.

같은 숫자를 2 Bytes로 저장하면 E8 03이고, 8 Bytes로 저장하면 E8 03 00 00 00 00 00 00이에요. 바이트 단위로만 뒤집히고 바이트 안의 16진수 자릿수는 뒤집히지 않아요. E8은 그대로 E8이에요.

Float도 같은 규칙을 따라요. float 100.0의 비트 패턴은 42C80000이고, 메모리에는 00 00 C8 42로 놓여요. float 1.0은 3F800000이고 00 00 80 3F로 저장돼요. 이런 계산을 직접 하면 번거로우니, 값 변환기를 쓰면 어떤 숫자든 유형별로 10진수, 16진수, 리틀 엔디언 바이트를 나란히 보여 줘요.

부동 소수점: Float와 Double

Float는 소수 부분이 있는 숫자를 저장해요. 게임에서는 부드럽게 변하거나 소수가 필요한 모든 것에 써요. 틱당 0.3씩 재생되는 체력, 캐릭터의 X, Y, Z 위치, 이동 속도, 초 단위 쿨다운 같은 것들이에요. 숫자가 표시되지 않는 체력 바는 실제 체력(예: 87.5)을 담고 있거나 0.0에서 1.0 사이의 비율을 담고 있는 float인 경우가 아주 많아요.

Double은 같은 개념이지만 8바이트를 쓰고 정밀도가 훨씬 높아요. 게임플레이 값에 쓰는 게임은 적지만, 일부 엔진과 스크립트 런타임은 모든 숫자를 double로 저장해요. 소수가 있는 값을 Float로 스캔해서 실패하면 다음으로 Double을 시도해 보세요.

Float는 정확한 값이 아닌 경우가 많아서 Cheat Engine은 완벽한 일치를 요구하지 않아요. Float나 Double을 선택하면 스캔 패널에 반올림 옵션이 나오는데, 기본 반올림 모드에서는 87을 검색해도 87.4 같은 값이 일치해요. 그래도 불안정하다면 작은 범위로 Value between 스캔 유형을 쓰거나, Unknown initial value로 바꿔서 Increased와 Decreased 스캔을 사용하세요.

텍스트: ASCII와 UTF-16 String

String 스캔은 텍스트를 검색해요. 게임은 텍스트를 서로 다른 인코딩으로 저장하고, Cheat Engine에서 이를 선택할 수 있어요.

  • ASCII 또는 1바이트 텍스트: 문자당 1바이트예요. "Hi"는 48 69예요.
  • UTF-16: 문자당 2바이트이고, Windows 프로그램과 엔진에서 흔해요. "Hi"는 48 00 69 00이에요. 스캔할 때 UTF-16 옵션을 체크하세요.

대소문자 구분 옵션도 있어요. 캐릭터 이름을 검색하면 그 캐릭터의 데이터 구조를 빠르게 찾을 수 있어요. 능력치가 근처에 저장되는 경우가 많거든요. 문자열을 바꿀 때는 주의하세요. 원래보다 긴 텍스트를 쓰면 메모리에서 그 뒤에 오는 데이터를 덮어써요.

Array of byte (AOB)

Array of byte는 E8 03 00 00처럼 16진수로 쓰고 공백으로 구분한 정확한 바이트 시퀀스를 검색해요. ??를 아무 바이트나 의미하는 와일드카드로 쓸 수 있어서, 89 83 ?? ?? 00 00은 여러 변형에 일치해요. AOB는 게임플레이 값을 직접 찾는 데는 거의 쓰지 않아요. 주된 역할은 재시작 후에 특정 게임 코드를 다시 찾는 것이고, Auto Assembler 스크립트가 패치할 코드를 찾는 방식이 바로 이거예요.

"All" 유형

All을 고르면 Cheat Engine이 여러 숫자 유형에 걸쳐 값을 한꺼번에 스캔하고, 결과에는 각 일치 항목이 어떤 유형으로 발견되었는지 표시돼요. 포함되는 유형은 Cheat Engine 설정에서 조정할 수 있어요. All은 막혔을 때 유용하지만 결과가 훨씬 많아지고 느려지니, 습관이 아니라 최후의 수단으로 생각하세요.

유형을 모를 때 고르는 방법

유형이 실패할 때마다 New Scan을 시작하면서 순서대로 시도해 보세요.

  1. 화면에 표시되는 정수(골드, 탄약, 점수): 4 Bytes와 Exact Value로 시작하세요.
  2. 소수가 있거나 바 또는 위치인 경우: Float를 시도하세요. 보이는 숫자가 없으면 Unknown initial value를 사용하세요.
  3. Float로 찾지 못했다면: Double을 시도하세요.
  4. 255나 65,535를 넘지 않는 작은 숫자: Byte 또는 2 Bytes를 시도하세요.
  5. 매우 큰 숫자: 8 Bytes를 시도하세요.
  6. 그래도 없다면: All을 시도하고, 표시된 숫자가 실제 저장된 값인지 다시 생각해 보세요. 게임은 값을 10배나 100배로 곱해서 저장하거나, 남은 양 대신 최대치와 사용한 양을 저장하거나, 값을 인코딩해서 보관하기도 해요. 이런 경우에는 Unknown initial value와 Increased, Decreased 스캔이 확실한 방법이에요.

후보를 찾았다면 주소 목록에서 값을 바꿔 보고 게임을 지켜보며 확인한 다음, 나중에 기억할 수 있도록 항목 설명에 유형을 적어 두세요.

사용자 지정 유형과 덜 흔한 유형

Cheat Engine에는 개별 비트용 Binary 유형도 있고, 작은 스크립트로 정의하는 사용자 지정 유형도 지원해요. 최신 버전에는 일부 사용자 지정 유형이 기본으로 들어 있는데, 게임이 숫자를 반대 바이트 순서로 저장하는 드문 경우를 위한 빅 엔디언 변형 같은 것들이에요. 자주 필요하진 않지만, 특이한 게임에서 표준 유형이 통하지 않을 때 이런 게 있다는 걸 알아 두면 도움이 돼요.

요약

  • 정수는 4 Bytes, 소수와 바는 Float, 다음으로 시도할 건 Double, 작은 값은 Byte와 2 Bytes, 아주 큰 값은 8 Bytes예요.
  • 부호 있음과 부호 없음은 같은 비트를 두 가지로 읽는 거예요.
  • 메모리는 리틀 엔디언이에요. 4 Bytes로 저장한 1000은 E8 03 00 00이에요.
  • String은 ASCII와 UTF-16이 있고, AOB 패턴은 ?? 와일드카드로 원시 바이트를 검색해요.
  • 바이트 배치는 직접 계산하지 말고 값 변환기로 확인하세요.

댓글

0
답글 대상

공개되지 않아요.

댓글은 운영자의 검토를 거친 후에 표시돼요.

아직 댓글이 없어요

가장 먼저 의견을 남겨 보세요.