Computer/Crack2009. 5. 24. 22:14


드디어 마지막 step입니다. 마지막 단계인 만큼 알아야 할 것도 다른 step에 비해 조금 많습니다. 우선 c에 대해 조금 알아야 하는군요. 튜토리얼에서 필요한 코드가 주어지긴 하지만 이 코드를 이해 하려면 기본적인 c문법은 알고 있어야 합니다. c는 아래 링크에서 간단히 공부하고 오시기 바랍니다.

Win32 Api - C(문법) C(고급) C++(문법) C++(고급)

자, 그럼 마지막 단계를 풀어 보도록 하겠습니다. 이번에도 역시 Health값이 100으로 주어져 있고 'Hit me'버튼을 누를때마다 1씩 감소합니다. 우리가 해주어야 할 작업은 'Hit me'버튼을 클릭할때 시간에 따라 현재 시간의 초가 30초 이상이면 Health 값을 1000으로 , 미만이면 2000으로 바뀌게 하는 것입니다. 굉장히 어렵게 보이지만 그다지 어렵지 않으니 천천히 따라 오시기 바랍니다.

우선 위 링크에서 간단히 c문법을 공부하고 오셨을테니 튜토리얼에서 주어진 c코드를 잠시 살펴 보도록 하죠.

#include <time.h>

struct tm *timep;
time_t c;
c=time(0);

timep=localtime(&c);

if (timep->tm_sec>=30)
  *(int *)addresstochange=1000;
else
  *(int *)addresstochange=2000;


굉장히 짧은 코드입니다. 간단히 설명 드리자면 현재 시간을 구해서 30초 이상인지 비교후 30초 이상이면 addresstochange에 1000을, 미만이면 2000을 대입하는 코드입니다. 물론 addresstochange는 나중에 실제 주소로 바꿔야 겠지요.

그럼 시작해 보겠습니다. 우선 'Hit me'버튼을 클릭해 가며 Health의 주소를 찾은후 어떤 코드가 쓰기를 시도하는지 찾아보겠습니다.


00458eaa번지의 'ff 8b 18 03 00 00'코드 였군요. 'Show disassembler'버튼을 클릭해 'Memory Viewer'를 살펴 보죠.


조금 전 찾아 놓은 코드가 보이는 군요. 우리는 메뉴에서 'Tools - Script Engine'을 클릭합니다. 'Ctrl+Alt+A'를 눌러도 됩니다.



'Script engine'윈도우가 생성 되었습니다. 이 윈도우에 튜토리얼에서 주어진 코드를 입력해 줍니다. 물론 addresstochange는 Cheat Engine에 찾아놓은 Health의 주소로 바꿔 주어야 합니다. 주소값은 16진수 이므로 앞에 0x를 붙여야 겠죠? 제 컴퓨터 상에선 주소값이 009739B0으로 나왔기 때문에 0x009739B0으로 바꿔 주었습니다.


그럼 이제 메뉴에서 'Inject - inject into current process'를 클릭해 줍니다.


2번째 줄에 call명령이 포함된 'Auto assemble'윈도우가 생성 되었습니다. 이 명령어를 잘 기억해 두고 'Memory Viewer'윈도우로 돌아가 step 7에서 했던 것처럼 우리가 찾았던 1감소시키는 코드를 선택해 주고 'Tools - Auto Assemble'을 클릭해 'Auto assemble'윈도우가 생성되면 'Template-Code injection'을 클릭해서 아래 그림과 같은 template을 만들어 줍니다.


가독성을 위해 윈도우를 살짝 넓혀 보도록 하죠.


이제 이 template에서 1감소 시키는 originalcode를 삭제해 주겠습니다. 이 코드를 삭제 하지 않으면 Health값이 1000이 되어야 하는 상황에서 999가 되고 2000이 되어야 하는 상황에선 1999가 되어 버립니다. 그럼 3, 15, 16번째 줄을 삭제하고 newmem에는 우리가 만들었던 스크립트를 call하는 명령어를 입력해 주겠습니다. 기억 하시죠? 'call 011600CD'.


자 필요한 일을 모두 해 주었으므로 'Execute'버튼을 클릭해 코드를 'inject'하고 튜토리얼로 돌아가 'Hit me'버튼을 클릭해 보겠습니다.


Health가 2000으로 바뀌면서 'Next'버튼이 활성화 되었습니다. 성공이군요. 잠시 후에 다시 한번 'Hit me'버튼을 클릭해 보죠.


이번엔 1000으로 바뀌었습니다. 모든게 제대로 되었죠? 'Next'버튼을 클릭합니다.


모든 튜토리얼이 끝났습니다. 수고 하셨습니다.

 

'Computer > Crack' 카테고리의 다른 글

Cheat Engine - Searching Tip  (4) 2009.05.25
Cheat Engine - Step 8 : Multilevel pointers  (2) 2009.05.23
Cheat Engine - Step 7 : Code Injection  (4) 2009.05.22
Cheat Engine - Pointer(3D Pinball)  (0) 2009.05.22
Cheat Engine - Step 6 : Pointers  (3) 2009.05.21
Posted by J.sean
Computer/Crack2009. 5. 23. 21:25


step 8은 Multilevel pointers, 포인터의 포인터 찾기 입니다. 주어진 값은 4단계의 포인터에 의해 지시되고 있습니다. step 6를 완전히 이해 했다면 어렵지 않게 해결할 수 있을겁니다. 우선 문제를 해결하기 전에 'Settings'를 클릭해 설정을 약간 바꿔 주겠습니다.


Settings를 클릭하면 위와 같은 윈도우가 나타나는데 'General settings'에서 'Pointer adding:Append pointerline instead of insert'를 선택해 줍니다.

자, 그럼 문제를 풀어 보도록 하죠. 이번 튜토리얼은 step 6와 마찬가지로 'Change pointer'를 클릭해 변수의 주소가 바뀌었을 때도 값이 5000으로 고정 되어있도록 만들어 주는 것입니다. 그럼 Cheat Engine을 실행하고 튜토리얼을 오픈 합니다. 'Change value'버튼을 클릭하면 값이 바뀌므로 쉽게 주소를 찾을 수 있을 겁니다. 'Change pointer'버튼은 마지막에 쓰이므로 건드리지 않도록 합니다. 주소를 찾았다면 step 6에서 했던 것처럼 포인터를 찾아 리스트 박스에 옮겨 놓습니다.


값은 814로 바뀌었고 포인터의 주소는 00972F10, 오프셋은 18이었습니다. 00972FBC를 가리키는 포인터군요. 여기까진 step 6와 다를바 없습니다. 하지만 우리가 찾은 00972F10역시 다른 포인터에 의해 지시되고 있다는게 다른점 입니다. 베이스 주소는 녹색으로 표시되므로 녹색으로 된 주소를 찾을때까지 계속 같은 작업을 반복해 주면 됩니다.

그럼 우리가 찾아놓은 포인터를 지시하는 다른 포인터를 찾아 보도록 하겠습니다. 리스트 박스에 추가해 놓은 포인터 위에서 오른쪽 마우스 클릭하여 'Find out what accesses this address'를 선택해 주고 'Find out what accesses this pointer'를 클릭합니다.


다시 튜토리얼로 돌아가 'Change Value'버튼을 클릭하면 어떤 코드가 포인터에 접근하는지 찾아낼 수 있습니다.


0045981e번지에 있는 '8b 10'이라는 코드가 잡혔군요. 'More information'버튼을 클릭하여 더 자세한 정보를 확인 하도록 하죠.


우리가 찾아야 할 값은 00972F10이겠죠? Cheat Engine으로 돌아가 검색 하겠습니다.


00972EF8번지가 검색 되었습니다. 이 주소가 우리의 포인터의 포인터 주소입니다. 이 포인터를 리스트 박스에 추가해 주겠습니다. 포인터의 포인터를 추가 하는 작업은 처음 포인터를 추가할때와는 약간 다른 작업을 필요로 합니다. 하지만 별로 어렵지 않으니 천천히 따라 오시기 바랍니다.

우선 우리가 추가해 놓았던 'P->00972FBC'를 더블 클릭하겠습니다.


조금전 포인터를 추가 했던 윈도우가 다시 등장합니다. 이 윈도우에서 'Add pointer'버튼을 클릭합니다.


윈도우가 약간 길어지면서 새로운 포인터를 입력할 수 있는 에디트 박스가 추가 되었고 처음에 입력했던 주소가 사라져 버렸습니다. 하지만 오프셋 값은 그대로 남아 있군요. 이렇게 된 이유는 우리가 포인터의 포인터를 추가할 계획이기 때문입니다. 새로생긴 맨 아래의 'Address of pointer'에디트 박스에 우리가 조금전 찾아던 주소를 입력해 주면 모든 주소가 다시 자동으로 입력되고 오프셋값과 계산 됩니다. 그러므로 우리는 맨 마지막 에디트 박스에 정확한 주소와 오프셋 값만 다시 넣어주면 되는 것입니다.

그럼 우리가 조금전 새로 찾아 놓은 주소와 오프셋 값을 입력 하도록 하겠습니다.


자, 마지막 에디트 박스에 포인터 주소로 972EF8과 오프셋 0을 입력하니 나머지 주소가 자동으로 입력되고 결과적으로 00972FBC를 가리키는 포인터의 포인터라는게 확인 되었습니다. 'OK'버튼을 눌러 추가 하도록 합니다.


다시 Cheat Engine으로 돌아가게 되는데 아무것도 달라진게 없어 보입니다. 하지만 'P->00972FBC'를 더블 클릭하면 우리가 해 놓은 작업을 다시 볼 수 있습니다.

이제부터 같은 작업의 반복 입니다. 다시 'P->00972FBC'에 접근하는 코드를 찾아 포인터의 주소를 검색하고 같은 방법으로 포인터를 추가해 주는 것입니다. 베이스 주소인 녹색으로 표시되는 주소를 찾을때까지 진행시켜 보겠습니다.


드디어 마지막 베이스 주소를 찾았습니다. 그럼 추가해 줘야겠죠?


주소값으로 460C20, 오프셋값으로 C를 입력했습니다. 00972FBC를 정확히 지시하는군요. 'OK'버튼을 눌러 추가해 주고 'Value'를 5000으로 바꾼 후 freeze시키겠습니다.


튜토리얼이 원하는 대로 모두 해줬으므로 튜토리얼로 돌아가 'Change pointer'버튼을 눌러 확인해 보도록 하죠.


step 6와 마찬가지로 'You've got x seconds left to change the value to 5000'라는 메세지가 나오고 'Next'버튼이 활성화 되었습니다. 성공이군요.

'Next'버튼을 클릭해 마지막 step인 step 9으로 이동합니다.

'Computer > Crack' 카테고리의 다른 글

Cheat Engine - Searching Tip  (4) 2009.05.25
Cheat Engine - Step 9 : Injection++  (6) 2009.05.24
Cheat Engine - Step 7 : Code Injection  (4) 2009.05.22
Cheat Engine - Pointer(3D Pinball)  (0) 2009.05.22
Cheat Engine - Step 6 : Pointers  (3) 2009.05.21
Posted by J.sean
Computer/Crack2009. 5. 22. 20:34



step 7을 시작하면 'Health'값 100과 'Hit me'버튼 하나가 있습니다. 'Hit me'버튼을 클릭할때 마다 수치가 1씩 줄어들게 됩니다. 제목 그대로 code를 inject해서 'Hit me'버튼을 클릭할때 마다 수치가 2씩 증가 하도록 바꾸는 것이 이번 튜토리얼의 목표입니다.

그럼 간단히 Health값을 바꿔가며 Cheat Engine으로 Health값이 저장되어 있는 주소를 찾아 리스트 박스로 옮겨 놓고 어떤 코드가 그 주소에 쓰기를 시도 하는지 찾아 보도록 하겠습니다.


'ff 8b 10 03 00 00'이었군요. 오른쪽 중간쯤에 보면 'Decrement by 1'이라는 설명까지 자세히 나옵니다. 그럼 이제 이 코드가 있는 0045a063번지 주위를 자세히 살펴 보도록 하겠습니다. 'Show disassembler'버튼을 클릭합니다.


굉장히 복잡해 보이는 'Memory Viewer'윈도우가 생성 되었습니다. 우리가 해야할 일은 조금전 찾아놓은 주소에서 하는 작업을 다른 작업으로 바꾸는 것입니다. 다행히 이 일은 그다지 어렵지 않습니다. 우선 우리가 찾았던 주소인 '0045A063'을 한번 클릭해 주고 메뉴에서 'Tools - Auto Assemble'을 선택합니다. 'Ctrl+A'를 눌러도 됩니다.


그러면 아래와 같은 'Auto assemble'윈도우가 생성되는데 메뉴에서 'Template - Code injection'을 선택합니다.


아래 그림처럼 'Code inject template'윈도우가 생성되고 우리가 찾았던 주소값이 자동으로 입력되어 있습니다. 'OK'버튼을 클릭합니다.


다시 'Auto assemble'윈도우로 포커스가 넘어가고 아래 그림처럼 코드가 자동으로 입력되어 있습니다.


특히 이 부분은 다양한 방법으로 해결이 가능합니다. 하지만 저는 다른 코드는 건드리지 않는 가장 간단한 방법 한가지만 보여드리도록 하겠습니다. 각자 여러가지 방법을 시도해 보시기 바랍니다. 우선 코드의 가독성을 높이기 위해 윈도우를 확장 시켜 보죠.


이미 주석으로 간단한 설명이 잘 되어 있군요. 16번째 줄에 health값을 1감소 시키는 원래 코드가 있고 19번째 줄에 다시 원래 위치로 돌아가는 코드가 있습니다. 11번째 줄에 있는 'newmem:'아래 부터 우리가 코드를 입력해야 하는 부분입니다. 주석을 지울 필요는 없으니 13번째 줄부터 작성해 나가면 되겠군요.


13번째 줄에 'add [ebx+00000310], 3' 명령어를 입력했습니다. 15번째 줄부터 나오는 원래 코드에서 1을 감소 시키므로 우리는 3을 증가 시켜야 결과적으로 2가 증가 되겠죠.

자 필요한 일을 모두 해줬으므로 아래에 있는 'Execute'버튼을 클릭 하고 'Yes'버튼을 눌러 코드를 'inject'하겠습니다.


코드가 성공적으로 010B0000번지에 'inject'되었다는 메세지 박스 입니다. 010B0000번지로 가보면 우리가 입력한 내용을 볼 수 있습니다. 'OK'버튼을 클릭 합니다.

다시 'Memory Viewer'윈도우로 돌아가 보겠습니다.


우리가 찾았던 코드가 바뀌어 있는걸 볼 수 있습니다. 코드가 'jmp 010b0000'로 바뀌었으므로 프로그램이 이 부분에 도달하게 되면 010b0000로 건너 뛰어 우리가 입력한 코드를 실행하겠죠?

자 그럼 이제 다시 튜토리얼로 돌아가서 'Hit me'버튼을 클릭해 보겠습니다.


'Hit me'버튼을 클릭 할때마다 'Health'값이 2씩 증가하고 'Next'버튼이 활성화 되었습니다. 성공입니다.

'Next'버튼을 눌러 다음 step으로 이동합니다.

'Computer > Crack' 카테고리의 다른 글

Cheat Engine - Step 9 : Injection++  (6) 2009.05.24
Cheat Engine - Step 8 : Multilevel pointers  (2) 2009.05.23
Cheat Engine - Pointer(3D Pinball)  (0) 2009.05.22
Cheat Engine - Step 6 : Pointers  (3) 2009.05.21
Cheat Engine - Step 5 : Code finder  (0) 2009.05.19
Posted by J.sean