hacktricks/reversing-and-exploiting/reversing-tools-basic-methods/cheat-engine.md
2024-04-06 18:36:54 +00:00

10 KiB

htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

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

무엇을 찾고 있나요?

이 도구는 프로그램의 메모리에 어떤 값(일반적으로 숫자)이 저장되어 있는지 찾는 데 매우 유용합니다.
일반적으로 숫자는 4바이트 형식으로 저장되지만, 더블 또는 플로트 형식으로 찾을 수도 있으며, 숫자가 아닌 다른 것을 찾을 수도 있습니다. 이를 위해 찾고자 하는 대상을 선택해야 합니다:

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

메모리를 스캔하는 동안 게임을 중지하려면 상자를 선택할 수도 있습니다:

단축키

_편집 --> 설정 --> 단축키_에서 다른 목적에 대해 다른 단축키를 설정할 수 있습니다. 게임을 중지하는 것과 같은 다른 옵션도 사용할 수 있습니다:

값 수정하기

찾고자 하는 값의 위치를 찾았다면(다음 단계에서 자세히 설명합니다) 해당 값을 두 번 클릭하여 수정할 수 있습니다:

그리고 메모리에서 수정을 완료하기 위해 확인란을 선택합니다:

메모리의 변경 사항은 즉시 적용됩니다(게임이 이 값을 다시 사용하기 전까지는 값이 게임에서 업데이트되지 않음에 유의하세요).

값 검색하기

따라서 사용자의 생명과 같은 중요한 값(개선하려는 값)이 있고 이 값을 메모리에서 찾고자 한다고 가정합니다)

알려진 변경을 통해

값 100을 찾고자 한다고 가정하고 해당 값을 검색하여 많은 일치 항목을 찾았습니다:

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

Cheat Engine는 100에서 새 값으로 변경된 값들을 검색합니다. 축하합니다. 찾고자 하는 값의 주소를 찾았으므로 이제 값을 수정할 수 있습니다.
여전히 여러 값이 있는 경우 해당 값을 다시 수정하기 위해 무언가를 수행하고 다른 "다음 스캔"을 수행하세요.

알려지지 않은 값, 알려진 변경

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

따라서 "알려지지 않은 초기 값" 유형의 스캔을 수행하세요:

그런 다음 값이 변경되도록 하고 값이 어떻게 변경되었는지(제 경우에는 1 감소)를 나타내고 다음 스캔을 수행하세요:

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

값을 찾은 후에는 해당 값을 수정할 수 있습니다.

수정할 수 있는 가능한 변경 사항이 많이 있으며 결과를 필터링하기 위해 이러한 단계를 원하는 만큼 수행할 수 있습니다:

임의의 메모리 주소 - 코드 찾기

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

언급된 트릭 중 일부를 사용하여 현재 게임이 중요한 값을 저장하는 주소를 찾으세요. 그런 다음 (원하는 경우 게임을 중지하고) 찾은 주소에서 마우스 오른쪽 단추를 클릭하고 "이 주소를 사용하는 부분 찾기" 또는 "이 주소에 쓰는 부분 찾기"를 선택하세요:

첫 번째 옵션은 이 주소를 사용하는 코드 부분을 알려줍니다(게임의 코드를 수정하는 데 유용합니다).
두 번째 옵션은 더 구체적이며, 이 경우에는 이 값이 쓰여지는 위치를 알아내는 데 더 도움이 됩니다.

이러한 옵션 중 하나를 선택한 후에는 디버거가 프로그램에 연결되고 새로운 빈 창이 나타납니다. 이제 게임플레이하고 수정하세요(게임을 다시 시작하지 않고). 에는 값을 수정하는 주소채워질 것입니다:

값을 수정하는 주소를 찾았으므로 코드를 원하는 대로 수정할 수 있습니다(Cheat Engine를 사용하면 NOPs를 신속하게 수정할 수 있습니다):

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

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

이전 단계를 따라 관심 있는 값이 있는 위치를 찾으세요. 그런 다음 "이 주소에 쓰는 것을 찾아보세요"를 사용하여 이 값을 쓰는 주소를 찾고, 이를 두 번 클릭하여 어셈블리 뷰를 얻으세요:

그런 다음, 새로운 스캔을 수행하여 "[]" 사이의 16진수 값을 검색하세요 (이 경우 $edx의 값):

(여러 개가 나타나면 일반적으로 가장 작은 주소를 사용합니다)
이제 우리는 관심 있는 값을 수정할 포인터를 찾았습니다.

"주소 수동 추가"를 클릭하세요:

이제 "Pointer" 확인란을 선택하고 이전 이미지에서 찾은 주소를 텍스트 상자에 추가하세요 (이 시나리오에서 이전 이미지에서 찾은 주소는 "Tutorial-i386.exe"+2426B0입니다):

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

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

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

코드 주입

코드 주입은 대상 프로세스에 코드 조각을 주입한 다음 코드 실행을 자체 작성한 코드를 통해 재경로 설정하는 기술입니다 (예: 점수를 얻는 대신 점수를 뺏는 것).

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

디스어셈블러 표시를 클릭하여 디스어셈블 코드를 얻으세요.
그런 다음, CTRL+a를 눌러 자동 어셈블 창을 호출하고 _템플릿 --> 코드 주입_을 선택하세요.

수정하려는 명령문의 주소를 입력하세요 (일반적으로 자동으로 채워집니다):

템플릿이 생성됩니다:

그런 다음, 새 어셈블리 코드를 "newmem" 섹션에 삽입하고 원래 코드를 "originalcode"에서 제거하세요. 이 예제에서 주입된 코드는 1을 빼는 대신 2 포인트를 추가합니다:

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

참고 자료

  • Cheat Engine 튜토리얼, Cheat Engine을 시작하는 방법을 배우려면 완료하세요
htARTE (HackTricks AWS Red Team Expert) 로 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법: