NGMsoftware

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

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

    팁 앤 테크

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

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

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

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오늘은 치트엔진을 이용해서 프로그램의 코드를 변경하는 방법에 대해 알아보겠습니다. 스텝 7부터 시작하도록 해야겠죠?

    ftnxNID.jpg

     

    7단계: 코드 삽입: (PW=013370)
    코드 주입은 코드 조각을 대상 프로세스에 주입한 다음, 자신이 작성한 코드를 거치도록 코드 실행 경로를 다시 지정하는 기술입니다.
    
    이 튜토리얼에는 체력 값과 클릭할 때마다 체력이 1씩 감소하는 버튼이 있습니다.
    당신의 임무는 코드 주입을 사용하여 버튼을 클릭할 때마다 체력이 2씩 증가하도록 하는 것입니다.
    
    주소를 찾는 것부터 시작한 다음 주소에 무엇을 쓰는지 찾으십시오.
    그런 다음 이를 감소시키는 코드를 찾았으면 디스어셈블러에서 해당 주소를 찾아 자동 어셈블러 창(Ctrl+A)을 엽니다.
    템플릿을 클릭한 다음 코드 삽입을 클릭하고 상태를 감소시키는 주소를 제공합니다(아직 올바르게 입력되지 않은 경우).
    그러면 코드에 사용할 수 있는 기본 자동 어셈블러 주입 프레임워크가 생성됩니다.
    
    코드 동굴에 메모리 블록을 할당하는 alloc에 주목하세요. 과거 Windows 2000 이전 시스템에서는 사람들이 메모리(게임에서 사용하지 않는 메모리 영역)에서 코드 동굴을 찾아야 했지만 운 좋게도 Windows 2000 이후로는 과거의 일이며 요즘은 XP의 SP2와 새 CPU의 NX 비트로 인해 사용하려고 하면 오류가 발생합니다.
    
    또한 newmem: 및 Originalcode: 줄과 "Place your code here"라는 텍스트도 확인하세요.
    짐작하셨듯이 여기에 체력을 2로 증가시키는 코드를 작성하세요.
    이 경우 유용한 어셈블러 명령어는 "ADD 명령어"입니다.
    
    다음은 몇 가지 예입니다.
    00901234의 주소를 9로 늘리려면 "ADD [00901234],9"를 입력하세요.
    ESP+4가 가리키는 주소를 9로 늘리려면 "ADD [ESP+4],9"를 입력하세요.
    이 경우 원래 코드와 동일한 내용을 괄호 사이에 사용하여 체력을 감소시켜야 합니다.
    
    알아채다:
    원래 코드 섹션에서 체력을 감소시키는 줄을 삭제하는 것이 좋습니다. 그렇지 않으면 체력을 3으로 늘려야 합니다(3으로 늘리면 원래 코드는 1로 감소하므로 최종 결과는 2로 증가). , 혼란스러워질 수 있습니다. 그러나 그것은 모두 당신과 당신의 프로그래밍에 달려 있습니다.
    
    고시 2:
    일부 게임에서는 원본 코드가 여러 명령으로 구성될 수 있으며 때로는 항상 그런 것은 아니지만 다른 위치의 코드가 점프 명령 끝으로 점프하여 알 수 없는 동작이 발생할 수도 있습니다. 그런 일이 발생하면 일반적으로 해당 명령어 근처를 살펴보고 점프를 확인하고 수정해야 합니다. 또는 코드 삽입을 수행하기 위해 다른 주소를 사용하도록 선택해야 할 수도 있습니다. 삽입된 코드 내부에서 변경할 주소를 알아낼 수만 있다면 말이죠.

     

    설명 내용을 잘 읽어보면 현재 Hit me를 클릭할 때마다 Health가 1씩 감소하는데, 코드를 변경해서 Hit me 버튼을 클릭할 때마다 Health가 2씩 증가하게 만들어야 합니다. 우선, 변수 값을 알아내야 하기 때문에 100을 입력해서 스캔하고, Hit me를 클릭하세요. 그리고, 99를 입력한 후 Next Scan을 눌러서 메모리 주소를 찾습니다.

    w0CNlVk.jpg

     

     

    찾은 메모리 주소를 더블 클릭하면 하단의 테이블에 추가됩니다. 메모리 주소에서 우클릭하고, Find out what writes to this address를 클릭하세요.

    mHSQfqm.jpg

     

     

    Hit me 버튼을 한번 더 클릭하세요. 그러면 The follwing opcodes write to <메모리 주소>어셈블리 코드가 표시됩니다.

    BM4YWY8.jpg

     

     

    메모리 주소의 어셈블리 코드를 선택하고, Show disassembler 버튼을 클릭하세요. 그리고, 선택된 코드를 더블 클릭해서 수정해볼께요.

    xfpue7L.jpg

     

     

    Single-line assembler 코드를 확인할 수 있는데요. 어셈블리어에서 sub는 빼기를 말합니다. 그리고, add는 더하기인데요. 아래 코드는 메모리 포인터 크기가 2byte의 두배 크기인 4byte 주소 값을 뒤에 01만큼 빼라는 뜻입니다.

    zlmxNPH.jpg

     

     

    상식으로 bit는 제일 작은 데이터 단위로 0과 1을 저장할 수 있고, byte는 제일 작은 메모리 단위로 1byte는 8bit입니다. 따라서 1byte에는 0과 1을 8개 저장할 수 있습니다. word는 2개의 byte로 중국어나 한국어와 같은 문자를 나타낼 때 사용합니다. 영어는 1byte로 처리됩니다. dowrd는 double + word로 문자를 담는 4byte 용량을 말합니다. dword를 설명하기 위해 컴퓨터 자료형에 대해서 잠깐 알아봤습니다.

     

    어셈블리어에서 sub를 add로 바꾸고, 더할 값인 01을 02로 변경하면 문제를 해결할 수 있습니다. OK를 누르고, 창들을 모두 닫으세요.

    MCoNDkC.jpg

     

     

    튜토리얼에서 Hit me를 클릭 해보세요. 2씩 증가하고, Next 버튼이 활성화됩니다. 어셈블리어를 다시 열어보면 코드가 변경된걸 확인할 수 있습니다.

    CxaA2i5.jpg

     

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.