日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

008 释放技能call分析

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 008 释放技能call分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 釋放技能分析
      • 定位普通攻擊call
      • 數據整理
      • 代碼編寫

釋放技能分析

接著我們需要拿到釋放技能的數據

首先來到明文發包call頭部

釋放技能讓斷點斷下

此時第一次返回的call是選怪的封包call。所有的傳奇類的游戲,都需要先選中怪物,然后在走近怪物,最后攻擊

我們在人物打怪的中途斷下,此時返回的第一層地址才是技能call。這一層的call被加密了。

我們需要返回到第二層。

| mov dword ptr ss:[rsp+0x30],eax | rsp+0x30 計數器 | movzx eax,byte ptr ss:[rsp+0x88] | | mov byte ptr ss:[rsp+0x28],al | rsp+0x28 1 | mov rax,qword ptr ss:[rsp+0x80] | | mov qword ptr ss:[rsp+0x20],rax | rsp+0x20 怪物坐標 | movzx r9d,dil | 技能等級 | movzx r8d,bx | 技能ID | mov edx,esi | 怪物ID | call 0x7FF7F9B75260 | 釋放技能call

這個call的參數分析如上。技能call實際上就是普通攻擊call

因為每個角色都自帶一個F1的普通攻擊,這個技能也是有技能ID的。

但是問題來了,這個call需要走近目標以后進行攻擊才會斷下,這就需要多調用一次走路call,那么這個call就不是我們要的call。

我們需要的是調用以后自動走到怪物面前,然后進行攻擊。這樣就得切換一下切入點了。

定位普通攻擊call

我們可以從選中怪物的ID或者對象入手。因為如果要釋放技能的話,選中怪物的ID和對象必定是要傳入的參數,找到了選中怪物的ID或者對象就相當于找到了技能call

首先選中一個怪物,搜索未知的初始值

然后選另一個怪物,搜索變動的值。重復這個步驟

重點分析這一批綠色的地址

其中,有幾個地址在未選中狀態下,數值為0

然后選中時,數值又產生了變化

這里用十六進制顯示,這幾個地址存放的應該是怪物的對象。其中有一個地址存放的是選中的怪物對象

當我們選中以后,把其中一半的地址改為0,此時人物不再進行攻擊,那么說明這三個地址有一個存放的是選中的怪物對象

最終通過修改數值,可以確定唯一的選中的怪物對象

然后在這個位置下一個寫入斷點,讓斷點斷下

這里通用需要先F9步過一次,不然會返回到一個沒有效果的選怪的call。需要讓這個斷點第二次斷下的時候返回。

這個call就是我們要的攻擊怪物的call,里面沒有技能相關的參數。那么這個call應該是個普通攻擊的call。

這個call在傳入怪物對象以后,會自動走到對象周圍,從某種程度上來說,已經解決了我們的問題。可以不需要調用尋路call了。

遠程職業的話不需要這個call,因為直接釋放技能就能打怪,不需要走到怪物身邊。

數據整理

釋放技能call | 48:8BC8 | mov rcx,rax | | 8B05 AC540902 | mov eax,dword ptr ds:[0x7FF6A22212D0] | | 894424 30 | mov dword ptr ss:[rsp+0x30],eax | | 0FB68424 88000000 | movzx eax,byte ptr ss:[rsp+0x88] | | 884424 28 | mov byte ptr ss:[rsp+0x28],al | | 48:8B8424 80000000 | mov rax,qword ptr ss:[rsp+0x80] | | 48:894424 20 | mov qword ptr ss:[rsp+0x20],rax | | 44:0FB6CF | movzx r9d,dil | | 44:0FB7C3 | movzx r8d,bx | | 8BD6 | mov edx,esi | | E8 B091BFFF | call 0x7FF69FD85000 | 釋放技能普通攻擊call | 83C8 01 | or eax,0x1 | | 8905 A4E5E301 | mov dword ptr ds:[0x7FF6A1FDC338],eax | | 48:8D05 35D17E00 | lea rax,qword ptr ds:[0x7FF6A098AED0] | | 48:8905 86E5E301 | mov qword ptr ds:[0x7FF6A1FDC328],rax | | 48:8D0D 37D57000 | lea rcx,qword ptr ds:[0x7FF6A08AB2E0] | | E8 724B4100 | call 0x7FF6A05B2920 | 普通攻擊call

一共兩個call,一個給近戰職業用,一個給遠程類職業用

代碼編寫

//釋放技能 void Fn_UseSkill(_stuObj Monster, _stuObj Skill) {//計數器+=1DWORD dwCount = ReadDword(g_GameAddr + UseSkillCount);dwCount += 1;//再釋放技能typedef void(*PFnUseSkill)(QWORD rcx, QWORD rdx, QWORD r8, QWORD r9, _stuPos* pos, QWORD one, QWORD count);PFnUseSkill UserSkill = (PFnUseSkill)(g_GameAddr + UseSkillCall);UserSkill(g_PublicRcx, Monster.m_ID, Skill.m_ID, Skill.m_Level, &Monster.m_Obj_Pos, 1, dwCount); }

這里暫時只寫一個釋放技能call,剩下的普通攻擊call各位可以自己去編寫。到這里自動打怪所需要的數據就已經全部找齊了,下一篇文章我們開始編寫自動打怪的代碼。

Github:https://github.com/TonyChen56/GameReverseNote

完整代碼:https://download.csdn.net/download/qq_38474570/79498815

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的008 释放技能call分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。