游戏后坐力的设计方法:
静止状态,不开枪的时候,后坐力值为0:
按住鼠标左键开枪后可观察到后坐力的数据一直增加,迅速截图如下:
传统无后坐力方法:
锁定不开枪时候的数值0,但是锁定后发现无法实现完美的无后坐力,枪口的抖动程度和子弹射出的偏差依然很大
因此,我们判断,后坐力的数据,应该还有其他的地址或者函数往该地址进行写入,
所以我们在该地址,下硬件写入断点:
通过观察,我们发现,存在ebp不停的往后坐力地址写入数据:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1D8BBAF9 |. 8BAE 00010000 mov ebp, dword ptr [esi+100] ; esi+100
特征码定位到该处:
8B AE 00 01 00 00 C6 86 EC 00 00 00 ?? ??
寻找到数据修改值:
修改BD 00 00 00 00 90 90 90 90 90 90 90 90 90
使用第一把枪械断下的代码段:
1D8BBAFF |. C686 EC000000>mov byte ptr [esi+EC], 1
1D8BBB06 |. 45 inc ebp
1D8BBB07 |. 8BC5 mov eax, ebp
1D8BBB09 |. 89AE 00010000 mov dword ptr [esi+100], ebp ; 硬件写入断下关键代码处
1D8BBB0F |. 8BC8 mov ecx, eax
1D8BBB11 |. 0FAFC8 imul ecx, eax
1D8BBB14 |. 0FAFC8 imul ecx, eax
1D8BBB17 |. B8 1F85EB51 mov eax, 51EB851F
使用另外一把枪械断下的代码段:
1D8BD04E |. 8BAE 00010000 mov ebp, dword ptr [esi+100]
1D8BD054 |. C686 EC000000>mov byte ptr [esi+EC], 1
1D8BD05B |. 45 inc ebp
1D8BD05C |. 8BCD mov ecx, ebp
1D8BD05E |. 89AE 00010000 mov dword ptr [esi+100], ebp
通过测试,大部分枪械都实现了无后坐力,少部分枪械后坐力值仍然在改变,说明某部分枪械的后坐力写入代码来源自别的地方
在这里,不再继续寻找,有兴趣的朋友可以继续搞一下,
另外,通过观察,某些枪械的后坐力不单单决定于0x100的指针
在指针0xB8和0xBC位置,我们依然寻找到了一些可以影响后坐力的数据,甚至可以极大的改变后坐力和射速
在这里没有继续深入分析,分析方法大致如此,就不做赘述了