Cheat Engine

Support HackTricks

Cheat Engine는 실행 중인 게임의 메모리 내에서 중요한 값이 저장된 위치를 찾고 이를 변경하는 데 유용한 프로그램입니다. 다운로드하여 실행하면 도구 사용 방법에 대한 튜토리얼제공됩니다. 도구 사용 방법을 배우고 싶다면 이를 완료하는 것이 강력히 권장됩니다.

무엇을 검색하고 있나요?

이 도구는 프로그램의 메모리 내에서 어떤 값(보통 숫자)이 저장된 위치를 찾는 데 매우 유용합니다. 보통 숫자4바이트 형식으로 저장되지만, double 또는 float 형식으로도 찾을 수 있으며, 숫자와 다른 것을 찾고 싶을 수도 있습니다. 그런 이유로 검색할 항목선택해야 합니다:

또한 다양한 유형의 검색을 지정할 수 있습니다:

메모리를 스캔하는 동안 게임을 중지하도록 체크할 수도 있습니다:

핫키

_Edit --> Settings --> Hotkeys_에서 게임중지하는 것과 같은 다양한 목적을 위한 핫키를 설정할 수 있습니다(메모리를 스캔하고 싶을 때 유용합니다). 다른 옵션도 제공됩니다:

값 수정하기

원하는 위치찾은 후(다음 단계에서 더 자세히 설명) 더블 클릭하여 수정할 수 있습니다. 그런 다음 그 값을 다시 더블 클릭합니다:

마지막으로 메모리에서 수정이 완료되도록 체크 표시를 합니다:

메모리에 대한 변경은 즉시 적용됩니다(게임이 이 값을 다시 사용하기 전까지는 값이 게임에서 업데이트되지 않습니다).

값 검색하기

따라서, 사용자의 생명과 같은 중요한 값을 개선하고 싶다고 가정하고, 메모리에서 이 값을 찾고 있다고 가정해 보겠습니다.

알려진 변경을 통한 검색

값 100을 찾고 있다고 가정하면, 해당 값을 검색하는 스캔을 수행하고 많은 일치를 찾습니다:

그런 다음 값이 변경되도록 무언가를 하고, 게임을 중지하고 다음 스캔을 수행합니다:

Cheat Engine은 100에서 새로운 값으로 변경된 을 검색합니다. 축하합니다, 이제 찾고 있던 값의 주소찾았습니다, 이제 이를 수정할 수 있습니다. 여전히 여러 값이 남아 있다면, 그 값을 다시 수정하는 작업을 수행하고 또 다른 "다음 스캔"을 수행하여 주소를 필터링하세요.

알 수 없는 값, 알려진 변경

값을 모르지만 어떻게 변경되는지 알고 있는 경우(변경의 값도 알고 있다면) 숫자를 찾을 수 있습니다.

먼저 "알 수 없는 초기 값" 유형의 스캔을 수행합니다:

그런 다음 값이 변경되도록 하고, 어떻게 값이 변경되었는지 표시합니다(제 경우에는 1 감소했습니다) 그리고 다음 스캔을 수행합니다:

선택한 방식으로 수정된 모든 값이 표시됩니다:

값을 찾으면 이를 수정할 수 있습니다.

가능한 변경이 많다는 점에 유의하고, 결과를 필터링하기 위해 이 단계를 원하는 만큼 수행할 수 있습니다:

랜덤 메모리 주소 - 코드 찾기

지금까지 값이 저장된 주소를 찾는 방법을 배웠지만, 게임의 다른 실행에서 그 주소가 메모리의 다른 위치에 있을 가능성이 높습니다. 따라서 항상 그 주소를 찾는 방법을 알아봅시다.

앞서 언급한 몇 가지 트릭을 사용하여 현재 게임이 중요한 값을 저장하고 있는 주소를 찾습니다. 그런 다음(원하는 경우 게임을 중지하고) 찾은 주소에서 우클릭하고 "이 주소에 접근하는 것을 찾기" 또는 "이 주소에 쓰는 것을 찾기"를 선택합니다:

첫 번째 옵션은 이 주소를 사용하는 코드의 부분을 아는 데 유용합니다(이는 게임의 코드를 수정할 수 있는 위치를 아는 것과 같은 더 많은 것에 유용합니다). 두 번째 옵션은 더 구체적이며, 이 경우 이 값이 어디에서 쓰이는지 아는 데 더 도움이 됩니다.

이 옵션 중 하나를 선택하면 디버거가 프로그램에 첨부되고 새로운 빈 창이 나타납니다. 이제 게임을 플레이하고 값을 수정합니다(게임을 다시 시작하지 않고). 값을 수정하는 주소채워져야 합니다:

이제 값을 수정하는 주소를 찾았으므로 코드를 마음대로 수정할 수 있습니다(Cheat Engine을 사용하면 NOPs로 빠르게 수정할 수 있습니다):

따라서 이제 코드를 수정하여 숫자에 영향을 주지 않거나 긍정적인 방식으로 항상 영향을 주도록 할 수 있습니다.

랜덤 메모리 주소 - 포인터 찾기

이전 단계를 따라 관심 있는 값이 있는 위치를 찾습니다. 그런 다음 "이 주소에 쓰는 것을 찾기"를 사용하여 이 값을 쓰는 주소를 찾고 더블 클릭하여 디스어셈블리 뷰를 얻습니다:

그런 다음 "[]" 사이의 헥스 값을 검색하는 새로운 스캔을 수행합니다(이 경우 $edx의 값):

(여러 개가 나타나면 보통 가장 작은 주소를 선택해야 합니다) 이제 우리가 관심 있는 값을 수정할 포인터를 찾았습니다.

"주소 수동 추가"를 클릭합니다:

이제 "포인터" 체크 박스를 클릭하고 텍스트 상자에 찾은 주소를 추가합니다(이 시나리오에서 이전 이미지에서 찾은 주소는 "Tutorial-i386.exe"+2426B0이었습니다):

(첫 번째 "주소"는 입력한 포인터 주소에서 자동으로 채워지는 것을 주목하세요)

확인을 클릭하면 새로운 포인터가 생성됩니다:

이제 그 값을 수정할 때마다 값이 있는 메모리 주소가 다르더라도 중요한 값을 수정하고 있습니다.

코드 주입

코드 주입은 대상 프로세스에 코드 조각을 주입한 다음, 코드 실행을 자신의 코드로 리라우팅하는 기술입니다(예: 점수를 주는 대신 빼앗는 것).

따라서 플레이어의 생명에서 1을 빼는 주소를 찾았다고 가정해 보겠습니다:

디스어셈블 코드를 얻기 위해 "디스어셈블러 표시"를 클릭합니다. 그런 다음 CTRL+a를 클릭하여 자동 조립 창을 호출하고 _템플릿 --> 코드 주입_을 선택합니다:

수정하려는 명령어의 주소를 입력합니다(보통 자동으로 채워집니다):

템플릿이 생성됩니다:

따라서 "newmem" 섹션에 새로운 어셈블리 코드를 삽입하고 "originalcode"에서 원래 코드를 제거합니다(실행되지 않도록 하려면). 이 예제에서는 주입된 코드가 1을 빼는 대신 2점을 추가합니다:

실행을 클릭하면 코드가 프로그램에 주입되어 기능의 동작이 변경됩니다!

참고문헌

  • Cheat Engine 튜토리얼, Cheat Engine을 시작하는 방법을 배우기 위해 완료하세요.

Support HackTricks

Last updated