外挂学习之路(8)--- 释放技能call
首先以尋找 所有對怪物釋放技能的call為主題
首先理一下編程者如何編寫釋放技能的流程,
1.??????游戲玩家釋放技能
2.??????獲取當前選中怪物ID或者指針或者標識一類的總之能標識釋放對象
3.??????進行釋放技能的校驗(如技能CD,施法對象是否正確)
4.??????向服務器發(fā)送封包數(shù)據(jù)
5. ? ? ?服務器返回數(shù)據(jù)
6. ? ? ?獲取當前選中怪物ID或者指針或者標識一類的總之能標識釋放對象(千萬注意)
7. ? ? ?播放技能釋放的動畫
一般是這么寫的不排除特殊寫法,
按照這個思路我們從步驟2下手回溯找步驟1的釋放技能的call。先用CE找到選中怪物的有哪些標識,經過賽選得出如下結果:
我們改變選中的怪物觀察這三個值得變化,發(fā)現(xiàn)數(shù)據(jù)1和數(shù)據(jù)2始終保持一致并且大小都是相鄰的數(shù)據(jù),數(shù)據(jù)3則飄忽不定,由此猜測數(shù)據(jù)1和2是怪物的ID,3是怪物的指針。
接下來我們查看那些代碼訪問了這些地址的數(shù)據(jù),注意是訪問了不是改寫了,在上次的找選怪call中我們查看的是那些代碼改寫了這些地址的數(shù)據(jù),兩者尋找的目的不一樣,故此尋找方式也不一樣,
我們看到訪問怪物ID好像沒有而訪問怪物指針瞬間一大堆,不要著急這些都不是我們想找的代碼,因為我們還沒有釋放技能,我們對怪物進行攻擊,并查看這三個窗口瞬間出現(xiàn)的代碼,找到我們懷疑的代碼(理論上攻擊一次訪問一次),再次攻擊,理論上訪問的應該是兩次,我們繼續(xù)校驗我們懷疑的代碼(紅框圈住的是訪問次數(shù)),暫停攻擊理應看到訪問次數(shù)不再增加
經過賽選攻擊怪物的時候訪問的應該是怪物指針,并且按照上述規(guī)則找到幾處可以的代碼,這時候只能打卡OD校驗了。
先給從CE里拿到的代碼下斷點,校驗規(guī)則:
1.不進行攻擊時進行其他任何操作斷點不會斷下
2.釋放技能之后斷點立即斷下
3.斷點斷下之后技能應該尚未擊中怪物,釋放技能的call尚未完成(如何判斷是否擊中怪物:擊中怪物之后怪物會方向攻擊任務)
109F69CB . 8BAA 98050000 MOV EBP,DWORD PTR DS:[EDX+598] 發(fā)送封包后 109F3CC3 |. 8BB2 98050000 MOV ESI,DWORD PTR DS:[EDX+598] 發(fā)送封包后 109F4AF5 |. 8B82 98050000 MOV EAX,DWORD PTR DS:[EDX+598] 發(fā)送封包后 109F60C0 |. 8B80 98050000 MOV EAX,DWORD PTR DS:[EAX+598] 發(fā)送封包后 109F3B9B |. 8BB0 98050000 MOV ESI,DWORD PTR DS:[EAX+598] 發(fā)送封包后 108EC682 . 8B82 98050000 MOV EAX,DWORD PTR DS:[EDX+598] 發(fā)送封包后 102C6D90 . 8BB9 98050000 MOV EDI,DWORD PTR DS:[ECX+598] 發(fā)送封包前依據(jù)上述判斷我們最終搜定了其中之一的代碼(最后一個)
剩下的就是老辦法,CTRL+F9回溯,下斷點,標號,連續(xù)回溯6-7層即可(一般情況,包含間接call),肉眼觀察這些call,理應最少一個參數(shù),因為技能有多個,肯定有技能參數(shù)。
然后就是用代碼注入工具進行測試。最終找到釋放技能的call.
?
調用call之前抓取堆棧,更換技能再抓取堆棧,(其中一次釋放技能1堆棧信息如下)
EAX 00000031 ECX 1EF69450 EDX 00000001 EBX 1D8CFC00 ESP 0038E4D4 EBP 00000000 ESI 0038EF34 EDI 0038EF2B EIP 112A4AE2 em.112A4AE2 C 0 ES 002B 32位 0(FFFFFFFF) P 1 CS 0023 32位 0(FFFFFFFF) A 0 SS 002B 32位 0(FFFFFFFF) Z 1 DS 002B 32位 0(FFFFFFFF) S 0 FS 0053 32位 FFFDD000(FFF) T 0 GS 002B 32位 0(FFFFFFFF) D 0 O 0 LastErr ERROR_SUCCESS (00000000) EFL 00000246 (NO,NB,E,BE,NS,PE,GE,LE) ST0 empty -??? FFFF 443B8000 44804000 ST1 empty -NAN FFFF FFFFFFFF 00000000 ST2 empty -??? FFFF 3F800000 3F800000 ST3 empty -??? FFFF 443B8000 00000000 ST4 empty 0.0 ST5 empty 0.0 ST6 empty 36.000000000000000000 ST7 empty 0.03 2 1 0 E S P U O Z D I FST 0137 Cond 0 0 0 1 Err 0 0 1 1 0 1 11 (LT) FCW 027F Prec NEAR,53 掩碼 1 1 1 1 1 1我們發(fā)現(xiàn)eax就是技能ID(更換技能時只有這個寄存器的值有變化,其他無變化)
31代表技能1,32代表技能2 ,以此類推,(這款游戲的技能在快捷欄數(shù)組里面不可以變動)
值得注意的是其他的非指向技能(如打坐,召喚坐騎)也是這個call只需調整參數(shù)即可,
例如,召喚坐騎測試call:
mov ecx,1EF69450 push 1 push 78 CALL 10B26810普通攻擊走的不是這條線,下一篇我們繼續(xù)套路普通攻擊的call.
?
總結
以上是生活随笔為你收集整理的外挂学习之路(8)--- 释放技能call的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外挂学习之路(6)--- 选怪call
- 下一篇: OD的hit跟踪和run跟踪