rhg59321 發表於 2020-12-23 14:57:42

Pointer 相關應用

本帖最後由 rhg59321 於 2021-5-2 01:25 編輯

數據寫法請往下移動


偶爾會看到有人提問 : "Pointer怎麼使用"
所以發一篇文章來做個簡單說明

1. 打開CE  


*(這邊要注意的是, 如果沒有使用過CE的Bypass會跳出 0xD1060104 的檢測)


2. 點左上角的小電腦


3. 選楓之谷程序後按開啟


4. 點選 "手動加入位址"


5. 出現這個視窗後, 把 "指針" 的選項打勾


6. 輸入Pointer, 以 "TwMs v230.3 Pointer 撞擊時間" 來做範例
// TwMs v230.3 Pointer 撞擊時間 (撞擊時間的默認值是1000毫秒=1秒)
Base Address : 042DEB04
Offset : 000033E0


7. 輸入完後即可查看Poiinter的值,


**第6步驟補充說明, Base放在最下面, Offset依序往上放
例如 : 血魔指針, 這邊用HP的Pointer來示範
// TwMS v230.3 Pointer 血魔指針  
HP: [+19DC]+0274


//======================看下面別看我======================
從上面的教學得知Pointer可以用來讀值
接下來把它延伸到數據的應用上 (使用 TwMS v230.3 Pointer 血魔指針 來寫一個自動補血魔的數據)
裡面會用到按鍵call, 因為需要它來模擬按下按鍵達到喝藥水的效果

// TwMS v230.3 CRC 自動補血魔

// Alloc、Label等等的資料可以到洋蔥大大的部落格去看說明 https://knowlet3389.blogspot.com/2012/05/blog-post_8121.html
Alloc(PressKey,128)
Alloc(CheckHP,256)
Alloc(CheckMP,256)
Alloc(HP,04)
Alloc(MP,04)
Label(CheckHP_Exit)
Label(CheckMP_Exit)

HP:
DD 7D0 // 2000的16進位=7D0, 這個值可隨自己的需求調整
MP:
DD 12C // 300 的16進位=12C, 這個值可隨自己的需求調整

//============================================================================================================
01C5DE23:         // Hook點
jmp CheckHP      // 跳轉到我們申請記體的空間
nop                   // 多補一個nop的原因是Hook點 "01C5DE23" 的這個指令 "mov ecx," 使用了6個byte ,而遠程的jmp指令只會使用5個byte, 所以跳轉到申請記憶體空間的時先補一個nop給原程序, 變成: 遠程jmp 5byte加上一個nop指令剛好6個byte, 關閉數據時才不會變成亂碼導致程式崩潰 **(其實這一段我不知道這樣解釋對不對, 錯誤的話請大大告知小弟一聲><)
/*
開啟數據前
01C5DE23 - 8B 0D 04 EB 2D 04 - mov ecx,
開啟數據後
01C5DE23 - E9 08 21 44 0E    - jmp 100A0000
01C5DEF8 - 90                - nop
*/

CheckHP:                   // 自己申請的空間
pushad                      // pushad指令壓入32位暫存器,使他們按照EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 的順序出現在堆疊中。
// 以下為HP Pointer HP: [+19DC]+0274
mov eax,  // 04587C3C
mov eax,  // 19DC
mov eax,    // 0274
cmp eax,             // 此時eax存放的是角色當前的HP值, 用它跟我們先前設定的的值來做比較
ja CheckHP_Exit         // 如果eax大於就不調用按鍵來補血
mov edx,01520000    // 回血的藥水放在哪個按鍵就輸入對應的按鍵碼, 可以參考此篇文章來修改按鍵碼 https://bingfong.com/thread-1754611-1-1.html
call PressKey             // 調用按鍵call

CheckHP_Exit:          // 執行完數據後準備跳回原程序
popad                      // popad指令則是pushad指令的逆操作。popad指令按照與上面相反的順序依次彈出暫存器的值。順序為EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX .
mov ecx,  // 還原Hook位址的指令, 原本 "01C5DE23 - mov ecx," 因為跳轉到我們申請的記憶體, 被借用成jmp XXXXXXXX, 所以跳回原程序前要先還給它
jmp 01C5DE23+6      // 打開CE看記憶體會發現 01C5DE23 - 8B 0D 04 EB 2D 04 - mov ecx," 這個指令使用了6個byte (8B 0D 04 EB 2D 04), 上面還原完Hook位址的指令後要讓原程序繼續執行(否則程式會崩潰), 所以要jmp 01C5DE23+6, 也就是 "01C5DE23" 的下一行
/*
01C5DE23 - 8B 0D 04EB2D04 - mov ecx,
01C5DE29 - 8B 7D E0       - mov edi,
*/

//============================================================================================================
01C5DCBE:     // Hook點
jmp CheckMP  // 跳轉到我們申請記體的空間
                     // 這裡不補nop是因為 "01C5DCBE - E8 ED BB 25 01 - call 02EB98B0" 本來就是使用5個byte, 跟遠程jmp使用的byte剛好一樣, 所以不需要補nop
/*
開啟數據前
01C5DCBE - E8 ED BB 25 01 - call 02EB98B0
開啟數據後
01C5DCBE - E9 6D 23 48 0E - jmp 100E0100
*/

CheckMP:                   // 自己申請的空間, 用來寫數據
pushad                      // pushad指令壓入32位暫存器,使他們按照EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 的順序出現在堆疊中。
// 以下為MP Pointer MP: [+19E4]+0274
mov eax,  // 04587C3C
mov eax,  // 19E4
mov eax,    // 274
cmp eax,            // 此時eax存放的是角色當前的MP值, 用它跟我們先前設定的的值來做比較
ja CheckMP_Exit        // 如果eax大於就不調用按鍵來補魔
mov edx,01470000    // 回魔的藥水放在哪個按鍵就輸入對應的按鍵碼, 可以參考此篇文章來修改按鍵碼 https://bingfong.com/thread-1754611-1-1.html
call PressKey             // 調用按鍵call

CheckMP_Exit:          // 執行完數據後準備跳回原程序
popad                      // popad指令則是pushad指令的逆操作。popad指令按照與上面相反的順序依次彈出暫存器的值。順序為EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX .
call 02EB98B0           // 還原Hook位址的指令, 原本 "01C5DCBE - call 02EB98B0"  因為跳轉到我們申請的記憶體, 被借用成jmp XXXXXXXX, 所以跳回原程序前要先還給它
jmp 01C5DCBE+5     // 打開CE看記憶體會發現 "01C5DCBE - E8 ED BB 25 01 - call 02EB98B0" 這個指令使用了5個byte (E8 ED BB 25 01), 上面還原完Hook位址的指令後要讓原程序繼續執行(否則程式會崩潰), 所以要jmp 01C5DCBE+5, 也就是 "01C5DCBE" 的下一行
/*
01C5DCBE - E8 ED BB 25 01 - call 02EB98B0
01C5DCC3 - 8B 4F 04       - mov ecx,
*/

//============================================================================================================
PressKey:                 // 按鍵call, 使用它來達到按下按鍵的效果
mov esi,
mov ecx,
push edx
push 00
call 02D7E6D0
ret


01C5DE23:               // Hook點  8B ?? ?? ?? ?? ?? 8B ?? ?? 85 ?? 0F 84 ?? ?? ?? ?? 83 ?? ?? 00 74 ?? 85 ?? 74 ?? E8 ?? ?? ?? ?? 39 ?? ?? 7F
mov ecx, // Hook點的指令, 也可用Byte來代替 例: DB 8B 0D 04 EB 2D 04

01C5DCBE:               // Hook點  E8 ?? ?? ?? ?? 8B ?? ?? 83 ?? ?? 7C ?? C7 ?? ?? ?? ?? ?? ?? 74 ?? 83 ?? ?? 74 ?? 33 ?? 3B ?? 0F ?? ?? EB
call 02EB98B0           // Hook點的指令, 也可用Byte來代替 例: DB E8 ED BB 25 01

DeAlloc(HP)
DeAlloc(MP)
DeAlloc(CheckHP)
DeAlloc(CheckMP)
DeAlloc(PressKey)

效果如影片:
https://www.youtube.com/watch?v=dTeYtm4mMvw




gta5123cc 發表於 2020-12-23 16:02:02


smilelin0419 發表於 2020-12-23 17:25:07

我相信 一定很多人會覺得你在公三小 然後再跟你說 有沒有啥數據XDDD

奔馳男孩 發表於 2020-12-24 09:29:24

太實用了,謝謝版主題通的詳細教學。

lgf328 發表於 2021-5-2 00:05:32

;P:o;P感谢大大的分享,我好开心哦

ayoyollg 發表於 2021-7-1 11:04:48

來拿1楓幣 路過~~

丁柏文 發表於 2021-9-8 22:58:23

想請問為什麼我新增地址那邊全部都是問號https://ibb.co/jvDdd67

BoYounCheng 發表於 2023-1-30 01:06:18

攻擊次數的要如何修改??
我照著本篇文章最後鎖定之後沒有任何效果

klechcie 發表於 2023-8-5 04:01:05

過來拿1楓畢路過

刘四 發表於 2023-9-5 18:25:35

感謝大大的分享喔,對初學者很友好啊!

网上de坏人 發表於 2023-9-29 11:03:43

不會被檢測嗎?

网上de坏人 發表於 2023-9-29 11:06:06

為什麽我CE打開了沒一會就會被T下線呢。。這個咋解決呢

328454407 發表於 2023-10-8 06:50:17

拿一個楓幣吧

melucky 發表於 2024-6-8 19:04:14

谢谢大佬说明
頁: [1]
查看完整版本: Pointer 相關應用