教學URL 1: (參考性佳)
http://forum.cheatengine.org/viewtopic.php?t=61592
URL 2:
http://www.g0dnetwork.com/ucetut.html
URL 3:
http://www.freewebs.com/ucemaking/index.htm
以下是我在製作ce的記錄及 source code:
Day 1: 2007.9.13
|
發現 formsetting 的 form 一被 load 會被 測到外掛,
buffy 版本很多按鈕都有修改變數名稱, 可是到了 spam.zip 版本, 又變回來正常的變數名稱.
spam 版的 dbkKernal 用 DDK 於 win2k 環境下 無法 complier.
spam 版的 dbk32.dll 作法跟 ce 5.3 版差異也滿大的.
為了怕會卡在最後沒有 .sys 的 driver 檔可以用, 所以還是使用 buffy 版來修改.
buffy 版, 沒修改的情況下, 也是會被測到,
在只 load MainUnit.pas 情況下, 是可以 bypass 楓之谷.
附上我用 vb6 寫的 begin 後, 自動加入 (* 註解的小程式, PasCommentOut_002.exe
請參考: max engine 2007.9.13 卡在 formsetting 的開發中的版本(感謝 dark byte's buffy.zip):
http://www.badongo.com/file/4339648
|
Day 2: 2007.9.14
|
卡在 formsettings 好久,
1. 把所有的 code & use 都加上了註解... ... 會測到.
2. 把 formsettings 裡的 label, checkBox, button 的變數名稱改掉 ... 會測到.
(ps: 如果要修改 checkbox name , 因為會動到很多支 pas 檔,
建議你要灌 search & replace 這套軟體, 很方便,
建議不要修改到 .dcu 檔案的字串, 一改會把 delphi 卡住,
附註: delphi 控制項的物件名稱, 不只會出現在 .pas 檔裡. 不要只 replace *.pas)
3. 把 checkbox, label , BOTton , tab , frame 的 caption 都改掉 ... 會測到.
4. 把 formsettings 整個 unit 名稱改掉 .. ... 會測到.
再回去讀一讀 Dark Byte 的文章後, 重新開始改 UI,
http://forum.cheatengine.org/viewtopic.php?t=81663
5. 修改 label & checkbox 的 left, top & width, 不會被測到
經過了7小時測試, 在load fromsetting 終於不會被測到, 真是感動!
請參考: max engine 2007.9.13 formsetting 已pass 的開發中的版本(感謝 dark byte's buffy.zip):
http://www.badongo.com/file/4347061
|
Day 3: 2007.9.15
|
formsettings 會改了之後, 接下來的,
AdvancedOptions, Comments, MemoryBrowser 這3個 Form 的 GUI 就都沒問題.
接下來, 就是在 mainunit 會遇到開始 uncomment delphi code 後會被到測到,
首先會被測到的就是 procedure TMainForm.FormShow(Sender: TObject);
找到會被測到的unit 是 mainUnit2,
並開始 comment, 最後找到會被測到的行號後,
猜測可能是其他的 form gui 沒改到,
於是從頭到尾, 把 GUI 都重新設定一遍,
並多 use 了些不重要的元件進來 ......不會被測到,
現在 GUI在似乎都沒問題了, 按一下 process list 的按鈕看看,
沒按下去之前不會被測到. 按下去 ...... 會被測到,
應該是 unit ProcessWindowUnit; 造成的,
參考一下 spam 版的 裡 ProcessWindowUnit.pas 裡的寫法, 再修改後.
看了一下 I 大的 Dll 檔, 發現 I 大有修改 export 的 function name,
所以, 當然也要跟著修改一下.
hide SSDT 應該是 pass 了, 因為不難,
接下來就是要修改 driver.
今天的感想: 目前我修改的版本, 切出楓之谷後, 點回 uce 會被測到.
但切出楓之谷, 沒點回 uce, 再切入楓之谷不會被測到.
會被測到的原因, 我猜可能是 Driver 被測到, 因為 DBKDrvr.c 檔案沒什麼修改到.
|
Day 4: 2007.10.10
|
開始改 Driver, 改了一些, 在按下楓之谷的 play 鈕之前, 都是正常的, 可以 read/ write memory,
關掉ce主程式後, 進楓之谷會被測到有外掛.
應該是在 fixmemaccess 時, 會去 loadDBK, 會把 driver load 進 memory 裡, 就會被測到.
要過 GUI 似乎不難. hide SSDT 也不難, 加個 xor 就搞定, 難的在後面的Driver.
參考看看被我改的亂78糟的ce source code: http://www.badongo.com/file/4667832
研究中的資料:
What's the tutorial for changning the IOCTL's?
http://forum.cheatengine.org/viewtopic.php?t=16514
|
Day 5: 2007.10.13
|
Driver 還沒修改好, 不知道為什麼之前在 np 1059 不會被測到的程式,現在會被測到,於是再幫程式碼修改成註解.
所有可以執行的碼,全部都是註解了,為什麼還會被測到,原來是執行中的程式(如:UCE),
在該程式的目錄下有 kerneldata.dat, 或 Systemcallretriever.exe , systemcallsignal.exe 會被測到有外掛.
附上我改的很乾淨的 uce 的版本.
可以過 NP 1083, 因為程式碼都註解掉了, 把註解慢慢打開應該就可以 Run 了.
http://www.badongo.com/file/4698030
|
建議, 不要拿我改的亂78糟的 code 去改, 拿原本的 buffy 或用 ce 5.3 source code 來改.
DLL 修改比較表:
DLL 修改比較表:
CE 5.3 | ME 1083 | SCE 1059 | VE 5.0 | useIOCTL
test
SetSSDTEntry
GetSSDTEntry
SetSDTEntry
GetSDTEntry
GetKProcAddress
KernelAlloc
DBKResumeProcess
DBKSuspendProcess
DBKResumeThread
DBKSuspendThread
ChangeRegOnBP
GetLoadedState
MakeWritable
GetIDTs
GetIDTCurrentThread
GetProcessNameFromPEProcess
GetProcessNameFromID
WaitForProcessListData
StartProcessWatch
GetProcessnameOffset
GetDebugportOffset
GetThreadListEntryOffset
GetThreadsProcessOffset
RetrieveDebugData
StopRegisterChange
StopDebugging
DebugProcess
getAlternateDebugMethod
setAlternateDebugMethod
GetSDTShadow
GetSDT
SetCR3
GetCR3
GetCR4
IsValidHandle
UnprotectMe
ProtectMe
GetPEThread
GetPEProcess
GetPhysicalAddress
WritePhysicalMemory
ReadPhysicalMemory
CreateRemoteAPC
VAE
WPM
RPM
NOP
OT
OP
VQE
| useIOCTL
test
SetSSDTEntry
GetSSDTEntry
SetSDTEntry
GetSDTEntry
GetKProcAddress
KernelAlloc
DBKResumeProcess
DBKSuspendProcess
DBKResumeThread
DBKSuspendThread
ChangeRegOnBP
GetLoadedState
MakeWritable
GetIDTs
GetIDTCurrentThread
IlvMoney012
GetProcessNameFromID
WaitForProcessListData
StartProcessWatch
GetProcessnameOffset
GetDebugportOffset
GetThreadListEntryOffset
GetThreadsProcessOffset
RetrieveDebugData
StopRegisterChange
StopDebugging
DebugProcess
getAlternateDebugMethod
setAlternateDebugMethod
GetSDTShadow
GetSDT
SetCR3
GetCR3
GetCR4
IsValidHandle
UnprotectMe
ProtectMe
GetPEThread
IlvMoney011
GetPhysicalAddress
WritePhysicalMemory
ReadPhysicalMemory
CreateRemoteAPC
VAE
WPM
RPM
NOP
OT
OP
VQE
| SysCom54
test
SysCom53
SysCom52
SysCom51
SysCom50
SysCom49
SysCom48
SysCom47
SysCom46
SysCom45
SysCom44
SysCom43
SysCom42
SysCom41
SysCom40
SysCom39
SysCom38
SysCom37
SysCom36
SysCom35
SysCom34
SysCom33
SysCom32
SysCom31
SysCom30
SysCom29
SysCom28
SysCom27
SysCom26
SysCom25
SysCom24
SysCom23
SysCom22
SysCom21
SysCom20
SysCom19
SysCom18
SysCom17
SysCom16
SysCom15
SysCom14
SysCom13
SysCom12
SysCom11
SysCom10
SysCom9
SysCom8
SysCom7
SysCom6
SysCom5
SysCom4
| useIOCTL
test
SetSSDTEntry
GetSSDTEntry
SetSDTEntry
GetSDTEntry
GetKProcAddress
KernelAlloc
DBKResumeProcess
DBKSuspendProcess
DBKResumeThread
DBKSuspendThread
ChangeRegOnBP
GetLoadedState
MakeWritable
GetIDTs
GetIDTCurrentThread
GetProcessNameFromPEProcess
GetProcessNameFromID
WaitForProcessListData
StartProcessWatch
GetProcessnameOffset
GetDebugportOffset
GetThreadListEntryOffset
GetThreadsProcessOffset
RetrieveDebugData
StopRegisterChange
StopDebugging
DebugProcess
getAlternateDebugMethod
setAlternateDebugMethod
GetSDTShadow
GetSDT
SetCR3
GetCR3
GetCR4
IsValidHandle
UnprotectMe
ProtectMe
GetPEThread
GPEP
GetPhysicalAddress
WritePhysicalMemory
ReadPhysicalMemory
CreateRemoteAPC
VAE
WPM
RPM
NOP
OT
OP
VQE
|
感謝 DarkByte , IlvMoney 大.
[ 本帖最後由 maxwgun 於 2007-10-23 10:25 編輯 ] |
|