教學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 編輯 ] |   
 
 
 
 |