標題 新增找內文!

9GP-BP

#1 【攻略】CHEAT ENGINE教學程式翻譯暨攻略(新增5.3~5.4版的翻譯)

發表:2006-08-12 07:19:22看他的文開啟圖片

fatalfury(terry)

拉露薇娜之風 LV34 / / 盜賊
巴幣:27311
GP:192
經驗:

前言:這個作者寫的教學就像之前LITOHOW板友所說的一樣
   有許多地方是用了口語,及有文法及片語的錯誤
   故有些文句看起來實在不好懂什麼意思
   我盡力將之翻譯了出來
   若有錯誤還希望版友能指正一下
   教學程式共六篇,故這裡也分成六份文來PO
   以免PO到一篇中變成落落長…
-------------------------------------
[page1]
Welcome to the Cheat Engine Tutorial. (v2.5)
歡迎來到cheat engine的教學

This tutorial will try to explain the basics of cheating on games, and getting
you more familiar with Cheat Engine.
這個教學將試著解釋基本的遊戲修改,而且會讓你更熟悉cheat engine的使用

First open Cheat Engine if it hasn't been opened yet.
首先,如果你還沒執行cheat engine主程式的話,則先執行它

Then click on the 'open process' icon. (top left icon, with the computer on i
t)
然後按下"open process"圖示的按鈕(最左上方的小圖示,可以看到有一個電腦在上面)

When the process window is open find this tutorial. The process name is propa
bly 'tutorial.exe' unless you renamed me.
在選取process(處理程序)的視窗中選取這個教學,教學的名稱,除非你重新命名它,
否則通常是"tutorial.exe"

Select it, and click ok. Just ignore all the other buttons right now, but
experiment with them later if you feel like it.
選取它,並按下ok鈕,暫時不要管ok鈕外其它的按鈕是幹什麼的,不過如果你喜歡它
們,可以等一下再去實驗看看是做什麼的

When everything went right, the process window should be gone now and at th
e top of CE the processname is shown.
當以上步驟都做對時,選取process的視窗應該會消失,而且在CE(cheat engine)的程
式視窗上,最上方ce圖示旁會顯示選取的程序名稱

Now, click NEXT to continue to the next step. (Or fill in the password to
proceed to that particular step you want)
現在,按下next鈕繼續下一步(或填上密碼去處理你要練習的步驟)


最後編輯:2008-03-20 07:56:32 ◆ Origin: <219.91.76.xxx>

(公告說明) 自刪/檢舉留言

2GP-BP

#2 RE:【攻略】CHEAT ENGINE教學程式翻譯暨攻略

發表:2006-08-12 07:20:19看他的文開啟圖片

fatalfury(terry)

拉露薇娜之風 LV34 / / 盜賊
巴幣:27311
GP:192
經驗:

[page2]
Step 2: Exact Value scanning (PW=090453)
Now that you have opened the tutorial with Cheat Engine lets get on with the
next step
步驟2:高階分析(密碼=090453)
現在你已經在這一步執行了這個教學程式和ce主程式了

You see at the bottom of this window the text Health: xxx
Each time you click 'Hit me' your health gets decreased.
你可以在視窗的底層看到一行文字"health:xxx",其中xxx是數字,然後在另一時間請按
下"hit me"按鈕,你的health值將會減少

To get to the next step you have to find this value and change it to 1000
要到下一步,你必須找到這個數值的位址並改變它成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 a (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 dont work, because they store the
value in a different way.
要找到數值的位址有很多方法,但是我將告訴你最簡單的的,叫"EXACT VALUE"(高階
分析):
首先確定數值型態設定為2bytes或4bytes,1byte也行,但當你已經找到數值位址且要改
改變它時將會發生一個(容易修復的)的問題
這個問題是
如果你數值型態選得是8 bytes,如果它之後的位址值是0也許可以使修改後的位址生
效,但這裡我們不作這個賭注
使用single(這裡指單精數,也就是普通的浮點數),double和其它的數值型態是不
可能使這項操作成功的,因為它們是用不同的方式儲存數值

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 extremly slow pc) the scan
is done and the results are shown in the list on the left(if the number of
addresses it found are less than the number below that list)
當數值型態設定正確後,請確定掃描方式是設定為"Exact Value",然後在數值欄填上
你的health值。
接者在這時候並按下"First Scan"(搜尋的時間因電腦新舊而異,若你有一台舊電腦將
會變些)來搜尋記憶體,當搜尋結束時會將結果顯示列表在左側
(如果找到的位址數量比搜尋結果欄的數字還少的話)

If you find more than 1 address and you dont know for sure wich address it
is, click 'Hit me', fill in the new health value into the value box,
and click 'Next Scan'repeat this untill you're sure you've found it.
(that includes that there's only 1 address in the list.....)
如果你找到超過一筆以上的位址且不確定哪一個位址才是正確的,則按下"Hit me",
填入新的數值,且再按下"Next Scan"重覆搜尋直到你能確定你找到了正確位址
("能確定"這件事包含只有一個位址在位址列表中的情況…)

Now double click the address in the list on the left. This makes the addres
s 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.
現在雙按在左邊的位址列表中你確定的位址。
這會使位址出現在最底層的表格區,並顯示出目前的數值。
雙按這個顯示出來的數值(或選擇這數值後按下ENTER),並改變數值成1000

If everything went ok the next button should become enabled, and you're
ready for the next step.
如果一切步驟都順利進行,則"NEXT"按鈕會可以動作(可被按下),你可以準備進行下
一個教學步驟了。

Note:
If you did anything wrong while scanning, click "New Scan" and repeat the
scanning again.
Also, try playing arround with the value and click 'hit me'
注意:
如果你在掃描中做了任何錯誤步驟,按下"New Scan"並重新掃描一次
或是,試著再改變一次數值並按下"hit me"

最後編輯:2006-08-12 07:20:19 ◆ Origin: <219.91.76.xxx>

(公告說明) 自刪/檢舉留言

1GP-BP

#3 RE:【攻略】CHEAT ENGINE教學程式翻譯暨攻略

發表:2006-08-12 07:21:02看他的文開啟圖片

fatalfury(terry)

拉露薇娜之風 LV34 / / 盜賊
巴幣:27311
GP:192
經驗:

[page3]
Step 3:Unknown intial 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.
步驟3:未知整數(密碼=419482)
好了,看樣子你已經了解了如何用數值找到這個值(的位址)
讓我們來到下一個步驟吧。

In the previous test we knew the initial value so we could do a exact value,
but now we have a statusbar where we dont 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 ammount you lose
each time is shown above the statusbar.
在之前的試驗中我們知道一個整數所以才能輸入一個精確的數值來搜尋,但現在在我們
手上的是一個狀態條棒,我們並不知道這個條棒的起始值(一開始的數值)。
我們唯一知道的,就是這數值的範圍是在0~500間。且按下"Hit me",你會損失一些生命
。剩下的總量會同時表現在狀態條棒上。

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 dont know the value it is right now, a exact value won't 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.
同樣的,這裡有數個方法可以找到這筆數值(的位址)。
(像是使用"decreased value by"的掃描方式)
但我將只解釋最簡單的方式。"未知整數"(的搜尋),且是已減少的數值。
因為你現在不知數值為何,選高階分析是沒用的,所以要選
"未知整數(Unknown initial value)",同樣的,這個數值型態是4BYTE的。
(大部份的WINDOWS程式都使用4BYTE)按下first scan且等待ce搜尋結束。

When it is done click 'hit me'. You'll lose some of your health. (the
ammount you lost shows for a few seconds and then disapears, but you dont
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.
當搜尋結束時按下"Hit me"。你將失去一些你的生命值(在數秒內你失去的總數會秀出
來並消失,但你不需要這些失去的部份)
現在到CE上,並選擇"Decreased Value"再按下"Next Scan",當搜尋結束
再按下"Hit me"一次,並重覆以上直到你只找到一些

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.
我們知道這數值是介於0到500間,所以選其中一個最接近這數值範圍的位址,並把它
加入到表格區中
現在把生命值改變為5000,以繼續進行下一步

最後編輯:2006-08-12 07:21:02 ◆ Origin: <219.91.76.xxx>

(公告說明) 自刪/檢舉留言

2GP-BP

#4 RE:【攻略】CHEAT ENGINE教學程式翻譯暨攻略

發表:2006-08-12 07:21:40看他的文開啟圖片

fatalfury(terry)

拉露薇娜之風 LV34 / / 盜賊
巴幣:27311
GP:192
經驗:

[page4]
Step 4: Floating points (PW=890124)
In the previous tutorial we used bytes to scan, but some games store
information in so called 'floating point' notations.
(propably to prevent simple memory scanners from finding it the easy way)
a floating point is a value with some digits behind the point. (like 5.12 or
11321.1)
步驟4:浮點數(密碼=890124)
在之前的教學中我們使用(各種)位元組去掃描,但有些遊戲是用一種被稱為"浮點數"的
標記法在存放遊戲資訊。
(也許這樣做是防止單純的記憶體掃描去找到數值位址的一個簡單方法)
浮點數是指一個數值在小數點後有一些數字存在(像是5.12或11321.1)

Below you see your health and ammo. Both are stored as Floating point
notations, but health is stored as a float and ammo is stored as a double.
Click on hit me to lose some health, and on shoot to decrease your ammo with
0.5
在畫面下方你可以看見你的彈藥和生命值。
這兩個值都是以浮點數的方式儲存,但生命值是以浮點數儲存,彈藥值是以倍浮點數儲
存。
按下"hit me"以失去一些生命值,並(按下"fire")減少你的彈藥0.5個單位

You have to set BOTH values to 5000 or higher to proceed.
你必須將這兩個值改變為5000或更高以到下一步

Exact value scan will work fine here, but you may want to experiment with
other types too.
高階分析可以在這個教學中起作用,但也也可以實驗看看設定成其它的掃描型態

Hint: It is recommended to disable "Fast Scan" for type float.
提示:針對浮點數數值型態,建議你關掉"Fast Scan"

板主註:不知為何我找浮點數,選好數值型態和掃描型態後,直接輸入數值會找不到位
    位址,但在掃描型態選別的方式,如"value between..."就能順利找到了
    也有人遇到一樣的情形嗎?

最後編輯:2006-08-12 07:21:40 ◆ Origin: <219.91.76.xxx>

(公告說明) 自刪/檢舉留言

2GP-BP

#5 RE:【攻略】CHEAT ENGINE教學程式翻譯暨攻略

發表:2006-08-12 07:22:24看他的文開啟圖片

fatalfury(terry)

拉露薇娜之風 LV34 / / 盜賊
巴幣:27311
GP:192
經驗:

[page5]
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 descibe how to use the Code Finder function.
機械碼搜尋工具(密碼:888899)
有時本機電腦儲存的一些東西會在你重新執行遊戲、或甚至在遊玩時改變存放的位址…
在這種情況中,你可以使用兩件東西讓之前存檔的表格檔仍能使用
在這一步裡,我將試著敘述如何使用機械碼尋找工具

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 anempty list.
首先試著找到位址(你已經到了教學程式的這一步,所以我認定你知道怎麼找到位址了)
當你已經找到位址時,在表格區的位址按右鍵並選擇
"找出寫入此位址的位址(Find out what writes to this address)",
那麼一個有著空白列表的視窗會彈跳出來。

Then click on the Change value button in this tutorial, and go back to
Cheat Engine.
If evrything went right there should be an address with assembler code
there now.
然後按下在這個教學中的"Change value"鈕,並回到cheat engine。
如果一切步驟都做對的話應該可以在視窗中看到帶著組合語言程式碼的位址出現在列
表中

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. (Wich gets saved if you save your table)
選取這個位址並按下旁邊的"replace"選項按鈕以把程式碼的內容改為什麼都不做。
這樣做也會把這個機械碼的位址加入進階項目(advanced options)視窗中的表格中
(這個進階項目中你可以儲存成另一種表格檔(意指機械碼的位址是不會改變的))
*板主註:按下"more information"可以看到各暫存器如eax、edx等現存的數值
 而在暫存器前加了中括號[],則是指使用此暫存器的位址
*板主註2:由此可知這教學的前段所說的兩件事,就是指按下REPLACE和到
 ADVANCED OPTIONS存表格檔

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 clickable.
按下"stop"的話,則遊戲會照原本的機械碼運行,並按下由STOP鈕變成的CLOSE鈕關閉
這個子視窗。
現在,按下"Change value"鈕,且一切的步驟都做對的話,"Next"按鈕應該會變成可
以按下的

最後編輯:2006-08-12 07:22:24 ◆ Origin: <219.91.76.xxx>

(公告說明) 自刪/檢舉留言

1GP-BP

#6 RE:【攻略】CHEAT ENGINE教學程式翻譯暨攻略

發表:2006-08-12 07:23:24看他的文開啟圖片

fatalfury(terry)

拉露薇娜之風 LV34 / / 盜賊
巴幣:27311
GP:192
經驗:

[page6]
Pointers: (PW=098712)
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.
Thats why there are pointers:
指標(密碼=098712)
在前一步教學裡,我解釋了如何使用機械碼搜尋工具去處理一直在本機電腦上變動的位
址。
但是由於每個變動的位址(在每個遊戲中)都有其獨自的變動方式,使得你要找到數值
位址更增難度。
這就是這裡為何要說明指標(Pointer)的原因了:

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 dont really need to know assembler, but it helps a lot if
you do.
在視窗底部你將找到兩個按鈕。
其中一個將會改變數值,另一個則會改變數值和pointer
在這一步裡你不須要會組合語言,但是會的話會對你有很大的幫助。

First find the address of the value. When you've found it use the function
to find out what writes to that 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.
首先先找到這個數值的位址。
當你已經找到它時,請找出哪個位址在對這個位址寫入資料。
再改變一次數值,且找到的位址(寫入資料的位址)會出現在
("Find out what writes to this address")列表中,雙按它(或選取後按下
"More info"按鈕)。
雙按它時會出現一個debug視窗(assembler instruction),詳細的列出了當組譯器運
作時(各暫存器)發生了什麼事。

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.
如果debug視窗中的程式碼沒有"["和"]",則請用在debug視窗中別的程式碼。
如果你選對了程式碼,那將會在more info視窗中說明要找到pointer位址須要的位址
(即要給數值分配位址所須的位址)
板主註:(more info視窗=extra info視窗)
板主註2:我看到的程式碼為"00455df3 89 10 -mov [eax],edx"

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.
回到CE的主畫面中(如果你想要的話,可以保留extra info視窗,但你若關閉它的話,
請記得在"["和"]"的內容)並搜尋數值型態為4 byte、16進制(hexadecimal)的搜尋,
搜尋的數值則為在extra info視窗中看到的("[]"內的位址的)值。
板主註:[eax]就是指eax用的位址,關閉extra info視窗,回到列出機械碼的視窗
    中,可以看到"00455df3 89 10 -mov [eax],edx"這行,其中0045df3就是位
    址了,在下文中搜尋這筆值必須省略00
板主註2:若不省略00的話,CE只會鎖定pointer位址值不會鎖定數值位址值
板主註3:每個人的pointer位址未必相同
當完成搜尋後,也許CE會傳回給你1或數百筆找到的位址。
大部份的時候你須要的將會是最小(值)的一個位址。
現在按下"add address manually"手動增加位址到表格區並將"pointer"的核取方塊打
勾。

The window will change and allows 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 thats at the end. else leave it 0. If it was a more
complicated instruction look at the calculation.
按下打勾後,視窗將會改變大小,可以讓你可以輸入pointer的位址值及你要指派給它
的偏移位址。
填入你剛才找到的指標(pointer)位址(一樣要省略00,指派位址因為程式碼沒有加任
何值免填)。
如果debug視窗顯示是計算式(如"[esi+12]"),那麼末端(offset欄)
就要填上你看到的數值(以前例來說是12)。
否則則讓offset欄保持0即可。
如果有更複雜的算式的程式碼,請參考以下的計算方式。

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 cal.exe from windows in scientific mode to calculate)
一個有著複雜算式的程式碼範例:
[EAX*2+EDX+00000310] eax=4c,且edx=00801234。
在這個程式碼裡,EDX的值就是指標(pointer)的位址了,且
EAX*2+00000310的結果就是該填入offset欄的值,所以應是2*4c+00000310=3A8。
(這些數值都是使用十六進制來計算,你可以使用windows的小算盤(檔名calc.exe)
切換成工程模式來計算)

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.
回到教學程式,按下"OK"並將(指標的(pointer的))位址加入表格區,如果一切步驟都
做對的話,表格區會將pointer的位址前面加個p,表示為"P->xxxxxxx"
,xxxxxxx是一開始的值的位址的十六進制值。
如果不是,表示你已經做錯一些步驟了。
現在,改變指標(pointer)位址的值為5000並鎖定它。
然後回到教學程式按下"Change pointer"鈕,且一切都做對的話"next"按鈕將變成可
以看到(並可按下)的。

extra:
In this tutorial the value is actually pointed to by a pointer to a pointer
, but to finish this tutorial only 1 pointer will be needed.
To find the pointer to this pointer, just search for what changes the value
of the pointer.
If you know assembler, you may see something like
mov eax,[ebp-4]
mov eax,[eax+310]
Dont be confused by this.
just use the value the extra info window tells you.
ebp-4 points to the stack which contained the pointer to this pointer, but
the stack location does change all the time, so dont search for ebp, search
for the value of eax
額外補充:
在這個教學中,數值位址用的指標(pointer)是被另一個指標指向的,但是要完成這個
教學,只須要一個指標就夠了。
板主註:為免搞混,以下數值用指標稱a指標,指標的指標稱b指標
要找到a指標的指標,就要搜尋a指標的值的改變(這就是"change pointer"按鈕另一作
用)。
如果你懂組合語言,你可以看到一些像是
mov eax.[ebp-4]
mov eax.[eax+310]
不要被這些(程式碼)迷惑了。
你正好可用extra info視窗告訴你的訊息來使用這些數值。
ebp-4的內容會送至堆疊器,以被用來控制b指標指向a指標,但本機電腦的堆疊器是一
直都在改變的,所以不要搜尋有ebp在內容內的程式碼,搜尋eax的數值才行。

最後編輯:2006-08-12 07:31:19 ◆ Origin: <219.91.76.xxx>

(公告說明) 自刪/檢舉留言

3GP-BP

#7 RE:【攻略】CHEAT ENGINE教學程式翻譯暨攻略(新增5.3~5.4版的翻譯)

發表:2008-03-20 08:08:48看他的文開啟圖片

fatalfury(terry)

流星御矢 LV36 / / 盜賊
巴幣:34122
GP:200
經驗:

[page7]==>底下所有示範的程式碼只是提供一個編寫上的參考,不是非得照這格式寫不
      可,可參考ce官網討論區其它人的寫法
Step 7: Code Injection: (PW=013370)
Code injection is a technique where one injects a piece of code into the target
process, and then reroute the execution of code to go through your own written code
第7步:程式碼接合: (密碼=013370)
程式碼接合是一種接合一段(你寫的)組合語言程式碼到到目標程式中的技術,然後使整個程式執行時
有包含到你寫的程式碼

In this tutorial you'll have a health value and a button that will decrease your
health with 1 each time you click it.
Your task is to use code injection to increase the value of your health with 2
every time it is clicked
在這篇教學中你將有一個生命值及按鈕,每當你按下按鈕時能減少你的生命值1點。
你的課題是使用程式碼接合將你的生命值改為每按下按鈕時增加2點。

Start with finding the address and then find what writes to it.
then when you've found the code that decreases it browse to that address in the
disassembler, and open the auto assembler window (ctrl+a)
There click on template and then code injection, and give it the address that
decreases health (If it isn't already filled in correctly)
That'll generate a basic auto assembler injection framework you can use for your
code.
開始搜尋這個(生命值)的位址並在之後找出是哪個位址對此位址做寫入。
然後當你找到減少它(生命值)的程式碼後,在反組譯器中瀏覽該程式碼的位址,並打開自動組譯視窗(ctrl+a)
(板主註:要瀏覽程式碼的位址,請在顯示程式碼的視窗上按下旁邊的SHOW DISASSEMBLER鈕)
(板主註2:若要打開自動組譯視窗,也可經由指令選單TOOLS-->AUTO ASSEMBLE)
點擊template指令選單並選擇裡面的code injection指令,填上減少生命值的程式碼的位址
(如果已經填入在位址欄內的位址沒有正確的填入的話)
那將產生一段讓你的程式碼使用的基本的自動組譯程式碼框架
(板主註3:自動組譯程式碼框架,就是指剛才填完減少生命值的位址後,auto assemble視窗產生的一段組合語言程式碼)

Notice the alloc, that'll allocate a block of memory for your code cave, in the
past, in the pre windows 2000 systems,people had to find code caves in the
memory(regiosn of memory unusaed by the game), but thats luckely a thing f the
past since windows 2000, and will these days cause errors when trying to be
used, due to SP2 of XP and the NX bit of new CPU's
(在auto assemble視窗中)請注意"alloc"這一行,那將分配一個區塊作為放置你的程式碼的"洞窟",在過去,在windows2000之前的作業系統中,人們必須去在記憶體中找到放置程式碼的洞窟
(「程式碼洞窟」就是指在記憶體中遊戲未使用的區域),並且伴隨而來的是當你試著使用你找到的區塊而出現的系統錯誤的日子(找錯位址的話),而一件幸運的事情是,
自從WINDOWS2000出現後,因為WINDOWS XP SP2的推出及含有NX bit技術的新型CPU的出現(使得系統因為這種錯誤而發生的當機不再出現)
(板主註:在alloc一行小括號中的newmem,2048分別是指決定ce決定的區塊的名稱,及指定它的大小為2048個KB)
(板主註2:關於NX bit,這是一種AMD cpu的相關技術,INTEL也有推出相同但名稱不同的技術,詳情請看以下網址:
http://zh.wikipedia.org/w/index.php?title=NX_bit&variant=zh-tw)

Also notice the line newmem: and originalcode: and the text "Place your code here"
As you guessed it, write your code here that will increase the  health with 2.
a usefull assembnler instruction in this case is the "ADD instruction"
here are a few examples:
"ADD [00901234],9" to increase the address at 00901234 with 9
"ADD [ESP+4],9" to increase the address pointed to by ESP+4 with 9
In this case, you'll have to use the same thing between the brackets as the
original code has that decreases your health
也請注意"newmem:"及"originalcode"這幾行,還有"Place your code here"這一行,如同
你猜測的一樣,在(Place your code here這一行)這裡寫下你的程式碼那將會使生命值改為
每按下按鈕就增加2點。
在要新增程式碼的情況下有一個有用的組合語言指令是叫"ADD"的指令,這裡有一些關於它的
範例:
(△為空白)
"ADD△[00901234],9"=>將9這個值填入並取代在00901234這個位址的值
"ADD△[ESP+4],9"=>將9這個值填入並取代在指針位址ESP+4的值
在現在的情況中,你將必須使用(和之前)同樣會減少生命值的在中括號內的程式碼內容
(只是在中括號之前的指令須換為add,中括號之後是填上你想要增加的數值,但這必須視你是否有刪除原始程式碼來決定,在不刪的情況下在本範例中須填3,填3的原因請看下段"Notice"開頭的譯文)
(板主註:在auto assemble視窗中,"//"後的文字是註解,這是不會被遊戲處理的,
你可以在你的程式碼中加入註解,而且你自已的程式碼也可在file功能選單中存成cea檔,方便下次再使用)
(板主註2:當未使用alloc這一行指令及其它label時,須自行尋找我們寫的程式要用的
code cave,請在memory viewer視窗下使用指令選單tools->scan for code caves來尋找
code cave,,在code cave尋找視窗中,可設定尋找的範圍,及要找的code cave的大小,
它的size單位是kb,找到後則須在自已寫的程式中加入(◇表示換行,△表示空格):
[ENABLE]
主程式指令碼位址
label(back)========>執行程式跳轉時會用到的標籤
01234567:==========>假設這是我們找到的code cave位址,須在主程式指令碼的位址之  
          前且記得在位址後加「:」
你寫的程式碼…
jmp back===========>跳轉回被修改的程式的指令碼位址

主程式指令碼位址:
jmp△01234567
back:==============>使程式知道要從哪裡跳轉回被修改的程式中使其能繼續運作
[DISABLE]
主程式指令碼位址:
主程式的指令碼
)
(板主註3:如果也想讓使用code inject功能自動產生出來的程式碼能像手動編輯程式時一
樣能將其加入表格區的話,只要像以下這樣編輯在適當之處加上[ENABLE]和[DISABLE]及該
有的指令即可,之後還可再表格區中按右鍵選,Change script再編輯:
[ENABLE]
alloc(區塊名,區塊大小)
label(returnhere)
label(originalcode)
label(exit)
原程式指令碼位址
jmp newmem
nop
returnhere:

newmem:
改寫的指令碼

originalcode:
原程式指令碼

exit:
jmp returnhere
[DISABLE]
dealloc(newmem) //free memory

原程式指令碼位址:┐ 
                      ├這兩行若加入而表格區的方框又已勾選的話會使方框無法取消
                               |勾選
原程式指令碼   ┘  

Notice:
It is recommended to delete the line that decreases your health from the
original code section, else you'll have to increase your health with 3
(you increase with 3, the original code decreases with 1, so the end result is
increase with 2), which might become confusing. But it's all up to you and your
programming.
請注意:
建議刪除會減少你的生命值的那行原始程式碼,否則你將必須(把你的程式碼要增加的)
生命值增加為3,((在每次按下按鈕時)你的增加值為3,而原始程式碼減少1,所以結果是增加2)
這樣作也許會使情況變得混亂。
但是這一切還是要看你及你編輯的程式碼而定。
(板主註:若刪除原始程式碼中的originalcode那行及寫在它之後的指令時,也須刪除
在auto assemble視窗中,從最上方數下來第三行和它有關的標籤「label(originalcode)」)

Notice 2:
In some games the original code can exist out of multiple instructions, and
sometimes, not always, it might happen that a code at another place jumps into
your jump instruction end will then cause unknown behaviour. If that happens,
you should usually look near that instruction and see the jumps and fix it, or
perhaps even choose to use a different address to do the code injection from.
As long as you're able to figure out the address to change from inside your
injected code.
請注意 2:
在某些遊戲中會有數個指令在原始程式碼段落以外的段落中,而且這情況是有時候,
並非一直是這樣,這種現像可能是發生在別處的程式碼的跳轉指令跳轉到你寫的跳轉指令
(的位址末端)的時候,並且這種現像會造成未知的作用。
(板主註:這段話是指我們寫的程式碼使用的位址末端,可能會蓋住屬原始程式碼但不在其段落中的指令使用的位址的開頭,或是相反的情況,在後段的原始程式碼跳轉到我們跳轉的位址並覆蓋了其指令。)
(板主註2:跳轉指令,就是指組合語言中"jmp"這個指令,其作用是指示主程式執行到它這一行的時候要跳去執行它所指定的位址,那邊所寫的指令)
如果發生這種事的話,你通常應該觀察(被覆蓋的)指令,看它跳轉到哪並修正它(跳轉的位址),或是選擇使用不同的位址來做程式碼接合。
(板主註3:若要指定新的位址的話,可使用memory viewer視窗中的指令選單裡的功能來找位址,這功能叫scan for code caves,熱鍵是ctrl+alt+c)


最後編輯:2008-03-20 08:08:48 ◆ Origin: <219.91.71.xxx>

(公告說明) 自刪/檢舉留言

1GP-BP

#8 RE:【攻略】CHEAT ENGINE教學程式翻譯暨攻略(新增5.3~5.4版的翻譯)

發表:2008-03-20 08:14:15看他的文開啟圖片

fatalfury(terry)

流星御矢 LV36 / / 盜賊
巴幣:34162
GP:200
經驗:

[page8]
Step 8: Multilevel pointers: (PW=525927)
This step will explain how to use multi-level pointers.
In step 6 you had a simple level-1 pointer, with the first address found already
being the real base address.
This step however is a level-4 pointer.
It has a pointer to a pointer to a pointer to a pointer to a pointer to the health.
第8步:多層級指針: (密碼=525927)
這一步中將解釋如何使用多級的指針。
在第六步中你已有簡單的1層級指針(的觀念),及透過最先找到的記憶體位址來找出屬於它的基址。
(板主註:觀於基址,請見初學者區的名詞解釋,該解釋文標題為
「【補充】國外教學文件相關的專有單字對照」)
然而這一步中是有4層級的指針。
它是一個指出生命值的指針的指針的指針的指針
(板主註:這意思也就是這指針最後會一路指向到生命值去)

You basicly do the same as in step 6.
Find out what accesses the value,look at the instruction and what probably is the
base pointer value, and what is the offset, and already fill that in or write it down.
But in this case the address you'll find will also be a pointer.
You just have to find out the pointer to that pointer exactly the same way as you
did with the value.
Find out what accesses that address you found, look at the assembler instruction,
note the probable instruction and offset, and use that.
and continue till you can't get any further
(usually when the base address is a static address, shown up as green)
你基本上要做的事和第6步一樣。
找出存取生命值(的位址),查看程式碼指令及可能為基指針的(16進制)數值,及它的偏移量,並準備好(在接下來的操作步驟中)填下這些數值或是抄下這些數值。
但是在現在的情況中你找到的位址將也是個指針。
你只必須用相同的方法用(剛才找到的指針其16進制)數值找出指向這個指針的指針。
找出是哪個位址在存取你找到的數值的位址,查看組合語言指令,注意有可能的(組合語言)指令
和偏移,並使用它。
並持續作以上操作直到你不能找到任何更進一步的(結果)
(通常基址是固定的位址,(在CE中)以綠色顯示)
(板主註:據以上描述,要找出第二個及之後的指針,就必須每找到一個指針
,就改變一次數值,因為,在多層級的情況下最先找到的指針及其它的指針都是根據基指針的指示來決定自已的位址,所以它的位址型態除了是浮動的以外,要找到自已的位址自然必須讀取比自已更接近基指針一級的指針其暫存器的數值,並在該暫存器輪到自已使用時將之前讀取到的數值填入暫存器內以決定自已的位址;也可以反過來說是比此指針上一級的指針將自已暫存器內的值寫入到比它下一級的指針;故在這裡,要對第一個指針使用
「Find out what reads from this address」這個右鍵選單的指令,並在其後出現的小視窗
中選擇「Find what writers to this pointer」來找出其它的指針)

(板主註2:
I.關於上一個註解,以本範例來說可以用圖解譯如下,其中指針編號愈接近A代表
其層級愈高愈接近基指針,主程式則會優先讀取層級最高的基指針,然後是指針A->B->C,所以上文才會說數值位址最後是被基指針指向的:
II.下面這些方塊圖並不是在模擬記憶體對資料的堆疊分佈情況,這些方塊只是為了使圖表美觀而畫的。
III.另外,指針其實是沒有編號的,以下的指針加了編號是為了讓人了解讀取資料的順序

┌─────────┐
│          數值位址         │
├────↓────┤
│          指針C           │
├────↓────┤
│          指針B        │
├────↓────┤
│          指針A           │
├────↓────┤
│         基指針           │
└─────────┘
)
(板主註3:為了方便快速檢查是否有正確找到各指針,以下列出各指針使用的程式碼:
指針C:mov [eax+18],esi
指針B:mov eax,[eax]
指針A:mov eax,[eax+14]
基指針:mov eax,[eax+0c])

Click Change Value to let the tutorial access the health.
If you think you've found the pointer path click Change Register.
The pointers and value will then change and you'll have 3 seconds to freeze the
address to 5000
按下"Change Value"鈕讓教學程式存取生命值。
如果你認為你已找到(基)指針的路徑就按下教學程式中的"Change Register"按鈕。
(板主註:指針的路徑,就是指指針使用的位址,而"Change Register"按鈕,是上一版5.3版的按鈕名稱,在5.4這一版中,按鈕的名稱被改為"Change pointer")
指針們和其值將會在三秒內改變,並且你將必須在這時間內鎖定指針位址上的值並改為5000
(板主註2:建議先改了數值,鎖定後再按下"Change Register"按鈕,以免反應不及)

Extra: This problem can also be solved using a auto assembler script, or using
the pointer scanner
額外補充:這個問題也能用自動組譯程式碼或使用(右鍵選單中的)"pointer scanner"
功能來解決。
(板主註:自動組譯程式碼,就是指第7步中提到的寫好的cea檔)

Extra2: In some situations (like this) it is recommended to change ce's codefinder
settings to Access violations when encountering instructions like mov eax,[eax]
since debugregisters show it AFTER it was changed, making it hard to find out the
the value of the pointer
額外補充2:建議在一些情況中(像是本步驟),改變CE setting中 code finder
存取(記憶體的)方法的設定,像是遇到程式執行類似mov eax,[eax]之類的指令時,
會使除錯暫存器顯示出其變動後的值,(這種組合語言指令)會造成找出指出數值的指針的困難。
(板主註:「會使除錯暫存器顯示出其變動後的值」這句話是指在遇到mov eax,[eax]這類
"將使用暫存器的位址的值重新放入同個暫存器"的特性的指令時,會使同個暫存器的值一直變動,例如修改的目標程式像本範例一樣,一個數值有多個指針時,會使找到基指針有困難,但這可以透過改變掃描記憶體的方式改善。)

Extra3: If you're still reading.
You might notice that when looking at the assembler instructions that the pointer is
being read and filled out in the same codeblock.
This doesn't always happen, but can be really usefull in finding a pointer when
debuggng is troublesome.
額外補充3:如果你仍在閱讀這篇教學。你也許會注意到有關指針的組合語言指令都是在同一塊指令區塊。
這種情況並非永遠都會發生,但在當除錯以找出指針時這情況真的很實用。
(板主註:同一塊指令區塊,是指這些有關指針的指令都是以0xaaaaaaxx的型式放在記憶體的區段中,只有xx部份改變以放下一道指令而已)
(板主註:更多指針的觀念,可看
http://col.njtu.edu.cn/course/xnjp/jsjxy/jsjcxjc/pointer.htm)

最後編輯:2008-03-20 08:14:15 ◆ Origin: <219.91.71.xxx>

(公告說明) 自刪/檢舉留言

2GP-BP

#9 RE:【攻略】CHEAT ENGINE教學程式翻譯暨攻略(新增5.3~5.4版的翻譯)

發表:2008-03-20 08:17:29看他的文開啟圖片

fatalfury(terry)

流星御矢 LV36 / / 盜賊
巴幣:34162
GP:200
經驗:

[page9]
Step 9: Injection++: (PW=31337157)
In this step we'll do basicly the same as in step 7(Code Injection) but now a
little bit more difficult.
Now you have to edit the code that decreases health with a piece of code that
sets the health to 1000 if the current second is equal to or bigger than 30,
and 2000 if it's smaller
第9步:程式碼接合加強版: (密碼=31337157)
在這一步中我們將要做的事基本上和第7步(程式碼接合)一樣,但現在要做的會有點困難。
現在(在這一步)你必須(要完成的,就是)編輯含有一小段含有能設定生命值在系統時間大於等於30時變為1000,在小於30時則設為2000的程式碼。

This can be done using a auto assembler scripts that does some api calls to some
routines to get the current time,but it may be easier to use a C-SCRIPT injection here
這個要求可以用自動組譯語言透過應用程式介面呼叫部份常用的常用的(副程式/函式庫)來得到正確的系統時間,但用C語言來做程式碼接合會更容易達到這個要求。
(板主註:應用程式介面的解釋,請看以下連結:
http://zh.wikipedia.org/w/index.php?title=API&variant=zh-tw)

Find the address of health and go to the script engine in Cheat Engine
(ctrl+alt+a in memory view, or tools->script engine)
找到屬於生命值的位址並來到Cheat Engine中的Script engine功能
(這功能可在memory view視窗中用ctrl+alt+a熱鍵打開,或是用指令選單tools->script engine)

then opposed to the other tutorials I'll provide you with a big hint
(in case you've never coded in 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;
-------------
Here change addresstochange with the address of health.
Don't forget to add 0x in front of it.
So if the address was 0012345 then fill in 0x0012345.
在這裡變更「addresstochange」(這串字,將其改為生命值的位址)能改變生命值的位址。
別忘了在其前面加上「0x」。
所以如果位址是0012345就填上0x0012345。

Select inject->Inject into current process and it'll open an auto assembler
script with a call inside it.
Now, just like in step 7 go to the address that decreases health and do
autoassembler->template->code injection.
And fill in as code the call instruction you got.
Note that the call will change the value of EAX and some flags may change as well;,
so if you want to save them,push them before and pop them after.
And remove the original code,it's not used and only makes things harder.
Click Execute and then click "Hit me" in the trainer.
If all went right the clickign of the button caused your c-script to be executed
and changed the value of health according to the current time.
(在script engine視窗中選擇指令選單inject->inject into current process到正確的處理
程序中,並且這樣做將會打開一個有呼叫指令(以呼叫剛才寫的要結合在程式中的c語言程式)的自動組譯視窗。
現在,要做的只要像第7步一樣找出減少生命值的位址並在自動組譯視窗上使用指令選單template->code injection即可。
並(在auto assemble視窗中)填上你得到的呼叫指令程式碼。
注意,呼叫的話將會改變EAX和部份旗標的值。
所以如果你要保存它們的話,在呼叫前用(指令)push及在呼叫後用pop將其從(別的你指定的暫存器)存入及取出。
並移除原始程式碼,這不會被使用到而且只會造成整件事執行上的困難。
按下(auto assemble視窗上的)"Execute"按鈕並按下(教學程式中的)"Hit me"按鈕。
如果一切步驟都執行的正確的話,點擊的動作會使得你的c語言執行,並使生命值依系統的時間改變。

(板主註:關於旗標的解釋,請看此連結:
http://masm1215.myweb.hinet.net/2-base/6-flag_use.htm)
(板主註2:pop和push也是組合語言的指令,它們是如何使用的及它的的定義請看以下網址:
http://masm1215.myweb.hinet.net/2-base/3-stack.htm
http://forum.cheatengine.org/viewtopic.php?t=95363 III.b MOV、III.c push and pop
+The stack這兩章節)
(板主註3:我認為「呼叫會改變EAX和部份旗標的值」及「移除原始程式碼」這兩句是作者為了是情況達到最穩定而作的發言,因為我試過不加入push及pop,還有也不移除原始程式碼一樣也能順運完成修改,但這只是我初步觀察下的結果,尚待討論…)
(板主註4:原本我以為原文這一段可能有寫錯:「Now, just like in step 7 go to the
address that decreases health and do autoassembler->template->code injection.」,
因為code inject是將原本執行的指令改為跳轉到其它的位址執行自訂的組合語言指令,但
這次是要呼叫在其它位址上的c語言程式來執行,如果用了code inject功能的話,即使跳轉到新位址,也沒有意義,所以在這一步中,得手動在auto assemble視窗中編寫指令。
但後來想到,我只須手動修改一下code inject自動產生出來的程式碼,並在適當之處加上
[ENABLE]和[DISABLE]即可達到相同效果,以下附上我修改的程式碼供參考:
[ENABLE]
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)

00455dea:
call 00FC00CD=======>呼叫本步驟之前已接合的C語言程式存在的位址
nop
returnhere:

newmem: //this is allocated memory, you have read,write,execute access
//place your code here


originalcode:
dec [ebx+00000310]

exit:
jmp returnhere
[DISABLE]
dealloc(newmem,2048)
)
(板主註5:在這一步,自動組譯的過程中須要注意的是,我們必須把原本減少生命值的指令使其不執行並改為呼叫我們用c語言寫的程式,而在這一步中的這個操作中,按下從script engine的指令選單inject->inject into current process時,產生的程式指令(△為空格):
「call△位址」只佔用5個byte,而原指令「dec△[ebx+00000310]」則佔用6個byte,所以
當我們完成指令的置換時會產生一個多出來的byte,這個多出來的byte必須填入一個閒置的指令"nop"使整個置換用的指令其佔用的byte長度和原程式碼相同,以免整個程式在執行時發生意外以外的事,寫出來的話,就會像這樣(注意,這兩行是在[ENABLE]的範圍內):
call△位址
nop
別忘了,當完成編輯程式碼時,可使用指令選單"File->Assign to current cheat table"
將寫好的程式碼加入表格區中,當它在表格區中時前面平常作為鎖定用的選取方塊這時則是作為執行這段程式的開關用。)

(板主註6:若要自行編寫自動組譯程式的格式請參考第7步倒數第二段的板主註2,另外在手動編寫中,不需像第7步那樣要先寫上各種label。)
(板主註7:如果在自動組譯的過程中,CE出現「RichEdit line insertion error」的訊息,
請更新你windows系統中的riched32.dll至最新版本)
(板主註8:其它還有一些組合語言程式碼接合的範例,可參考精華區中國外軟體區的
T SEARCH目錄)

Bonus:
As said before it can also be done with a normal assembler script.
CE allows you to fill in functionnames for call instructions so that should make
things easier And you could also just use a dll injection with an aa script. E.G:
injectdll(mydll.dll) //dll written in any languge you like

codecave:
call functionofmydll
jmp exit
特別附送:
像之前說的一樣要完成這個目的也可以用平常的組合語言。
CE能讓你為了完成呼叫指令,可以(在你寫的程式中)填入(你寫的)程式名稱,所以應該可以更容易的完成這件事,而且你也可以在程式語言中使用dll(檔)接合功能(來完成這件事)。
例如:injectdll(mydll.dll) //你可以用你喜歡的程式語言來寫出dll檔
codecave:
call functionofmydll
jmp exit

最後編輯:2008-03-20 08:17:29 ◆ Origin: <219.91.71.xxx>

(公告說明) 自刪/檢舉留言

2GP-BP

#10 RE:【攻略】CHEAT ENGINE教學程式翻譯暨攻略(新增5.3~5.4版的翻譯)

發表:2008-03-20 08:20:05看他的文開啟圖片

fatalfury(terry)

流星御矢 LV36 / / 盜賊
巴幣:34162
GP:200
經驗:

後話:
真是不好意思
這是遲到非常久的更新
CE的教學自5.3版後就新增了兩個步驟,5.4版又新增了一個步驟
使得精華區的教學只能對應到舊版的

但不論如何
教學程式內那種口語和怪怪的文法讓我翻譯時倍感困難
而其中有些專有名詞雖然我知道它的意思
但也因為不知有無適用的中文名詞的關系
在決定適合它的中文譯名時,也十分頭大

承上
我除了翻譯外,還另外加了註解及原文法所省略的文意
我用了()將其表示在內
若我的翻譯有任何錯誤
還請懂得人指正一下
(尤其是第8步,我不是很確定我的理解是否正確,雖然用我的方法可以過關就是了)

最後編輯:2008-03-20 08:20:05 ◆ Origin: <219.91.71.xxx>

(公告說明) 自刪/檢舉留言

0GP-BP

z0911592099#11 【刪除】fatalfury:請再充實文章內容
1GP-BP

#12 RE:【攻略】CHEAT ENGINE教學程式翻譯暨攻略(新增5.3~5.4版的翻譯)

發表:2009-07-24 03:19:37看他的文開啟圖片

wuc623123(宇糯)

開始XD的見習生 LV16 / 妖精 / 法師
巴幣:9918
GP:0
經驗:

※ 引述《fatalfury (terry)》之銘言:
>

[page8]

 
> Step 8: Multilevel pointers: (PW=525927) 

恕刪

 

我對step 8(page8)的疑問
在CE討論區找到了圖文解說
針對版主沒有解釋清楚的地方再加以圖解
http://forum.cheatengine.org/viewtopic.php    出處
這次考慮到了偏移量(offset)




最後編輯:2009-07-24 03:19:37 ◆ Origin: <125.224.127.xxx>

(公告說明) 自刪/檢舉留言

0GP-BP

#13 RE:【攻略】CHEAT ENGINE教學程式翻譯暨攻略(新增5.3~5.4版的翻譯)

發表:2009-12-23 10:16:07看他的文開啟圖片

rola1989(闇之羽翼)

未夠班的勇者 LV25 / 妖精 / 初心者
巴幣:12028
GP:102
經驗:


需要視頻教學的話
可以到Youtube搜尋關鍵字 (其他的影音平台或許也有)
如;Cheat Engine 5.5 Tutorial
5.5可打可不打 這只是版本號
建議搜尋後在左上角的「搜尋選項」點一下
在第一個「Result Type: 」選擇「播放清單
當然也可以省略不做

選你喜歡的點下去就是了

像我就很喜歡清單;Cheat Engine 5.5 Visual Tutorial
http://www.youtube.com/view_play_list?p=7FBD2C45C6D57BA0
他有HD模式,還有打上step和使用的搜尋方法
 

請經過一番嘗試後仍無解才去看
會對自己的操作錯在哪裡比較有深刻體認
不然就直接看攻略,對學習作用不大

最後編輯:2009-12-23 12:21:22 ◆ Origin: <120.113.119.xxx>

快速回覆文章,請先登入

板務人員
本板熱門推薦
【心得】CHEAT ENGINE 新手教我終於學會用了^^ PO一點小心得給剛接觸的新手~ 不過...(繼續閱讀
動漫電玩通

目前沒有關連題目!