NGMsoftware

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

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

    팁 앤 테크

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

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

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

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오늘은 좀 복잡한 내용인데요. 멀티 레벨 포인터 주소를 찾아서 메모리 값을 고정시키는 방법을 학습할겁니다. 치트엔진 튜토리얼의 스텝 6 내용과 비슷하지만, 업그레이드 버전이라고 생각하시면 될거 같습니다. 학습하게 될 내용은 생각보다 복잡합니다. 천천히 따라오셔야 제대로 테스트할 수 있을거 같고요. 내용을 이해하기 위해서 여러가지 테스트를 해보면서 결과를 확인해야 합니다^^

     

    치트엔진을 실행하고, 튜토리얼 8번까지 진행하세요.

    GKRwyR9.png

     

    8단계: 다단계 포인터: (PW=525927)
    이 단계에서는 다중 레벨 포인터를 사용하는 방법을 설명합니다.
    6단계에서는 첫 번째 주소가 이미 실제 기본 주소인 간단한 레벨 1 포인터를 사용했습니다.
    그러나 이 단계는 레벨 4 포인터입니다. 여기에는 상태에 대한 포인터에 대한 포인터에 대한 포인터에 대한 포인터가 있습니다.
    
    기본적으로 6단계와 동일한 작업을 수행합니다. 값에 액세스하는 항목을 찾고, 명령어를 살펴보고, 기본 포인터 값이 무엇인지, 오프셋이 무엇인지 확인한 후 이미 해당 값을 채우거나 적어 둡니다. 하지만 이 경우에는 찾을 주소도 포인터가 됩니다. 값에서 했던 것과 똑같은 방식으로 해당 포인터에 대한 포인터를 찾으면 됩니다. 해당 주소에서 찾은 액세스가 무엇인지 알아보고, 어셈블러 명령어를 살펴보고, 가능한 명령어와 오프셋을 기록하고 이를 사용하세요.
    그리고 더 이상 얻을 수 없을 때까지 계속합니다(일반적으로 기본 주소가 고정 주소인 경우 녹색으로 표시됩니다.)
    
    튜토리얼에서 상태에 액세스할 수 있도록 하려면 값 변경을 클릭하세요.
    포인터 경로를 찾았다고 생각되면 등록 변경을 클릭하세요. 그러면 포인터와 값이 변경되며 3초 동안 주소를 5000으로 고정해야 합니다.
    
    추가: 이 문제는 자동 어셈블러 스크립트나 포인터 스캐너를 사용하여 해결할 수도 있습니다.
    Extra2: 어떤 상황에서는 CE의 Codefinder 설정을 액세스 위반으로 변경하는 것이 좋습니다.
    디버그 레지스터는 변경된 후에 이를 표시하므로 mov eax,[eax]와 같은 명령이 발생하여 포인터 값을 찾기가 어렵습니다.
    
    Extra3: 아직도 읽고 있다면. 어셈블러 명령어를 보면 포인터가 동일한 코드 블록에서 읽고 채워지는 것을 알 수 있습니다(동일한 루틴, 어셈블러를 알고 있다면 루틴 시작까지 찾아보세요). 항상 그런 것은 아니지만 디버깅이 어려울 때 포인터를 찾는 데 정말 유용할 수 있습니다.

     

    생각보다 자세하게 설명을 해주고 있습니다. Step 6에서 배웠던 내용을 4단계까지 수행하면 실제 값의 메모리 주소를 찾을 수 있고, 포인터 주소를 고정시켜서 값을 입력할 수 있습니다. 여기서도 해당 값을 5000으로 고정시키면 다음 스텝으로 넘어갈 수 있습니다. 스텝 6과 비슷한 내용이라서 몇가지 부부만 잘 확인하면 금방 처리할 수 있을듯 합니다. 우선 첫번째 값 주소를 찾아볼까요? 튜토리얼 창에 표시된 숫자 값(3518)을 입력하고, First Scan을 클릭하세요. 좌측에 검색된 메모리 주소를 더블 클릭해서 하단의 메모리 리스트 테이블에 추가하세요.

    kZKqMM0.png

     

     

    메모리 주소에서 우클릭 후 Find out what writes to this address를 클릭하세요.

    3PJqFh0.png

     

     

    튜토리얼 창에서 ①Change value를 클릭하면 ②어셈블리어가 표시됩니다.

    MIkpaBg.png

     

     

    esi에 + 18을 한 메모리 주소값을 사용한다는걸 확인할 수 있습니다. 우선, ESI 값을 복사합니다.

    ZUMWZG3.png

     

     

    Hex에 체크하고, 복사한 메모리 주소 값을 Value에 붙여넣기한 후 First Scan을 클릭하세요. 찾은 메모리 주소를 더블 클릭하여 메모리 주소 테이블에 추가하세요.

    sIydmFH.png

     

     

    위에서 메모리 주소에서 18을 더해야 하기 때문에 추가한 메모리 주소를 더블 클릭해서 포인터 값에 18을 더해주세요.

    4MnMhV2.png

     

     

    메모리 주소가 포인터로 변경되었습니다. 포인터 주소에서 우클릭하고 Find out what accesses this address를 클릭하세요.

    QiRYkFH.png

     

     

    튜토리얼에서 Change value를 클릭하고, cmp dword ptr [esi]가 0과 같은지 비교하는 부분의 ESI의 아이디를 복사하세요.

    PO91Kd7.png

     

     

    다시 치트엔진의 Value에 복사한 값을 붙여넣기 하고, First Scan 해보세요. 음~ 이번에는 여러개의 메모리 주소가 나오네요.

    OgkvNfV.png

     

     

    어떤 메모리 주소를 사용하는지 검증을 해야 합니다. 하나씩 추가하면서 Change value를 눌러서 값이 바뀌는지 확인해야 합니다. 몇번 Change value를 클릭했더니 하나만 검색되는군요. 만약, 계속해서 여러개의 메모리 주소가 검색되면 하단의 메모리 주소 테이블에 추가하고, 변경해보세요. 변화가 있어야 합니다.

    HiqA1N1.png

     

     

    첫번째 메모리 주소에 18을 더하고, 두번째는 0입니다.

    pFYMWOb.png

     

     

    추가된 포인터 이름이 전부 동일해서 보기가 안좋으니 아래와 같이 Description을 더블 클릭해서 이름을 설정하세요.

    6tUArIX.png

     

     

    위와 동일하게 메모리 주소에서 우클릭 후 Find out what accesses this address를 클릭하세요. 그리고, 어셈블리 내용을 확인하고 ESI 메모리 주소를 복사합니다.

    MvzEtfo.png

     

     

    검색된 메모리 주소를 더블 클릭해서 테이블에 추가하세요.

    YFGzrT2.png

     

     

    메모리 주소를 더블 클릭한 후 아래와 같이 포인터 주소에 오프셋을 추가하세요.

    jfCSh8U.png

     

     

    또다시 메모리 주소에서 우클릭하고, Find out what accesses this address를 클릭하세요. 그리고, 어셈블리 내용을 확인하고 ESI 메모리 주소를 복사합니다. 

    3ljGFev.png

     

     

    복사한 메모리 주소 값을 치트엔진 Value에 붙여넣기하고, First Scan을 눌러보세요. 아래와 같이 녹색 포인터를 찾았습니다.

    FdPP4MT.png

     

     

    처음 18 오프셋을 주고, 두번째는 0 그리고, 세번째는 14 오프셋입니다. 마지막은 0c입니다.

    8XSi12h.png

     

     

    이제 실제 포인터를 찾았네요. 위 도움말에서 설명하듯이 다중 레벨 포인터에서 마지막 포인터의 주소를 찾았습니다.

    bqvch2G.png

     

     

    Pointer의 Active를 체크해서 고정시키고, Value 값에 5000을 입력해보세요. 값이 0005000으로 바뀌는데요. 정수 값이 아닌듯 합니다. 16진수 값으로 입력해야 하나봐요.

    Drl2LsT.png

     

     

    치트엔진의 Hex 체크를 끄고, Value에 5000을 입력하세요. 그리고, Hex를 다시 체크하면 값을 16진수로 변환 해줍니다.

    R33z2FD.png

     

     

    5000의 16진수 값을 포인터의 값에 넣어주세요.

    sZJGKl1.png

     

     

    튜토리얼에서 Change Pointer를 클릭하면 Next 버튼이 활성화 됩니다.

    NveWn82.png

     

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.