NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 팁 앤 테크
  • 매뉴얼

    팁과 테크니컬 노하우를 확인하세요.

    팁 앤 테크

    팁과 테크니컬 노하우를 확인하세요.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    에디터 치트 엔진 2부 - 메모리플 또는 메모리 매크로 프로그램 만들기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 지난 시간에 이어서 치트엔진을 이용한 메모리플 또는 메모리 매크로를 만드는 방법에 대해 알아볼께요. 메모리 매크로 만들기 1부를 아직 안보신 분들은 아래 링크를 클릭해서 연습 1과 연습 2를 따라 해보세요.

    [ 치트 엔진 - 메모리플 또는 메모리 매크로 프로그램 만들기 ]

     

    1부를 보고 오신 분들은 아래와 같이 메모리 읽기와 메모리 쓰기 2개가 추가된 스크립트가 만들어져 있을겁니다.

    cakiQnB.jpg

     

     

    치트 엔진의 튜토리얼 스텝 3의 내용입니다.

    fDsBt6h.jpg

     

    3단계: 초기값을 알 수 없음 (PW=419482)
    자, 정확한 값을 사용하여 값을 찾는 방법을 알아냈으니 이제 다음 단계로 넘어가겠습니다.
    
    그래도 가장 중요한 것이 먼저입니다. 새 스캔을 수행하고 있으므로 새 스캔을 시작하려면 먼저 새 스캔을 클릭해야 합니다. (간단하다고 생각할 수도 있지만, 얼마나 많은 사람들이 그 단계에서 막히는지 놀라게 될 것입니다.) 이 단계는 다시 설명하지 않을 것이므로 명심하세요.
    이제 새 스캔을 시작했으므로 계속 진행해 보겠습니다.
    
    이전 테스트에서는 초기값을 알고 있었기 때문에 정확한 값 검색이 가능했지만 이제는 시작값을 알 수 없는 상태 표시줄이 생겼습니다.
    우리는 그 값이 0에서 500 사이라는 것만 알고 있습니다. 그리고 'Hit me'를 클릭할 때마다 체력이 약간 잃습니다. 매번 잃는 금액은 상태 표시줄 위에 표시됩니다.
    
    이번에도 값을 찾는 방법에는 여러 가지가 있습니다. (...스캔으로 값을 감소시키는 것과 같은) 가장 쉬운 방법만 설명하겠습니다. "알 수 없는 초기값" 및 감소된 값.
    지금은 값을 모르기 때문에 정확한 값은 소용이 없으므로 스캔 유형을 '알 수 없는 초기값'으로 선택하고, 값 유형은 4바이트입니다. (대부분의 Windows 앱은 4바이트를 사용합니다.) 첫 번째 검사를 클릭하고 완료될 때까지 기다립니다.
    
    완료되면 'Hit me'를 클릭하세요. 건강을 일부 잃게 됩니다. (잃은 금액은 몇 초 동안 표시되었다가 사라지지만 그럴 필요는 없습니다)
    이제 치트 엔진으로 이동하여 '값 감소'를 선택하고 '다음 스캔'을 클릭하세요.
    스캔이 완료되면 'Hit me'를 다시 클릭하고 몇 개만 찾을 때까지 위의 작업을 반복하세요.
    
    값이 0에서 500 사이라는 것을 알고 있으므로 필요한 주소일 가능성이 가장 높은 주소를 선택하여 목록에 추가합니다.
    이제 체력을 5000으로 변경하여 다음 단계로 진행합니다.

     

    위 내용을 간단하게 말하면 이렇습니다. 튜토리얼 창 하단에 체력 게이지(에너지바)가 있습니다. 이 체력을 나타내는 에너지바는 0에서 500 사이의 값이라는 것만 알고 있습니다. 초기 값을 알 수 없으니 Hit me를 클릭해서 변화하는 값을 토대로 메모리 주소를 알아내고, 해당 값을 5000으로 변경하라는 뜻입니다. 어떤 값으로 찾아야 하는지 알 수 없기 때문에 모든 초기값을 스캔 해봅시다. ①Scan Type을 클릭하고, ②Unknown initial value(알 수 없는 초기 값)를 선택하세요. ③First Scan을 클릭하세요.

    sipscxc.jpg

     

     

    669,696개의 메모리 주소가 있습니다.

    UyT0Sv5.jpg

     

     

    우리가 알 수 있는 조건은 Hit me를 누르면 에너지바가 줄어든다는 것입니다. 보통 게임에서 한다 맞으면 피가 줄어들테니 그와 비슷한 시나리오라고 생각하시면 이해가 쉬울거 같습니다. 튜토리얼 창에서 Hit me를 클릭 해보세요. -6이라는 숫자가 잠깐 떳다가 사라집니다. 그리고, 에너지바도 약간 줄었네요. 케릭터가 다른 유저 또는 몬스터에게 내 케릭터가 맞으면 타격 수치가 나올건데요. 아마도 이와 비슷하게 연습 해보는걸거예요.

    cECY49M.jpg

     

     

    처음 값에서 -6된 메모리 주소를 찾아야 하니 아래와 같이 치엔에서 변경하고 스캔 해보세요. ①Value(값)에 6을 입력하세요. 이 값은 랜덤이라서 저와 다를겁니다. 그리고, -6이지만 정수 6을 입력해야 합니다. 스캔 타입(Scan Type)은 ②Decreased value by ... 로 선택하세요. 초기 값(Initial value)에서 감소한 값(Decreased value)을 찾아줍니다.

    Pp7DfxV.jpg

     

     

    만약, 물약을 먹어서 체력을 회복한다면 초기 값에서 증가한 값을 찾으면 될겁니다. 몹이나 다른 케릭터에게 맞는 도중에 메모리 값을 스캔하는건 쉽지 않을겁니다. 그래서, 체력이 떨어진 상태에서 마을로 이동한 후 물약을 하나 먹어보세요. 그리고, 증가한 양만큼 추적하면 좀 더 쉽게 메모리 주소를 찾을 수 있을겁니다.

     

    이제 치트 엔진에서 Next Scan을 클릭해보세요. 아래와 같이 찾고 싶은 메모리 주소가 많이 줄어든걸 확인할 수 있습니다. 실제 게임에 적용할 때는 이보다 복잡하겠지만, 지금 예제에서는 01736E08 메모리 값이라는걸 딱 봐도 알 수 있을겁니다. 처음 에너지가 150이었다가 6이 줄어서 현재 144 체력이 남았다는걸 유추할 수 있으니까요.

    nRjN2ju.jpg

     

     

    만약, 유사한 값이 많거나 유추하기가 어렵다면 다시 Hit me를 클릭하고 변화된 값을 확인하세요. 저는 -9가 나왔습니다. 치엔에서 9를 입력하고 Next Scan을 클릭하세요. 144에서 9가 줄어든 값은 135입니다. 아래에서 보듯이 위에서 유추한 메모리 주소와 이번에 나온 메모리 주소가 같습니다. 이게 확실한거 같네요.

    cNvl2qB.jpg

     

     

    엔지엠 매크로 에디터로 돌아와서 메모리 주소를 입력하고, 변수 값을 5000으로 변경한 후 실행 해보세요. 튜토리얼에서 Next 버튼이 활성화 되었습니다.

    bV9CrPe.jpg

     

     

    스텝 4는 아래와 같은 내용을 연습하게 됩니다. 여러분들도 아시겠지만, 일부 게임은 변수 형식(Variable Type)이 부동 소수점(Float)으로 되어 있습니다. 부동 소수점을 못 읽는것은 아니지만, 값을 처리하는데 복잡한 코딩 작업이 필요하게 됩니다. 부동 소수점이라도 정수로 읽어서 바이트로 변환한 다음에 Float Type으로 변환할 수 있습니다. 이 방법은 다음에 알아보기로 하고, 엔지엠 매크로에는 기본적으로 Float 형식을 지원하기 때문에 쉽게 처리가 가능합니다.

    4단계: 부동 소수점(PW=890124)
    이전 튜토리얼에서는 바이트를 사용하여 스캔했지만 일부 게임은 소위 '부동 소수점' 표기법으로 정보를 저장합니다.
    (아마도 간단한 메모리 스캐너가 그것을 쉽게 찾는 것을 방지하기 위함일 것입니다)
    부동 소수점은 점 뒤에 몇 개의 숫자가 있는 값입니다. (예: 5.12 또는 11321.1)
    
    아래에는 체력과 탄약이 표시됩니다. 둘 다 부동 소수점 표기법으로 저장되지만 체력은 부동 소수점으로 저장되고 탄약은 이중으로 저장됩니다.
    체력을 잃으려면 hit me를 클릭하고, 탄약을 0.5로 줄이려면 사격을 클릭하세요.
     
    계속하려면 두 값을 모두 5000 이상으로 설정해야 합니다.
    
    정확한 값 스캔은 여기에서 잘 작동하지만 다른 유형으로도 실험해 볼 수도 있습니다.
    
    
    힌트: 더블 유형의 경우 "빠른 스캔"을 비활성화하는 것이 좋습니다.

     

    이번 예제의 핵심 내용은 Float 형식의 값과 Double 형식의 값 2개를 찾아서 모두 5000이상 값으로 설정해야 합니다. Health 값이 100이므로 100을 입력하고, Value Type을 Float로 변경하세요. 그리고, 스캔을 눌러보면 하나의 메모리 주소만 나오게 됩니다. 좌측에 나온 메모리 주소를 더블 클릭해서 하단에 추가하세요.

    ezJuaDW.jpg

     

     

    Value Type을 Double로 변경하고, 다시 스캔 해보세요. 이번에도 하나만 나오는데요. 아래와 같이 변수 2개를 찾았습니다.

    gezgfux.jpg

     

     

    각각 값을 변경 해볼까요? 메모리 쓰기 액션에 각각의 메모리 주소를 입력하고, 자료형 선택에서 Float와 Double을 입력한 후 실행하세요. Next 버튼이 활성화됩니다.

     

     

    스텝 5단계는 약간 복잡한 내용입니다. 어셈블리에 대한 지식이 필요하고, 조작할 수 있어야 합니다. 글을 작성하다보면 내용이 복잡해지고 길어질듯해서 다음 글에서 자세하게 알아보도록 하겠습니다. 지금까지 연습해본 내용으로 매크로를 만든다면 몇몇 기능들은 이미지 매크로에서 만들기 어려운 기능들도 쉽게 만들 수 있습니다. 예를 들어서 미니맵 좌표에서 거리를 계산한다고 생각 해보세요. 이 때 이미지 매크로는 대부분 OCR 기능을 사용해서 문자를 읽을겁니다. 물론, 거래소에서도 이와 비슷한 방식으로 사용합니다.

     

    이 때 OCR 문자 또는 숫자 인식이 100프로 완벽하게 읽지 못하면, 문제가 발생할 수 있습니다. 그래서, 실제 메모리에 접근해서 값을 가져온다면 정확하게 연산할 수 있습니다. OCR 인식률이 100프로라면 좋겠지만... 항상 그렇지는 않거든요. 여러가지 상황들이 있을 수 있겠지만, 이미지에서 문자와 숫자를 추출하는건 현재 기술로는 100프로 보장할 수 없습니다. 이런 문제를 해소하려면 어느정도 메모리플을 같이 사용해야 합니다^^

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.