- 메모리에는 바이트 단위로 그 위치를 식별할 수 있는 물리적인 주소값이 있다. 주소값은 0번지부터 차례로 부여된다. 만약 메모리의 용량이 64키로바이트라면 주소값은 0번지부터 65535번지까지 존재할 것이다. (1kbyte = 1024byte ∴ 64kbyte = 65536byte) 변수를 선언하면 그 자료형의 크기만큼 메모리에 연속된 바이트의 기억공간이 할당되고 자동으로 주소값을 가지게 된다. 예를 들어, Int 형 변수를 선언하면 메모리에 4바이트가 할당되고, 그 시작 주소값이 100번지라면 100번지부터 103번지까지의 주소값을 갖게 될 것이다. 이 때 시작 주소값 100번지를 포인터라고 한다. 프로그램에서 변수명은 알 수 있지만 그 변수가 실제 메모리의 몇 번지에 할당되는지 알 수 없다. 따라서 포인터를 사용하기 위해서는 먼저 그 주소값을 알아 내는 과정이 필요하다. 이 포인터에는 아주 특별한 정보가 숨겨져 있는데 바로 자신이 어떤 자료형으로부터 만들어졌는지에 대한 정보를 가지고 있다는 것이다. 포인터가 특정 자료형에 대한 정보를 가지고 있다는 것을 나타낼 때 간단히 "가리킨다"는 표현을 사용한다. 즉, 포인터의 값 자체는 메모리에서 1바이트의 주소값이지만 연속된 바이트를 대표하는 의미를 가지는 것이다. (-뇌를 자극하는 C 프로그래밍/한빛미디어)
이전 단계에서 코드 찾기를 사용하여 변화하는 위치를 처리하는 방법을 설명했습니다. 그러나 그 방법만으로 원하는 값을 설정하기 위한 주소를 찾기가 어렵습니다.
그래서 포인터가 있는 이유입니다.
Step 6 튜토리얼 창 맨 아래에 두 개의 단추가 있을 겁니다. 하나는 Value(값)를 변경하고 다른 하나는 Value(값)와 Pointer(포인터, 값의 위치) 둘 모두를 변경합니다.
이 단계에서 당신은 어셈블러를 알 필요는 없지만, 알고있다면 많은 도움이 될 것입니다.
먼저 값의 주소를 찾으십시오. 발견했다면 해당 주소를 더블클릭하여 주소리스트에 추가 시키고 또 다시 해당 주소를 마우스 오른쪽 클릭하여 Find out what accesses this address(이 주소에 접근하는 것이 무엇인지를 알아내라) 기능을 눌러 사용하십시오. 주소를 클릭한다음 단축키를 사용해도 좋습니다.
Change value(값을 변경) 버튼을 클릭하면 방금 열은 창 목록에 항목이 나타납니다. 일단 4개중 첫번째 해당하는 항목을 더블클릭하십시오.또는 항목을 한 번 누르고 More information(추가 정보)를 클릭해도 됩니다.
(4개의 명령어가 떴습니다. 이는 값에 변화를 주었을 때 관여하는 명령어들이란 얘기입니다. 대충 어떤 명령인지 해석해보면 대괄호는 포인터라는 뜻이고 mov eax, [rax]는 [rax]가 가르키는 곳의 값을 eax에 저장해라 라는 뜻입니다.)
그렇다면 새 창 즉 Extra info 창이 열리고 명령이 실행될 때 어떤 일이 발생했는지에 대한 자세한 정보가 함께 표시됩니다.
(1번 문구에 "아마도 포인터 주소가 00000184 일 것이다" 라고 말하고 있습니다. 이 주소를 기억하거나 대괄호 즉 빨간색으로 칠해진 '[ ]' 사이의 문구와 상응하는 Hex 주소값을 아래에서 찾을 수 있고 창을 띄운 채로 적어도 됩니다. 이 주소는 저마다 다르니 자신이 찾은 주소를 알아 두셔야 합니다.)
어셈블러 명령어에서'['와']'사이에 아무것도 없는 경우에는 목록에 있는 다른 항목을 사용하십시오. 만약 그렇게 한다면, 자기가 생각하는 당신이 필요한 포인터의 값을 보여줄 겁니다. (그러니까 대괄호 안이 비어있으면 다른 항목을 이용해라 이 말입니다.)
주 치트엔진 창으로 돌아간 다음 기억해둔 Hex(16진수, Hexadecimal) 주소값을 입력하고 4바이트로 스캔하십시오.
스캔이 완료되면 1개 또는 수 백 개의 주소를 반환할 수도 있습니다. 당신이 필요한 대부분의 시간은 가장 작은 주소가 될 것입니다.
방금 스캔하여 찾아진 주소를 포인터 주소 입력란에 입력하여 OK(확인)버튼을 누르면 하단 주소목록에 추가됩니다. 모든 것이 정상적으로 행해졌다면 추가된 목록의 주소가 P->xxxxx로 표시되고, xxxxx는 검색한 값의 주소가 된다. 만약 그게 틀렸다면, 당신이 뭔가 잘못했다는 겁니다.
그게 아니고 Value 값이 ?? 으로 나온다면 그 포인터는 우리가 원하는 것이 아니니 위에서 찾은 4개의 어셈블리 명령어중 첫번째를 제외한 나머지 3개도 똑같이 작업해 튜토리얼의 현재값과 비교하여 같은 값이 떴다면 성공이라고 할 수 있습니다.
어셈블러 명령어 끝에 계산식(예: [esi+12])이 있는 경우 오프셋 입력란에 값을 입력하십시오. 그게 아니라면 0으로 그냥 두십시오.
Hex(16진수) 계산을 위해 윈도우 계산기에서 프로그래머용으로 바꾼 뒤 Hex로 계산해주면 편하다.
여기까지 잘 따라왔다면 포인터를 이용하여
에서
으로
값을 변경하고
Freeze(여기서는 Active에 체크)
하십시오.
그런 다음 튜토리얼 Step 6 창에서 Change pointer(포인터 변경)를 클릭하고 모든 작업이 완료됐다면 Next(다음)이라는 버튼이 활성화될 겁니다.
추가:
그리고 당신은 또한 포인터 스캐너 기능을 사용하여 이 주소에 대한 포인터를 찾을 수 있다는 걸 알아두시라!
Step 6: Pointers
In the previous step I explained how to use the Code finder to handle changing locations. But that method alone makes it difficult to find the address to set the values you want.
That's why there are pointers:
At the bottom you'll find 2 buttons. One will change the value, and the other changes the value AND the location of the value.
For this step you don't really need to know assembler, but it helps a lot if you do.
First find the address of the value. When you've found it use the function to find out what accesses this address.
Change the value again, and a item will show in the list. Double click that item. (or select and click on more info) and a new window will open with detailed information on what happened when the instruction ran.
If the assembler instruction doesn't have anything between a '[' and ']' then use another item in the list.
If it does it will say what it think will be the value of the pointer you need.
Go back to the main cheat engine window (you can keep this extra info window open if you want, but if you close it, remember what is between the [ and ] ) and do a 4 byte scan in hexadecimal for the value the extra info told you.
When done scanning it may return 1 or a few hundred addresses. Most of the time the address you need will be the smallest one. Now click on manually add and select the pointer checkbox.
The window will change and allow you to type in the address of a pointer and a offset.
Fill in as address the address you just found.
If the assembler instruction has a calculation (e.g: [esi+12]) at the end then type the value in that's at the end. else leave it 0. If it was a more complicated instruction look at the calculation.
example of a more complicated instruction:
[EAX*2+EDX+00000310] eax=4C and edx=00801234.
In this case EDX would be the value the pointer has, and EAX*2+00000310 the offset, so the offset you'd fill in would be 2*4C+00000310=3A8. (this is all in hex, use calc.exe from windows in scientific mode to calculate)
Back to the tutorial, click OK and the address will be added, If all went right the address will show P->xxxxxxx, with xxxxxxx being the address of the value you found. If thats not right, you've done something wrong.
Now, change the value using the pointer you added in 5000 and freeze it. Then click Change pointer, and if all went
right the next button will become visible.
extra:
And you could also use the pointer scanner to find the pointer to this address
오프셋이란, 두 번째 주소를 만들기 위해 기준이 되는 주소에 더해진 값을 의미한다. 예를 들어, 만약 아래의 수식에서 C가 100번지의 주소를 가리키고 있다면, 그 수식의 결과는 107번지를 의미할 것이다.
< C + 7 >
여기서 이 수식 내의 "7"이, 바로 오프셋이다. 오프셋을 이용하여 주소를 나타내는 것을 상대주소 지정방식이라고 부르는데, 그 이유는 결과 주소가 다른 지점의 상대적인 위치가 되기 때문이다. 오프셋을 다른 말로 "변위"라고도 부른다. (출처-http://www.terms.co.kr) [본문으로]
게임을 다시 시작할 때 또는 게임을 하는 동안 값이 저장된 위치가 변경되는 경우에 다음 2가지를 사용하여 여전히 게임에서 효과가 있는 치트테이블(Cheat Table - CT파일)을 만들 수 있습니다.
- 치트엔진을 통해 만든 치트테이블(Cheat Table - CT파일)파일 -
이 단계에서는 첫번째로 코드 파인더 기능을 사용하는 방법을 먼저 설명하겠습니다.
여기에 있는 값은 튜토리얼을 시작할 때마다 다른 위치에 있으므로 주소 목록의 일반적인 항목이 작동하지 않을 겁니다.
먼저 주소를 찾으십시오. (하나의 값이 나올 때까지 찾으십시오.)
주소를 찾았으면 Cheat Engine에서 주소를 마우스 오른쪽 버튼으로 누르고 "Find out what writes to this address(이 주소에 쓸 항목 찾기)"를 선택하십시오. 또는 주소를 마우스 왼쪽 클릭하고 Ctrl + F6을 누르십시오. 그러면 빈 목록의 창이 뜰 것입니다.
("이것은 치트 엔진의 디버거를 현재 프로세스에 연결합니다. 계속 하시겠습니까?", "YES")
그런 다음 이 튜토리얼에서 Change value 버튼을 클릭하고 Cheat Engine으로 돌아가십시오. 모든 것이 제대로 되었다면 assembler code(어셈블러 코드)가 있는 주소가 생성돼 있어야 합니다.
해당 코드를 누르고 아무 동작도 없는 코드로 바꾸려면 대체 옵션을 선택하십시오. 그것은 또한 고급 옵션 창의 코드 목록에 코드 주소를 추가할 것이다. (테이블을 저장하면 어느 것이 저장되는지)
중지 버튼을 클릭하여 게임이 다시 정상적으로 실행되고 창을 닫으십시오.
이제 Change value(값 변경)를 클릭하십시오. 모든 것이 제대로 된 경우 Next(다음) 버튼을 사용하십시오.
참고: 주소를 충분히 빠른 속도로 동결할 경우 다음에 어떤 식으로든 볼 수 있게 될 수 있음
Step 5: Code finder (PW=888899)
Sometimes the location something is stored at changes when you restart the game, or even while you're playing.. In that case you can use 2 things to still make a table that works.
In this step I'll try to describe how to use the Code Finder function.
The value down here will be at a different location each time you start the tutorial, so a normal entry in the address list wouldn't work.
First try to find the address. (you've got to this point so I assume you know how to)
When you've found the address, right-click the address in Cheat Engine and choose "Find out what writes to this address". A window will pop up with an empty list.
Then click on the Change value button in this tutorial, and go back to Cheat Engine. If everything went right there should be an address with assembler code there now.
Click it and choose the replace option to replace it with code that does nothing. That will also add the code address to the code list in the advanced options window. (Which gets saved if you save your table)
Click on stop, so the game will start running normal again, and close to close the window.
Now, click on Change value, and if everything went right the Next button should become enabled.
Note: When you're freezing the address with a high enough speed it may happen that next becomes visible anyhow
우선 첫째로 New Scan(새 스캔)을 해야하기 때문에 스캔을 시작하려면 먼저 New Scan(새 스캔)을 클릭해야 합니다. (당신은 이 단계가 이해하기 쉬울 거라고 생각할 수도 있지만, 얼마나 많은 사람이 그 단계에서 해메고 있는지 놀랄 것이다) 이 단계를 다시 설명하지 않을 테니 명심하십시오. 이제 New Scan(새 스캔)을 시작했으니 계속해 봅시다.
이전 테스트에서는 초기 값을 이미 알고 있었으므로 스캔 유형으로 정확한 값을 선택해서 스캔할 수 있었겠지만, 지금은 시작 값을 모르는 상태입니다.
우리는 그 값이 0에서 500 사이라는 것만 압니다. 그리고 'Hit me(날 때리시오)'를 클릭할 때마다 당신은 Health를 잃습니다. 매번 'Hit me' 버튼을 누를 때마다 손실되는 양은 상태 표시줄(초록색) 위에 표시됩니다.
다시 한번 그 값을 찾는 몇 가지 다른 방법이 있습니다. (decreased value by ... : ~까지 감소한 값) 하지만 가장 쉬운 부분만 설명하겠습니다.
바로 "Unknown initial value(알 수 없는 초기 값)"과"Decreased Value(감소된 값)"
현재 값이 무엇인지 모르기 때문에 정확한 값은 아무런 도움이 되지 않으므로 'Unknown initial value(알 수 없는 초기 값)'으로 맞추고, 값 유형은 4바이트로 해줍니다(대부분의 Windows 앱은 4바이트를 사용). 'First Scan'을 클릭하고 스캔이 완료될 때까지 기다리십시오.
완료되면 'Hit me(날 때리시오)' 버튼을 클릭하십시오. 당신은 'Health'를 잃을 것입니다. (몇 초 동안 감소량이 뜨고 사라지지만 별 상관없습니다. 즉 사라질 때까지 기다릴 필요가 없습니다.)
이제 Cheat Engine으로 이동하여 'Decreased Value(감소된 값)'를 선택하고 'Next Scan'을 클릭하십시오
스캔이 완료되면 다시 'Hit me(날 때리시오)' 버튼을 누르고 왼쪽 목록에 몇 개만 찾을 때까지 위의 내용을 반복하십시오.
우리는 값이 0에서 500 사이라는 것을 알고 있으니, 우리가 필요로 하는 주소에 가장 적합한 것을 골라 목록에 추가하십시오.
이제 'Health' 값을 5000으로 바꿔서 다음 단계로 진행하십시오.
Step 3: Unknown initial value (PW=419482)
Ok, seeing that you've figured out how to find a value using exact value let's move on to the next step.
First things first though. Since you are doing a new scan, you have to click on New Scan first, to start a new scan. (You may think this is straighforward, but you'd be surprised how many people get stuck on that step) I won't be explaining this step again, so keep this in mind
Now that you've started a new scan, let's continue
In the previous test we knew the initial value so we could do a exact value, but now we have a status bar where we don't know the starting value.
We only know that the value is between 0 and 500. And each time you click 'hit me' you lose some health. The amount you lose each time is shown above the status bar.
Again there are several different ways to find the value. (like doing a decreased value by... scan), but I'll only explain the easiest. "Unknown initial value", and decreased value.
Because you don't know the value it is right now, a exact value wont do any good, so choose as scantype 'Unknown initial value', again, the value type is 4-bytes. (most windows apps use 4-bytes)click first scan and wait till it's done.
When it is done click 'hit me'. You'll lose some of your health. (the amount you lost shows for a few seconds and then disappears, but you don't need that)
Now go to Cheat Engine, and choose 'Decreased Value' and click 'Next Scan'
When that scan is done, click hit me again, and repeat the above till you only find a few.
We know the value is between 0 and 500, so pick the one that is most likely the address we need, and add it to the list.
Now change the health to 5000, to proceed to the next step.
이제 치트 엔진 튜토리얼의 다음 단계로 넘어갔다면 Step 2 창 하단에 Health : xxx 라는 텍스트가 있을겁니다.
이 때 'Hit me'를 클릭 할 때마다 Health가 감소합니다.
다음 단계로 넘어가려면 이 값(Health)을 찾아 1000으로 변경해야합니다.
값(value)을 찾으려면 여러 가지 방법이 있지만 가장 쉬운 '정확한 값(Exact Value)'에 대해 알려 드리겠습니다.
먼저 값 유형을 적어도 2Byte(2바이트) 또는 4Byte(4바이트)로 설정하십시오. 1Byte(1바이트)도 물론 작동하겠지만, 당신이 주소를 찾아서 바꾸려는 문제를 쉽게 해결할 수 있을 겁니다. 8Byte(8바이트)는 주소 뒤의 바이트가 0이라면 아마 작동하겠지만 저라면 내기는 하지 않을 겁니다.
Single, Double 및 다른 유형의 값 스캔을 할 시에 값을 다른 방식으로 저장하기 때문에 제대로 작동하지 않습니다.
그런 다음, 값 검색창에 해당하는 값(Health)을 기입하십시오. 그리고 'First Scan'을 클릭하십시오.
잠시 후 스캔이 완료되고 결과가 왼쪽의 목록에 표시됩니다.
주소가 두 개 이상이고 주소가 확실하지 않은 경우 다시금 'Hit me'을 클릭하고 값 검색창에 새로운 값을 입력 한 다음 'Next Scan(다음 검사)'를 클릭하십시오.
당신이 그것을 확실히(이게 내가 찾던 값이구나! 알 때까지) 발견 할 때까지 이것을 반복하십시오.
이제 왼쪽 목록에서 주소를 두 번 클릭하십시오. 이렇게하면 하단의 목록에 주소 팝업이 나타나 현재 값을 보여줍니다.
하단의 목록에서 해당 주소의 Value(값)을 두 번 클릭 (또는 선택하고 Enter 키를 누름) 한 다음 값을 1000으로 변경합니다.
모든 것이 정상적으로 진행되면 다음 버튼이 활성화되고 다음 단계로 넘어갈 준비가 되었습니다.
주석
스캔하는 동안 잘못 수행 한 경우 "새 스캔(New Scan)"을 클릭하고 스캔을 다시 반복하십시오. 또한 값을 가지고 놀고 'hit me'를 클릭하십시오.
Step 2: Exact Value scanning (PW=090453)
Now that you have opened the tutorial with Cheat Engine let's get on with the next step.
You can see at the bottom of this window is the text Health: xxx
Each time you click 'Hit me' your health gets decreased.
To get to the next step you have to find this value and change it to 1000
To find the value there are different ways, but I'll tell you about the easiest, 'Exact Value':
First make sure value type is set to at least 2-bytes or 4-bytes. 1-byte will also work, but you'll run into an easy to fix problem when you've found the address and want to change it. The 8-byte may perhaps works if the bytes after the address are 0, but I wouldn't take the bet.
Single, double, and the other scans just don't work, because they store the value in a different way.
When the value type is set correctly, make sure the scantype is set to 'Exact Value'
Then fill in the number your health is in the value box. And click 'First Scan'
After a while (if you have a extremely slow pc) the scan is done and the results are shown in the list on the left
If you find more than 1 address and you don't know for sure which address it is, click 'Hit me', fill in the new health value into the value box, and click 'Next Scan'
repeat this until you're sure you've found it. (that includes that there's only 1 address in the list.....)
Now double click the address in the list on the left. This makes the address pop-up in the list at the bottom, showing you the current value.
Double click the value, (or select it and press enter), and change the value to 1000.
If everything went ok the next button should become enabled, and you're ready for the next step.
Note:
If you did anything wrong while scanning, click "New Scan" and repeat the scanning again.
Also, try playing around with the value and click 'hit me'
This tutorial will teach you the basics of cheating in video games. It will also show you foundational aspects of using Cheat Engine (or CE for short). Follow the steps below to get started.
1: Open Cheat Engine if it currently isn't running.
2: Click on the "Open Process" icon (it's the top-left icon with the computer on it, below "File".).
3: With the Process List window now open, look for this tutorial's process in the list. It will look something like "00001F98-Tutorial-x86_64.exe" or "0000047C-Tutorial-i386.exe". (The first 8 numbers/letters will probably be different.)
4: Once you've found the process, click on it to select it, then click the "Open" button. (Don't worry about all the other buttons right now. You can learn about them later if you're interested.)
Congratulations! If you did everything correctly, the process window should be gone with Cheat Engine now attached to the tutorial (you will see the process name towards the top-center of CE).
Click the "Next" button below to continue, or fill in the password and click the "OK" button to proceed to that step.)
If you're having problems, simply head over to forum.cheatengine.org, then click on "Tutorials" to view beginner-friendly guides!