外挂学习之路(8)--- 释放技能call

首先以寻找 所有对怪物释放技能的call为主题

首先理一下编程者如何编写释放技能的流程,

1.      游戏玩家释放技能

2.      获取当前选中怪物ID或者指针或者标识一类的总之能标识释放对象

3.      进行释放技能的校验(如技能CD,施法对象是否正确)

4.      向服务器发送封包数据

5.      服务器返回数据

6.      获取当前选中怪物ID或者指针或者标识一类的总之能标识释放对象(千万注意)

7.      播放技能释放的动画

外挂学习之路(8)--- 释放技能call_第1张图片
一般是这么写的不排除特殊写法,

按照这个思路我们从步骤2下手回溯找步骤1的释放技能的call。先用CE找到选中怪物的有哪些标识,经过赛选得出如下结果:

外挂学习之路(8)--- 释放技能call_第2张图片

我们改变选中的怪物观察这三个值得变化,发现数据1和数据2始终保持一致并且大小都是相邻的数据,数据3则飘忽不定,由此猜测数据1和2是怪物的ID,3是怪物的指针。

接下来我们查看那些代码访问了这些地址的数据,注意是访问了不是改写了,在上次的找选怪call中我们查看的是那些代码改写了这些地址的数据,两者寻找的目的不一样,故此寻找方式也不一样,

外挂学习之路(8)--- 释放技能call_第3张图片

我们看到访问怪物ID好像没有而访问怪物指针瞬间一大堆,不要着急这些都不是我们想找的代码,因为我们还没有释放技能,我们对怪物进行攻击,并查看这三个窗口瞬间出现的代码,找到我们怀疑的代码(理论上攻击一次访问一次),再次攻击,理论上访问的应该是两次,我们继续校验我们怀疑的代码(红框圈住的是访问次数),暂停攻击理应看到访问次数不再增加

外挂学习之路(8)--- 释放技能call_第4张图片

经过赛选攻击怪物的时候访问的应该是怪物指针,并且按照上述规则找到几处可以的代码,这时候只能打卡OD校验了。

先给从CE里拿到的代码下断点,校验规则:

1.不进行攻击时进行其他任何操作断点不会断下

2.释放技能之后断点立即断下

3.断点断下之后技能应该尚未击中怪物,释放技能的call尚未完成(如何判断是否击中怪物:击中怪物之后怪物会方向攻击任务)

109F69CB   .  8BAA 98050000 MOV EBP,DWORD PTR DS:[EDX+598]  发送封包后
109F3CC3  |.  8BB2 98050000 MOV ESI,DWORD PTR DS:[EDX+598]  发送封包后
109F4AF5  |.  8B82 98050000 MOV EAX,DWORD PTR DS:[EDX+598]  发送封包后
109F60C0  |.  8B80 98050000 MOV EAX,DWORD PTR DS:[EAX+598]  发送封包后
109F3B9B  |.  8BB0 98050000 MOV ESI,DWORD PTR DS:[EAX+598]  发送封包后
108EC682   .  8B82 98050000 MOV EAX,DWORD PTR DS:[EDX+598]  发送封包后
102C6D90   .  8BB9 98050000 MOV EDI,DWORD PTR DS:[ECX+598]  发送封包前

依据上述判断我们最终搜定了其中之一的代码(最后一个)

剩下的就是老办法,CTRL+F9回溯,下断点,标号,连续回溯6-7层即可(一般情况,包含间接call),肉眼观察这些call,理应最少一个参数,因为技能有多个,肯定有技能参数。

然后就是用代码注入工具进行测试。最终找到释放技能的call.

 外挂学习之路(8)--- 释放技能call_第5张图片

调用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.0
               3 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
 

我们发现eax就是技能ID(更换技能时只有这个寄存器的值有变化,其他无变化)

31代表技能1,32代表技能2 ,以此类推,(这款游戏的技能在快捷栏数组里面不可以变动)

值得注意的是其他的非指向技能(如打坐,召唤坐骑)也是这个call只需调整参数即可,

例如,召唤坐骑测试call:

mov ecx,1EF69450
push 1
push 78
CALL 10B26810

普通攻击走的不是这条线,下一篇我们继续套路普通攻击的call.

 







你可能感兴趣的:(游戏外挂)