본문 바로가기
업무 자동화 매크로

메모리 매크로

by 오토픽 2024. 9. 28.
반응형

안녕하세요. 업무 자동화 RPA 매크로 오토픽입니다.

오늘은 메모리 읽기와 메모리 쓰기에 대해 알아보도록 하겠습니다.

이 내용은 블라자드의 스타크레프트를 예로 설명하고 있는데요. 게임뿐만 아니라 다양한 프로그램에서 메모리플을 만들 수 있습니다.

메모리플(메모리 매크로)은 이미지플(이미지 매크로)보다 정확하고, 매크로 제작이 쉽습니다.

다만, 정적 메모리 주소와 동적 메모리 주소를 알아내기 위한 사전 작업이 필요합니다.

 

오토픽 에디터를 실행하고, 아래와 같이 왼쪽 도구 상자의 윈도우 카테고리에서 메모리 쓰기와 메모리 읽기를 추가하세요.

 

 

 

치트 엔진을 실행합니다.

 

치트 엔진이란?

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

 

 

 

이번에는 테스트로 사용할 프로그램을 선정해야 하는데요.

다양한 게임들과 프로그램들이 있지만, 지금 제 컴퓨터에 설치되어 있는 게임중에 하나로 테스트 해보겠습니다.

 

 

 

게임에서 메모리 주소를 알아내고, 메모리 값을 변경하는 방법은 아래 동영상을 참고해주세요.

스타크레프트의 미네랄 값이 저장되어 있는 메모리 주소를 찾고, 메모리 주소의 값을 오토픽 에디터로 변경합니다.

감사합니다.

https://youtu.be/Wj0T-0uD0Vc

 

 

 

 

치트 엔진에서 메모리를 찾는 방법 및 노하우

어지간한 고전 게임들은 몇개의 변수 사용으로 간단하게 값이 나오지만, 최신 게임들은 수많은 변수들을 사용하기 때문에 수치값 하나에 두 개 이상의 값들이 검색되는 경우가 있습니다. 위의 스타크레프트도 미네랄이 3~4개정도 검색됩니다. 자릿수가 적을수록 많이 찾아내기 때문에 가능하면 독특하거나 큰 수로 검색하는게 좋습니다. 고유값처럼 구별이 되게끔 바꿔두는 방법으로 검색해도 됩니다. 더 나아가 수치가 일반 숫자값이 아닌 Hex값이거나 다른 형태로 저장되는 경우, 위의 방법으로는 메모리 값을 찾아도 나오지 않습니다. 이 부분은 세밀한 조정 작업이 필요합니다. 게임 개발에서 비정상적인 방법으로 수치를 저장해두는 경우도 이에 해당됩니다. 예를 들어, 알만툴에서는 변수를 따로 두지 않고 캐릭터 개수로 변수를 놓거나 체인형식으로 수치들을 나눠두었다가 필요시 한꺼번에 사용하는 경우입니다. 이외에도 창의적인 방법들이 많습니다. 다만, 이러한 방법들은 메모리를 쓸데없이 낭비하거나 오버헤드가 발생하기 때문에 비용문제가 있는 경우에는 많이 사용하지 못합니다. 특히나 복잡한 게임일수록 사용할 수 없기도 합니다.

 

가끔 아무리 값을 변경하며 검색하더라도 2~5개 정도에서 더 이상 좁혀지지 않는 경우가 있는데, 이는 UI상의 수치와 다른 곳에 값을 사용하기 위해 따로 할당해놓은 수치인 경우가 대부분입니다. 이럴 때에는 게임을 저장해두고 일일이 하나씩 바꿔가면서 값이 변하는지 테스트 해보는 수밖에 없습니다. 10개 미만으로 검색되는 경우에는 약간의 시간을 더 들여서 하나씩 확인 해보세요. 가끔 잘못 건드리면 게임코드나 다른 변수를 건드린 거라 에러로 꺼질 수 있습니다. 이런 비정상적인 동작은 메모리플을 만들 때 어쩔 수 없는 시행착오입니다. 심화과정을 할 수 있거나 코딩에 대해 어느 정도 지식이 있다면, 해당 메모리의 호출자를 확인해서 어느게 진짜 값인지 알아낼 수 있기도 합니다.

 

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

 

이외에 심화과정으로 이렇게 검색한 값의 메모리 위치를 스크립트로 고정하여 치트테이블로 만드는 과정이 있습니다. 더 나아가 코드분석, 데이터 마이닝도 손쉽게 가능합니다. 뿐만 아니라 굉장히 쉽게 스피드핵을 사용할 수 있습니다. 변경할 프로그램을 선택한 뒤 오른쪽 중간쯤에 스피드핵 활성화 버튼을 누르면 됩니다. 다만, 모든 온라인 게임이 핵을 금지하고 있기 때문에 감지가 되거나 문제가 발생했을 때 뒷감당은 본인의 몫입니다. 가급적이면 싱글 게임에서만 사용하도록 하세요. 배속 설정은 최대 50배까지 가능하나 형식상 50배일뿐 보통 5배정도 더빠르다고 보면됩니다.

반응형