NGMsoftware

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

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

    팁 앤 테크

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

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

    에디터 치트 엔진 3부 - 메모리 해킹에 대해 배우기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 치트 엔진 1부와 2부를 통해서 메모리 값을 변경하는 위변조에 대해 알아봤는데요. 오늘 내용은 단순한 메모리 값 변경이 아닌 메모리 해킹에 대해 알아보겠습니다. 참고로, 메모리 위변조나 메모리 해킹은 문제가 될 수 있으니 재미로만 테스트 해보세요. 요즘은 대부분 메모리 주소의 값이 위변조 되거나 어셈블리가 바뀌면 알아채는 코드가 심어져 있습니다. 그래서, 바로 검출이 될수도 있습니다. 그래서, 사용에 신중을 기해야 합니다. 가능하면 간단한 프로그램에 테스트 용도로만 사용하세요^^

     

    치트엔진(Cheat Engine)을 실행하고, 학습용 튜토리얼을 실행합니다. 이 내용은 튜토리얼의 스텝 5입니다. 스텝 4까지 Skip을 눌러서 건너뛰고, 스텝 5부터 시작하면 됩니다. 튜토리얼 1부터 4까지 학습하려면 아래 글들을 참고하시면 됩니다.

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

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

     

    스텝 5의 내용은 아래와 같습니다. 아래 그림에서 Change value 버튼을 클릭하더라도 값이 변경되지 않도록 해야 합니다. 기존에는 메모리 주소에 저장되어 있는 변수 값을 알아내거나 변경하는 방법이었습니다. 하지만, 이번에는 버튼 클릭시 동작을 무효화해야 합니다.

    a30HZ92.jpg

     

    5단계: 코드 찾기(PW=888899)
    변경 사항이 있을 때, 게임을 다시 시작할 때, 심지어 플레이하는 동안에도 값의 위치가 저장되는 경우가 있습니다. 이 경우 두 가지를 사용하여 여전히 작동하는 테이블을 만들 수 있습니다.
    이번 단계에서는 Code Finder 기능을 사용하는 방법을 설명하겠습니다.
    
    여기에 있는 값은 튜토리얼을 시작할 때마다 다른 위치에 있으므로 주소 목록의 일반적인 항목은 작동하지 않습니다.
    먼저 주소를 찾아보세요. (이 시점까지 왔으니 어떻게 해야 하는지 아시리라 믿습니다.)
    주소를 찾았으면 치트 엔진에서 주소를 마우스 오른쪽 버튼으로 클릭하고 "이 주소에 쓴 내용 찾기"를 선택하세요. 빈 목록이 표시된 창이 나타납니다.
    그런 다음 이 튜토리얼의 값 변경 버튼을 클릭하고 치트 엔진으로 돌아갑니다. 모든 것이 제대로 되었다면 이제 거기에 어셈블러 코드가 있는 주소가 있을 것입니다.
    아무 작업도 수행하지 않는 코드로 바꾸려면 해당 항목을 클릭하고 바꾸기 옵션을 선택하세요. 또한 고급 옵션 창의 코드 목록에 코드 주소가 추가됩니다. (테이블을 저장하면 저장됩니다.)
    
    중지를 클릭하면 게임이 다시 정상적으로 실행되기 시작하고, 닫기를 클릭하여 창을 닫습니다.
    이제 값 변경을 클릭하고 모든 것이 올바르게 진행되면 다음 버튼이 활성화됩니다.
    
    참고: 충분히 빠른 속도로 주소를 고정하는 경우 어쨌든 Next가 표시될 수 있습니다.

     

    우선, 메모리 주소를 알아내야 합니다. 앞서 배운대로 메모리 주소를 알아봅시다. 100을 입력하고, 스캔하세요. 61개가 검색되었습니다.

    dR8bDbz.jpg

     

     

    튜토리얼에서 Change value를 클릭하세요. 값이 597로 변경되었네요.

    Q5omjZH.jpg

     

     

    597을 입력하고 Next Scan을 클릭하세요. 하나의 메모리 주소를 찾았습니다. 더블 클릭해서 하단에 추가하세요.

    w9emAaG.jpg

     

     

    치트엔진은 어셈블리코드를 볼 수 있게 해주는 기능이 포함되어 있습니다. 아래 저장된 메모리 주소값을 우클릭하고 Find out what writes to this addrss를 클릭하세요. 아래 그림과 같이 The following opcodes write to <메모리 주소> 창이 표시됩니다. 처음에는 내용이 아무것도 표시되지 않습니다.

    JlDLMiI.jpg

     

     

    튜토리얼에서 Change value를 클릭하세요. 그러면 어셈블리 코드가 기록됩니다. mov [eax],edx와 같은 어셈블리 코드가 표시됩니다. mov는 변수 값을 이동한다는 뜻입니다. 뒤의 edx 값을 앞의 eax로 이동한다는 의미인데요. Change value를 누를 때 랜덤하게 처리되는 어떤 값(edx)를 화면에 보여지는 eax에 넣는다는 의미로 해석하시면 됩니다.

    z6MFlCG.jpg

     

     

    메모리 주소를 클릭하면 우측의 버튼들이 활성화됩니다. Replace를 눌러서 어셈블리 코드를 변경해줍니다. 기존 코드를 nop으로 변경하세요.

    5TelwGN.jpg

     

     

    nop 명령어는 아무것도 처리하지 않고 넘어가도록 의도적으로 지정할 때 사용합니다. CPU가 아무런 처리도 하지 않는데 코드가 있다는건 불필요한 자원을 낭비한다는 뜻이 되기도 합니다. 그래서, 가능하면 사용하지 않는게 좋은데요. 위에서는 코드를 삭제해도 동일한 결과를 확인할 수 있습니다. 하지만, 의도적으로 사용하는 경우들도 존재합니다. 저도 어셈블리어에 대해 잘 모르기 때문에 자세하게는 알 수 없지만, 파이프라인에서 루틴을 이동할 때 이동한 위치 아래로 실행되는 문제를 해결할 때 종종 사용합니다.

     

    이제 다시 Change value 버튼을 클릭 해보세요. 값이 변경되지 않는걸 확인할 수 있습니다. 다음에는 좀 더 복잡한 내용인 스텝 6을 학습 해보도록 하겠습니다. 아마도, 글의 내용이 많이 길어질듯 한데요. 여러가지 다른 응용프로그램을 대상으로 연습 해보세요. 이것저것 메모리 값을 알아내는 재미가 있을겁니다. 그러고보니 이제부터는 엔지엠 매크로를 이용해서 뭔가 할 수 있는게 없네요^^;

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.