최근 수정 시각 : 2024-11-14 01:13:41

치트 엔진

파일:치트엔진.png

Cheat Engine
[clearfix]
1. 개요2. 사용 방법
2.1. 검색 및 조작이 안 되는 경우
3. 기능
3.1. 포인터 스캐너3.2. 디버깅
3.2.1. DBVM(Dark Byte's Virtual Machine, 가상머신)
3.3. 스크립트
4. 게임핵5. 창과 방패 문제6. 여담7. 같이보기

1. 개요

공식 홈페이지

가장 유명한 메모리/헥스 에디터 프로그램 및 디버거이다. 주로 게임 관련 해킹이나 핵을 만드는데에 사용되기에 게임 해킹의 필수품으로 여겨진다. 오픈소스이며 대부분의 들이 치트 엔진을 통해 얻은 정보로 제작된다고 해도 될 정도다.[1] 강력한 헥스에디팅/메모리에디팅 툴로, 다른 프로그램에 비해 스캔 속도가 매우 빠른 편이다. 'cheat engine assembler'를 지원하는데, 이를 통해 코드 인젝션을 손쉽게 할 수 있다. 또한 여러 디버거(windows, VEH, dbvm)을 지원하여 메모리 흐름을 쉽게 볼 수 있다.

레지스터까지 변경할 수 있고 특정 주소에 무슨 opcode가 접근하거나 쓰고 있는지도 찾을 수 있는 등 디버깅 기능도 많이 포함하고 있다. 1~8 바이트, Float, Double, String, Binary 등 다양한 형식을 스캔할 수 있어 매우 유용하다. 또한 Lua 스크립트도 지원하고 5.8 버전부터는 DBVM(가상머신)까지 자체적으로 지원한다. 현재 최신 버전은 v7.4이고 여기에서 다운로드 받을 수 있다. 개발자는 Dark Byte이며 치트 엔진 포럼에 해당 프로그램 사용에 유용한 정보가 많이 올라와 있다. 주소는 여기.[2]

7.3 버전부터는 오프라인 인스톨러가 없어지고, 광고가 포함된 설치 파일을 내려받는 웹 인스톨러 형태로 바뀌었다. 따라서 설치할 때는 반드시 인터넷 연결이 필요하다. 또한 광고로서 포함된 부가 프로그램이 꼭 필요하지 않다면 설치 체크박스를 비워주자.[3]
오프라인 인스톨러 최종 버전인 7.2는 제작자가 전부 내려서 공식 사이트나 미러 사이트 등에서는 구하기가 어려우나, 인터넷이 안되는 PC등에서 사용하려면 필요한데 검색 등을 이용해 따로 올려놓은 곳을 찾을 수 있다. 예시[4]

한국어 번역파일도 공식 홈페이지에 있지만(downloads 항목의 Translations 밑에 있다) 구형이라서 한국어 패치를 하면 버전 표시가 6.6으로 뜬다.[5] 하지만 그걸 제외하면 기능은 정상적으로 작동한다.(사실 텍스트 에디터로 한국어 번역 파일을 뜯어고치면 간단하게 버전 표시를 업그레이드 가능하다)

이전에 유명했었던 치트오매틱과 비슷한 프로그램이다. 물론 이에 비해 제공되는 기능이 매우 많고 강력하여 치트오매틱을 제치고 핵 프로그램의 대명사로 떠올랐다. 이외에 비슷한 프로그램으로 tsearch가 있다.

2. 사용 방법

치트오매틱과 비슷하다. 튜토리얼이 존재하며, 영어를 몰라도 대충 감이 온다.[6] 다음은 실제 상황에서의 사용법.
  1. 왼쪽 위의 컴퓨터 아이콘을 눌러 목록에서 변경할 프로그램을 선택한다.[7]
  2. 게임에서 변경할 수치를 확인한 후, 해당 수치를 오른쪽 빈 칸에 입력하고 First Scan을 누른다.
  3. 게임으로 돌아가 수치를 변경한 후, 변경된 수치를 입력하고 Next Scan을 눌러 원하는 항목이 나올 때까지 걸러낸다.
  4. 걸러낸 값을 더블클릭하여 아래의 목록으로 옮긴 후, 값을 더블클릭해 원하는 수치를 입력하고 확인을 누른다.
  5. 게임에서 변경되었는지 확인한다. 덧붙여 목록으로 빼낸 값의 왼쪽에 있는 체크박스에 체크하면 해당 값을 고정한다.

어지간한 고전게임들은 적은 변수 사용으로 간단하게 값이 바로 딱 한 개만 나오지만, 최신 게임들에서는 수 많은 변수들을 사용하기 때문에 수치값 하나에 두 개 이상의 값들이 많이 검색되는 경우가 있다. 게다가 자릿수가 적을수록 아주 많이 찾아내기 때문에 이 때에는 2222, 3333처럼 좀더 값을 독특하거나 큰 수로 줘서 검색시 고유값처럼 구별이 되게끔 바꿔두는 방법으로 검색할 수밖에 없다. 더 나아가 수치가 일반 숫자값이 아닌 Hex라거나 다른 형태로서 저장되는 경우, 위의 방법으로는 아무리 찾아도 나오지 않기 때문에 이 부분은 세밀한 조정이 필요하다. 게임 개발에서 꼼수로 비정상적인 방법으로 수치를 저장해두는 경우도 이에 해당된다. 예를 들어, 알만툴에서는 변수를 따로 두지 않고 캐릭터 개수로 변수를 놓거나 체인형식으로 수치들을 나눠놨다가 필요시 한꺼번에 사용하는 경우이다. 이외에도 창의적인 방법들이 많다. 다만, 이러한 방법들은 메모리를 쓸데없이 더 쓰거나 오버헤드가 있는 등의 비용문제가 있기에 많이 사용되는 것도 아니고 복잡한 게임일수록 사용되지 않는다.

가끔 아무리 값을 변경하며 검색하더라도 2~5개 정도에서 더 이상 좁혀지지 않는 경우가 있는데, 이는 UI상의 수치와 다른 곳에 값을 사용하기 위해 따로 할당해놓은 수치인 경우가 대부분이다.[8] 이럴 때에는 게임을 저장해두고 일일이 하나씩 바꿔서 값이 변한 게 효과있는지 확인해가며 찾을 수밖에 없다. 가끔 잘못 건드리면 게임코드나 다른 변수를 건드린 거라 에러로 꺼질 수 있는데, 어쩔 수 없다. 심화과정을 할 수 있거나 코딩에 대해 어느 정도 지식이 있다면, 해당 메모리의 호출자를 확인해서 어느게 진짜 값인지 알아낼 수 있다.

한편 모든 수치에는 한계가 존재하기에, 너무 높은 값을 지정하면 수치가 마이너스로 바뀌거나 오류가 발생해 게임이 터지는 현상이 발생할 수 있으므로 여유를 두고 최대값을 잡자. 대부분 정수형 자료형을 사용하기 때문에 최대값을 2147483647 이하로 잡으면 된다. short의 경우 32767, Byte면 255까지가 최대값이다. 대부분 검색할 때마다 자료형이 치트엔진에서 잡아주기에 그에 맞춰 최대값을 맞추면 된다. 매우 드물지만 unsigned 자료형을 사용하는 경우에는 앞서 언급된 최대값의 2배를 허용하나 음수를 가지지 않는다는 것을 명심하고 최대값을 맞추면 된다.[9]

이외에 심화과정으로 이렇게 검색한 값의 메모리 위치를 스크립트로 고정하여 치트테이블로 만드는 과정이 있다. 더 나아가 코드분석, 데이터 마이닝도 손쉽게 가능하다.

뿐만 아니라 굉장히 손쉽게 스피드핵을 사용할 수 있다. 변경할 프로그램을 선택한 뒤 오른쪽 중간쯤에 스피드핵 활성화 버튼을 누르면 끝. 다만 당연하게도 모든 온라인 게임은 이런 핵을 금지하고 있으며 뒷감당은 본인의 몫이다. 가급적이면 싱글 게임에서만 사용하도록 하자. 배속설정은 최대 50배까지 가능하나 형식상 50배일뿐 보통 5배정도 더빠르다고 보면된다

2.1. 검색 및 조작이 안 되는 경우

앞서 언급된 사용 방법 항목 이후로 겨우 검색해서 찾은 유일한 수치값을 변경하더라도 바로 다시 원래대로 돌아가는 경우가 있는데, 이는 크게 3가지의 경우가 있다. 첫 번째는 찾으려는 값이 암호화되어 다른 값을 가져 검색에서 걸리지 않았거나, 두 번째는 서버에서 매번 값을 받아오기에 서버값으로 덮어씌워지는 것이고, 마지막으로 다른 곳에 쓰이려고 코드상으로 있는 임시 변수를 찾은 경우이다. 이를 더미데이터로 보는 시각이 있으나, 이는 프로그램의 무지에 의한 관점일 뿐이고 더미데이터 문서를 참고하면 알 수 있듯이 기존 개념과 정의에서 완전히 벗어난 잘못된 시각이다.
  • 찾으려는 값의 수치가 메모리상에서는 다른 수치인 경우

    • 여러 번 제대로 검색을 시도했으나 검색이 안 되는 것은 실제 수치가 아닌 다른 값으로 암호화되어 있기 때문이다. 그래서 만약 이 메모리를 찾으려면 암호화된 수치로 검색해야 한다.[10] 그러나 이 암호화된 수치는 메모리 위치와 암호화되는 방법마저 쉽게 알려지기에 복호화 방법을 쉽게 얻을 수 있다. 코드의 리버스 엔지니어링으로 쉽게 간파되며, 통짜로 검색하여 의심되는 수치를 역으로 되돌아가 어셈블리어의 코드로 뜯어보며 주소값들을 일일이 찾아내서 확인해보는 방법도 있다. 이렇게 해서 알아낸 암호화 과정들과 복호화 방법들은 인터넷으로 쉽게 퍼지기에 값의 암호화도 실상 보안에 있어서 무의미한 방법이다. 이 때문에 온라인 게임들은 값의 서버관리와 서버를 중심에 두는 연산 설계를 필수로 여긴다. 리사 더 조이풀의 경우 값 암호화가 되어있어 50을 검색하려면 50X2+1인 숫자인 101을 검색해야한다
  • 매번 서버에서 받아오는 값의 경우

    • 온라인 게임의 경우에 서버 중심 연산이라고 하여 중요한 수치와 연산들을 서버에서 하기 때문에 클라이언트에서 하는 조작은 의미없어진다. 데이터를 서버로부터 직접 받기 때문에 치트 엔진으로 찾는 건 모두 겉값에 해당하므로 변경 자체가 불가능하다. 보안 관련 인식 자체가 전무했던 과거 시절 겟앰프드는 본래 의도했던 것과는 달리 참값을 못 바꾸는 대신 겉값만으로 전혀 다른 치트를 사용할 수 있었다.
  • 찾은 메모리가 임시적인 경우

    • 대부분 값의 조작이 안 되고 되돌아간다면 해당 값을 보관하는 메모리 주소를 잘못 찾은 것이며, 실제로 찾은 메모리 주소는 로직을 위한 임시변수이거나 UI로서 화면에 표시할 때 쓰이는 임시변수에 불과한 것이다.[11] 심지어 실제로 값들이 분산되어 있다가 연산시에만 합쳐서 쓰는 경우도 있다. 값을 사용할 때만 임시변수에 이들의 합을 적용해 놓는 것인데, 이 총합을 위한 임시변수 메모리를 검색하고 조작한 경우이다. 실제로 게임상에서 값이 적용될 때에는 분산된 값들이 따로따로 적용되기에 아무리 총합의 값만 조작하더라도 바뀌지 않는다. 예를 들어, 게임 특성상 돈을 아이템화 하여 아이템 슬롯마다 여러 돈더미가 있고 이의 합들을 UI로 보게 된다는 전제 하에, 아무리 돈의 총합을 건드려봤자 게임상 로직이 돈더미 오브젝트의 차감으로 이루어지는 형식이면 총합의 조작은 의미 없어진다. 여기에서 돈의 양을 조작하고 싶다면 각 아이템 슬롯들의 돈더미마다 하나씩 조작해야 한다.[12]

3. 기능

3.1. 포인터 스캐너

자동적으로 정적 주소[13]를 기반으로 스태틱 값이 아닌 주소를 찾아주는 기능.[14] 일반적인 게임에서는 다양한 값을 메모리에 동적 할당 형태로 저장하는데, 동적 메모리를 참조하는 주소 자체는 큰 쓸모가 없다. 하지만 일부 정적 주소는 항상 다른 주소를 가리키며, 연달아 이 주소가 또 다른 주소를 가리키기도 한다. 이런 연결 고리 끝에 흥미롭고 다양한 정보를 가진 동적인 주소가 연결된 경우도 있는데 이러한 연결을 포인터 체인이라고 하며, 정적인 주소를 통해 동적인 주소를 찾는 행위를 포인터 스캐닝이라고 하는 것이다. 포인터 스캐너는 자동으로 정적 주소를 찾아주는 편리한 기능이지만 고성능의 CPU와 많은 시간, 게임의 종류에 따라서 결과값 산출을 위한 대용량의 저장매체를 필요로 하므로 어셈블리어를 잘 아는 사용자에겐 별로 좋은 선택지는 아니다. 게다가 요즘 게임은 포인터 주소값을 바로 저장하지 않고 적어도 XOR연산 정도는 해준 다음에 저장하거나 해킹이 어렵게 8레벨은 넘는 포인터를 사용하기 때문에 오래된 게임에서나 잘 작동한다

3.2. 디버깅

웬만한 디버깅 기능은 갖추고 있다. 윈도우 디버거 또는 VEH 디버거 그리고 후술할 커널을 이용한 디버거 중에서 고를 수 있다.

3.2.1. DBVM(Dark Byte's Virtual Machine, 가상머신)

대부분의 게임에서는 윈도우 디버거를 막아 놓는데, 이놈은 컴퓨터 자체를 가상화해서 피지컬 메모리에 직접 접근 할 수 있게 한다. 배틀아이 또는 싸인 코드가 프로그램의 메모리를 읽지 못하게 하는 것은 유저 모드에서나 하는 것이지만 이것을 이용하면 그것을 가볍게 무시하고 피지컬 메모리에 직접 엑세스하고 메모리에 접근 할 수 있다. 또 디버거 기능까지 탑재 되었는데, 윈도우 커널을 통해서 프로세스 간에 일어나는 상호작용까지 잡아낼 수 있다. 이로 인해 사실상 게임들은 치트 엔진을 막는 것밖에 방법이 없기 때문에 안티 치트 솔루션에서도 가장 골치 아프게 본다.

2017년경 오버워치 핵이 판쳤을 때 오버워치는 보안이 약하다는 인식이 씌워졌는데, 사실 오버워치는 절대로 보안이 약한 게임이 아니다. 외부에서 메모리에 접근하는 부분은 아무런 보안이 없지만 그만큼 포인터 암호화가 철저하게 되어 있고, 다른 게임이라면 VirtualProtectEx를 이용해서 실행 코드 부분을 덮어 씌워서 해킹할 수 있지만 오버워치는 .text 섹션을 리매핑하여, SEC_NO_CHANGE를 통해 메모리 수정을 불가능하게 했다. 오버워치의 보안이 무용지물이 된 이유는 바로 내부에서 DBVM 가상머신을 이용해 캐릭터의 가시여부를 따지는 함수와 에임앵글에 접근하는 함수를 디버거를 통해 RIP 레지스터를 핵 코드 실행주소로 후킹해서 가능했던 것이다. 물론, 2018년경 부터는 해커들이 .text섹션을 직접 리매핑하여 DBVM을 사용하지 않고도 메모리에 직접 접근하기 시작했다. 즉, 오버워치의 보안 문제는 오버워치 팀의 대처가 거의 없었던 점에서 기인했다.

3.3. 스크립트

어셈블리를 오토 어셈블 해주거나 LUA 스크립트를 사용할 수 있다. 메모리 할당, 쓰레드 생성, 심볼 설정 등 다양한 편리 기능까지 있다. 사실상 치트 엔진 스크립트를 이용해서 핵 프로그램을 만들 수 있다. 스크립트를 이용한 트레이너를 제작하는 툴도 치트 엔진 내부에서 제공하고 있다. 과거 오버워치서든어택 핵이 인터넷에 퍼졌을 때도 대부분 이 치트 엔진 스크립트와 위에서 말한 DBVM을 이용한 핵들이다.

4. 게임핵

결론부터 말하자면 조금이라도 게임을 건드리면 해킹이 맞다. 특히 온라인 게임에서는 계정 정지가 일어날 수 있으므로 사용하지 말자. 싱글플레이 게임에서 나 혼자 해킹하는 거야 누가 알 바 아니겠지만, 온라인 경쟁과 어떤 식으로든 연관될 경우(게임은 싱글플레이지만 업적이나 점수가 온라인에 게시되고 특히 랭킹 경쟁이 있을 경우[15], 아니면 싱글 게임 + 치트 엔진을 켠 상태에서 까먹고 온라인 게임을 동시에 실행하는 경우) 문제가 될 수 있다. 특히 후자의 경우 실수로 영정을 먹는 경우가 은근히 많으니 조심하자.

흔히 게임핵으로 알려진 대부분의 트레이너들은 이 치트엔진을 토대로 만들어진다. 치트엔진 자체가 메모리의 수치값을 그대로 읽고 커스텀 GUI까지 지원하는 강력한 오픈소스 프로그램이기 때문이다. 굳이 따로 헥스툴 관련 기초부터 프로그래밍할 필요 없이 단순한 메모리 찾는 스크립팅만으로 만들 수 있기 때문에 이를 이용한다.[16] 트레이너마다 버전별로 달라지는 원인도 버전마다 메모리 위치가 달라지기 때문에 수치만 보정한 차이일 뿐이다. 그럼에도 프로그래밍도 아닌 아주 기초적인 컴퓨터 사용 관련 지식 조차 없으면 치트엔진을 사용하려 해봤자 아무 초보적인 사용법조차 못 따라가서 무용지물이 된다. 그래서 이를 미리 검색과정을 해놓아서 돈으로 파는 것이 바로 트레이너이다.

공식 사이트에서 내려받은 정품 치트 엔진 자체는 절대로 게임 내 보안 시스템을 우회하지 않는다. 즉, 온라인 게임 보안 프로그램이 마음만 먹으면 감지할 수 있다는 뜻이다. 보통 게임사들도 이러한 경우에는 위험 프로그램 감지로 특정해서 바로 게임을 강제종료시키고 경고문 정도만 띄우는 정도로 마무리하고 실제 영구 정지까지는 가지 않는 경우가 대부분이다. 문제는 공식 사이트가 아닌 곳에서 이러한 탐지 시도를 우회하는 변조된 치트 엔진을 받았을 경우이다. 이 경우에는 정상적인 탐지를 우회하는 기능이 더해져있다보니 사용자가 치트 엔진에 손을 대서 데이터 값을 변조하고 그것을 온라인 서버가 감지하는 순간 영구 정지를 당하는 것은 시간 문제다.

5. 창과 방패 문제

치트 엔진은 그 훌륭한 기능도 기능이지만, 아무래도 가장 큰 심각성은 소스가 오픈되어 있다는 것에 있다. 오픈소스로 인해 수백 종 이상의 게임 보안 솔루션 바이패스 버전이 등장했으며 게임 보안 솔루션의 패치 속도보다 더 빠른 업그레이드 속도를 보여주고 있다. 이 때문에 게임 보안 솔루션 개발업체에서는 이 치트엔진 때문에 골머리를 앓고 있을 정도이다. 보안솔루션 개발자 몇 명이서 막고 있는데, 전세계 게임해커들은 이를 우회하는 방법을 찾고 있기 때문이다. 특히 치트엔진은 주로 로컬 메모리에 대한 의존도가 높은 게임에 많이 악용되고 있다.

그러나 당연하지만 치트 엔진이라고 해서 만능은 아니며, 결과적으로 조작을 막는 방법이 있기에 사용에 대해 조심할 필요가 있다. 주로 멀티플레이온라인 게임에서 볼 수 있는데, 만약에 이 게임들에서 사용하면 지금까지 키워놓은 계정이 하늘 위로 날아가는 모습을 보거나 갑자기 게임이 꺼지는 상황을 볼 수 있다.호기심으로 사용해 본다면 갑자기 꺼질때가 있을것이다[17]

개발측면에서 보자면 대부분의 게임들은 게임자체의 보안에는 투자를 잘 안 하는 편이다. 특히 보안에 신경쓰는 온라인 게임의 경우, 차라리 보안에 신경을 쓴다면 클라이언트나 엔진과는 상관없이 서버에 보안을 강화시키는 것이 일반적이다. 예를 들어 리니지 같은 게임은 철저히 서버 사이드 단에서 개발되었기 때문에 웬만한 데이터는 다 서버가 가지고 있고 클라이언트는 거의 UI만 존재하는 편이다. 즉 몸뚱아리만 덩그러니 있는 상태로 본다 해도 아주 틀린 얘기는 아니다. 따라서 리니지에는 치트 엔진 같은 메모리 해킹 툴이 거의 사용되지 않는 편이다. 이외에도 최신 PC 온라인 게임인 몬스터 헌터까지 간단한 수치변동 검색만으로 뚫리기에 게임이나 엔진이 치트엔진에 수치들이 쉽게 검색되지 않는 것을 바라기에는 무리가 있다.
  • 사용을 막기 위한 코드 암호화와 코드 난독화는 의미없다.

    • 코드 관련 암호화 및 난독화는 값의 수치값을 그대로 뜨게 하여 수치값 자체를 암호화하는 것이 아니라면 의미없다. 코드 관련 암호화 및 난독화에서 가장 대표적으로 데누보락이 있는데, 이를 사용하는 게임들에는 치트테이블과 트레이너들을 쉽게 찾을 수 있다. 코드 암호화란게 핵심 코드의 유출이나 DRM과 같이 불법 복제를 막기 위함이지, 수치값을 막는 방법이 아니기 때문에 당연한 것이다. 암호화된 코드에서는 읽기 힘들어진 코드와는 달리 원래 수치값들은 그대로 메모리상에 나열되어 있기 때문에 이 값들을 어떤 배열과 어느 타입으로 읽는가의 차이일 뿐, 통째로 검색해서 변동값 찾는 것도 있기에 의미없다. 심지어 코드 관련 암호화 및 난독화가 아닌 수치값 자체를 암호화하는 방법도 일반적으로 게임에서는 잘 선호되는 방법도 아니다. 게임상의 성능과 퍼포먼스를 위해 최대한 암호화, 복호화 과정을 줄여서 최적화 하는데, 꼭 이를 쓴다고 하면 사칙연산이나 비트연산으로 다른 값으로 만드는게 전부다. 가장 대표적인 예로 문명 시리즈가 있으며, 해당 값에 100이나 256을 곱한 값을 가진다.[18] 치트엔진에서 제공하는 튜토리얼에도 이에 대한 우회법[19]이 있을 정도로 사실상 무의미한 대안이다.
  • 시도부터 막는 방법은 없다.

    • 치트엔진의 제작사 홈페이지 소개에서도 유용하고 강력한 도구라고 자부하며 소개하고 있듯이 이 프로그램의 사용 시도는 막을 수 없다. 정확히 말하면 수치가 읽혀서 검색 자체를 막는 방법은 수치에 대한 암호화뿐이거나, 멀티플레이온라인 게임안티 치트를 도입해서 프로세스를 감시하다가 해당 핵이나 메모리에 접근하는 외부 프로세스를 감지하는 방법[20]으로 막는 방법 뿐이다. 전자의 방법으로는 게임의 성능(퍼포먼스)과 속도를 위해서 이 암호화를 단순한 사칙연산에 의지하고 있는 실정이고 암호화 과정도 쉽게 알려지기에 사실상 의미가 없다. 후자는 알려지지 않은 새로운 프로세스는 감지를 못하고[21] 앞서 소개된 DBVM 기능에 의해서도 손쉽게 우회되기에 역시 무의미하다. 해외에서는 개인정보 침해 논란으로 최근에는 사용을 꺼리기에 게임사에서 안티 치트를 도입했음에도 프로세스 감시는 꺼두기도 한다. 이렇게 치트엔진의 시도에 대해서는 무의미하기에 어느 개발자들도 막으려는 시도를 잘 안한다. 그렇기에 사실상 이보다는 값 조작을 막는 것에 대한 대책에 방법을 두고 있다.
  • 조작을 결과적으로 막는 조치는 있다.

    • 시도를 막는 1차 예방책은 준비해 놓지만 효율은 그리 좋지 못하다. 조금만 프로그래밍 지식이 있다면 우회가 가능하기에 게임사들은 중요한 연산이나 데이터들마다 로그를 항상 남겨두고 매번 검사를 하는 후로깅 검사나 민감한 값들은 서버중심 연산 형식으로 빼는 등 2차 예방책을 완벽히 해놓는다. 여기서 걸리면 바로 영구 정지 조치를 취하지 않고 사용자 목록으로 모아두었다가 벤 웨이브에 한꺼번에 영구정지해버리는데, 로그 검사하는 방법이나 서버 연산 과정이 쉽게 파악되지 않게 하기 위함이다.
  • 예외는 없다.

    • 유니티 엔진이나 언리얼 엔진 등의 최신 상용 게임 엔진에서는 처음부터 막힌다는 소문이 있으나, 이는 사실무근이다. 치트엔진의 제작사 홈피의 소개에서도 유용하고 강력한 도구라고 자부하며 소개하고 있듯이 상용 게임 엔진 역시 치트엔진에서는 값이 그대로 검색되어 나오며, 변조도 쉽게 이루어진다. 이를 막기 위해서 안티 치트를 게임사들이 도입한다. 유니티는 에셋으로 안티치트 모듈을 따로 판매하고 있다. # 당연히 이 모듈과 안티 치트가 완전히 막는다는 것도 아니다. 단지 어려워질 뿐이다.

6. 여담

  • DRM이 나오기 이전 고전 CD게임들의 경우에 CD 케이스 뒷면이나 동봉된 메뉴얼 뒷면으로 제공한 시디키로 복사방지가 이루어졌는데, 이 시디키가 없더라도 치트엔진과 같은 헥스 프로그램으로 게임 설치나 실행시에 나오는 시디키 요구 화면상의 버튼을 조작하여 입력없이 통과하는 방법도 있었다. 최근에는 이와 비슷한 결과를 내는 크랙을 인터넷에서 쉽게 검색할 수 있으나, 당시에는 아직 보안에 대한 개념이 프로그래머들 사이에서조차 잡히지 않던 시기이기 때문에 컴퓨터 업자나 프로그래머들 사이에서는 쉽게 일어났던 일이다.
  • 안티 바이러스가 악성코드로 진단한다. 이는 오진이니 설치 중에 문제가 생긴다면 검사 예외 처리해주자. 제작진도 이를 인지하고 있으나 현재도 고쳐지지 않았다. 사실 치트 엔진의 작동 원리가 해당 프로그램의 메모리와 DLL에 접근하기 때문에 바이러스로 진단하는 것이다. 특히 랜섬웨어 사태 이후 안티 바이러스 프로그램들도 다들 민감해진 상황이라 설치 중에는 냅두는 프로그램이라도 정작 인젝션을 시작하면 고급 위협 감지에서 칼같이 죽여버리는 경우도 많다.비트디펜더라던가 따로 예외 등록을 하던가 문제가 되는 동작 사용 중에만 해당 감시 기능을 꺼두던가 하자.
  • 리그 오브 레전드에서는 치트 엔진 사용자를 영구정지하는 것은 물론, 웹 브라우저에서 치트 엔진을 검색하면 실행 중인 게임을 강제 종료하는 신박한(?) 기능[22]이 있다.
  • 매년 4월 1일 만우절마다 기한이 지나서 1달에 200달러씩, 6개월에 1000달러, 1년에 1800달러를 내고 써야 한다고 메시지를 띄운다.

    • 파일:치트엔진만우절.png

    당연히 만우절 장난이므로 그냥 웃고 넘어가면 된다. 최근 버전에서는 이후 버전에서 일종의 화폐처럼 쓸 수 있는 코인을 미리 공짜로 준다고 해놓고는 받으려고 하면 메모리 변조 프로그램이 감지되었다면서 주지 않는다.
  • 2020년대 기준으로 치트 엔진의 보급(?) 및 연구가 확대되면서 각자 좋아하는 게임들의 치트코드를 자가제작하는 사례가 많아졌다. 그래서 어차피 치트 엔진이 베이스인데다 바이러스가 의심되는 트레이너보다는 *.CT 파일을 직접 내려받아서 사용하는 게 더 나을 수도 있다. 설령 프로그래밍을 모르더라도 단축키가 고정된 트레이너에 비해, 치트 엔진의 기본 설정을 통해 단축키 정도는 마음대로 바꿀 수 있다. 유/무료 여부를 따지지 않고 그럭저럭 업데이트가 된다는 점도 장점이다.
  • 모바일 앱으로도 있다. 다만 안드로이드가 현대 버전같은 경우 지원하지 않는다.

7. 같이보기



[1] 다만 요즘은 IDA와 같은 전문툴도 사용한다고 한다.[2] 꼭 https로 접속해야지 http로 접속했다간 검열의 무서움을 보게 된다. 여담으로 차단 사유는 "불법 게임물".[3] 만약 이를 원치 않고 깨끗한 파일을 받고싶다면 patreon으로 등록하면 된다.(유료) 다만 이 경우에도 오프라인 설치는 불가능하다고 한다.[4] 어느 곳에서 구하든 v7.2.0.9 버전이라면 md5: 28f146f830f6b7b506f683d96ab94362 / sha1: 17716a4e02c120f20bdb7ef1e15cdc04935f119c 의 체크섬이 일치해야 한다.[5] 치트 엔진 한글화 방법 및 패치 다운로드.[6] 공식 홈페이지에 한글패치가 있으며 한글패치 압축파일을 풀고 languages 폴더에 붙여넣기 하고 설정에서 설정하는 것으로 간단히 한글패치를 할 수 있다.[7] 치트오매틱이나 GameWiz32와 달리 아이콘까지 불러오기 때문에 폴더와 프로그램의 이름이 같더라도 구별할 수 있다.[8] 즉, 하나의 메모리 빼고 모두 이 하나의 메모리에서 값을 받아 쓰기 때문이다.[9] 가령 상점이 존재하는 RPG류 게임이라면 상점의 물가를 보고 돈의 최대값을 가늠할 수 있다.[10] 게임에서는 암호라고 말하기 어려운게 1세대 암호인 전치 및 환치 암호도 아닌 그저 사칙연산으로 다른 수치으로 바꾼 것에 불과하다. 대부분의 게임에서는 게임의 성능과 속도를 위한 것이다. 옛날 플래시 게임 해킹을 많이 해봤다면 (찾는 값)*8+6에 익숙해져 있을 것이다. 요즘은 플래시 게임에서도 잘 안 쓴다.[11] 사실, 엄밀히 따지면 바로 앞에서 설명한 온라인 게임도 이에 속한다. 서버에서 받아서 임시로 저장해놓는 변수 메모리를 검색한 것이기 때문이다.[12] 만약 돈더미마다 최대값이 정해져 있다면, 막대한 액수의 돈을 원할 경우 슬롯마다 초소단위 돈더미들을 나눠놓은 후에 모든 슬롯의 돈더미마다 최대값으로 일일이 바꿔줘야 한다. 물론 Lua스크립트나 치트테이블로 일괄 처리할 수는 있지만 각 슬롯의 메모리상의 구조를 알아야 쓸 수 있기에 상단히 고난이도가 될 수 있다.[13] 프로그램 실행파일이나 구성된 dll 등 심볼이 부여되는 주소.[14] 참고로 스태틱 값은 스캔 후 초록색으로 표시된다.[15] 실제로 스타크래프트 2에서 모든 업적을 그냥 따주게 하는 핵으로 실제로 업적 점수가 경쟁 대상이 되는지는 미지수지만 대량 영정 사태가 일어난 적이 있으며 공허의 유산 업데이트 후 치트 엔진을 켜기만 해도 자동으로 감지하고 게임이 종료되게끔 추후 패치가 이루어졌다. 치트엔진 자체는 잘 찾아보면 지금도 우회 버전이 돌아다니고 있다![16] 이는 유료 트레이너로 유명한 치트헤픈에서도 밝히는 바로서, 사람들이 생각하는 어렵고 복잡한 프로그래밍 과정이 꼭 필요한 것은 아니다. # 자세한 내용은 '게임 해킹 프로그램'문서의 '제작에 대한 오해' 항목 참고.[17] 치트는 가능하다면 남에게 민폐를 끼치지 않는 싱글플레이에서만 사용하는 것이 좋다. 싱글플레이 게임 핵사용은 욕먹을 대상도 아니고 게임운영을 방해하는 것도 아니기에 법에 저촉되지도 않는다. 애초에 게임 제작사에서 공식 지정한 치트키나 콘솔 명령어도 결국은 싱글 플레이 전용이거나 모든 플레이어가 사용할 수 있게끔 조금 비틀어 놓은것에 불과하다.[18] 사실 이건 암호화라기보단 고정소수점 사용일 가능성이 더 높다.[19] 초기 수치없이 검색하거나 함수나 메모리주소 자체를 찾는 방법 등 여러가지 방법들이 많다. 또한 이는 튜토리얼로서 초보자도 쉽게 할 수 있다.[20] 게임이 꺼지는 경우에는 대부분 이러한 방법으로 막힌 것이다.[21] 업데이트된 핵인 경우와 마찬가지이다. 치트엔진도 오픈소스로 코드 받아서 살짝 수정해서 사용하면 다른 프로세스로 잡히기에 감지가 안 된다.[22] 이는, 리그오브레전드의 안티치트(보안프로그램)가 사용자의 모든 프로세스를 감지한다는 것이다.