Cheat Engine
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Cheat Engine는 실행 중인 게임의 메모리 내에서 중요한 값이 저장된 위치를 찾고 이를 변경하는 유용한 프로그램입니다. 다운로드하여 실행하면 도구 사용 방법에 대한 튜토리얼이 제공됩니다. 도구 사용법을 배우고 싶다면 이를 완료하는 것이 강력히 권장됩니다.
이 도구는 프로그램의 메모리 내에서 어떤 값(보통 숫자)이 저장된 위치를 찾는 데 매우 유용합니다. 보통 숫자는 4바이트 형식으로 저장되지만, double 또는 float 형식으로도 찾을 수 있으며, 숫자와 다른 것을 찾고 싶을 수도 있습니다. 그런 이유로 검색할 항목을 선택해야 합니다:
또한 다양한 유형의 검색을 지정할 수 있습니다:
메모리를 스캔하는 동안 게임을 중지하도록 체크할 수도 있습니다:
_Edit --> Settings --> Hotkeys_에서 다양한 목적을 위한 핫키를 설정할 수 있습니다. 예를 들어 게임을 중지하는 핫키가 있습니다(메모리를 스캔하고 싶을 때 유용합니다). 다른 옵션도 제공됩니다:
원하는 값의 위치를 찾은 후(자세한 내용은 다음 단계에서 설명) 더블 클릭하여 수정할 수 있습니다. 그런 다음 그 값을 다시 더블 클릭합니다:
마지막으로 메모리에서 수정이 완료되도록 체크 표시를 합니다:
메모리에 대한 변경은 즉시 적용됩니다(게임이 이 값을 다시 사용하기 전까지는 값이 게임에서 업데이트되지 않습니다).
중요한 값(예: 사용자 생명)을 개선하고 싶다고 가정하고, 이 값을 메모리에서 찾고 있다고 가정해 보겠습니다.
값 100을 찾고 있다고 가정하면, 해당 값을 검색하는 스캔을 수행하고 많은 일치를 찾습니다:
그런 다음 값이 변경되도록 무언가를 하고 게임을 중지한 후 다음 스캔을 수행합니다:
Cheat Engine은 100에서 새로운 값으로 변경된 값을 검색합니다. 축하합니다, 당신은 찾고 있던 주소를 찾았습니다, 이제 이를 수정할 수 있습니다. &#xNAN;여전히 여러 값이 남아 있다면, 그 값을 다시 수정할 수 있는 작업을 수행하고 또 다른 "다음 스캔"을 수행하여 주소를 필터링하세요.
값을 모르지만 어떻게 변경되는지 알고 있는 경우(변경의 값도 알고 있음) 숫자를 찾을 수 있습니다.
먼저 "알려지지 않은 초기 값" 유형의 스캔을 수행합니다:
그런 다음 값이 변경되도록 하고, 어떻게 값이 변경되었는지(제 경우에는 1 감소됨)를 지정하고 다음 스캔을 수행합니다:
선택한 방식으로 수정된 모든 값이 표시됩니다:
값을 찾으면 이를 수정할 수 있습니다.
가능한 변경이 많으며 결과를 필터링하기 위해 이 단계를 원하는 만큼 수행할 수 있습니다:
지금까지 값이 저장된 주소를 찾는 방법을 배웠지만, 게임의 다른 실행에서 그 주소가 메모리의 다른 위치에 있을 가능성이 높습니다. 따라서 항상 그 주소를 찾는 방법을 알아보겠습니다.
앞서 언급한 몇 가지 트릭을 사용하여 현재 게임이 중요한 값을 저장하고 있는 주소를 찾습니다. 그런 다음(원하는 경우 게임을 중지하고) 찾은 주소에서 우클릭하고 "이 주소에 접근하는 것을 찾기" 또는 "이 주소에 쓰는 것을 찾기"를 선택합니다:
첫 번째 옵션은 이 주소를 사용하는 코드의 부분을 아는 데 유용합니다(게임의 코드를 수정할 수 있는 위치를 아는 데 유용합니다). 두 번째 옵션은 더 구체적이며, 이 경우 이 값이 어디에서 쓰이는지 아는 데 더 도움이 됩니다.
이 옵션 중 하나를 선택하면 디버거가 프로그램에 첨부되고 새로운 빈 창이 나타납니다. 이제 게임을 플레이하고 값을 수정합니다(게임을 재시작하지 않고). 창은 값을 수정하는 주소로 채워져야 합니다:
이제 값을 수정하는 주소를 찾았으므로 코드를 마음대로 수정할 수 있습니다(Cheat Engine을 사용하면 NOPs로 빠르게 수정할 수 있습니다):
따라서 이제 코드를 수정하여 코드가 숫자에 영향을 미치지 않거나 긍정적인 방식으로 항상 영향을 미치도록 할 수 있습니다.
이전 단계를 따라 관심 있는 값이 있는 위치를 찾습니다. 그런 다음 "이 주소에 쓰는 것을 찾기"를 사용하여 이 값을 쓰는 주소를 찾고 더블 클릭하여 디스어셈블리 뷰를 얻습니다:
그런 다음 "[]" 사이의 헥스 값을 검색하는 새로운 스캔을 수행합니다(이 경우 $edx의 값):
(여러 개가 나타나면 보통 가장 작은 주소를 선택해야 합니다) 이제 우리가 관심 있는 값을 수정할 포인터를 찾았습니다.
"주소 수동 추가"를 클릭합니다:
이제 "포인터" 체크 박스를 클릭하고 텍스트 상자에 찾은 주소를 추가합니다(이 시나리오에서 이전 이미지에서 찾은 주소는 "Tutorial-i386.exe"+2426B0이었습니다):
(첫 번째 "주소"는 입력한 포인터 주소에서 자동으로 채워지는 것을 주목하세요)
확인을 클릭하면 새로운 포인터가 생성됩니다:
이제 그 값을 수정할 때마다 값이 있는 메모리 주소가 다르더라도 중요한 값을 수정하고 있습니다.
코드 주입은 대상 프로세스에 코드 조각을 주입한 다음, 코드 실행을 자신의 코드로 리라우팅하는 기술입니다(예: 점수를 빼앗는 대신 주는 것).
따라서 플레이어의 생명에서 1을 빼는 주소를 찾았다고 가정해 보겠습니다:
디스어셈블 코드를 얻기 위해 Show disassembler를 클릭합니다. 그런 다음 CTRL+a를 클릭하여 자동 조립 창을 호출하고 _Template --> Code Injection_을 선택합니다.
수정하려는 명령어의 주소를 입력합니다(보통 자동으로 채워집니다):
템플릿이 생성됩니다:
따라서 "newmem" 섹션에 새로운 어셈블리 코드를 삽입하고 "originalcode"에서 원래 코드를 제거합니다(실행되지 않도록 하려면). 이 예제에서 주입된 코드는 1을 빼는 대신 2점을 추가합니다:
실행을 클릭하면 코드가 프로그램에 주입되어 기능의 동작이 변경됩니다!
Cheat Engine 튜토리얼, Cheat Engine을 시작하는 방법을 배우기 위해 완료하세요.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)