backmir修改吧 关注:841贴子:3,054
  • 5回复贴,共1

浅谈数据的加解密

只看楼主收藏回复

其实这是在573650245大佬的“【教程】关于多倍主属性的修改”和“【新手教程】100倍经验制作。”这2个帖子里的内容,我不过是借花献佛,直接以图说话吧。

第一张图,是存储人物经验的代码,以下是我对代码执行流程的分析。
1,新得的经验如果为0,则置为1
mov eax,00000001
test edi,edi ;
cmove edi,eax,
2,判断人物数据是否加密,然后按情况取当前经验值,偏移 +74
mov bl,[esi+7A] // +7A = 1 加密状态
mov ecx,[gamesvr.exe+1CEA2C] // 解密密钥
call gamesvr.exe+D4240 // 解密函数
3,新旧经验相加后,存储加密的数据
mov ecx,[gamesvr.exe+1CEA2C] // 加密密钥,与解密密钥相同
call gamesvr.exe+D4190 // 加密函数
如果要直接修改经验,确实就是改加密前的数据,也就是 +83798地址这里:add eax,edi
两个寄存器,选一个改其数据即可。
好,继续下一个,是关于攻速的

上面代码执行流程:
1, 按人物数据是否加密,读取出其攻速数据,偏移+40
注意,与上面经验的解密密钥不同,这里是 movzx ecx,byte ptr [gamesvr.exe+1CEA26]
解密函数则是一样
2,读取人物的词缀攻速数据,有数据则计算发挥效用的几率 第一个 MSVCR120.rand
有效用,则继续计算词缀攻速的“上下限”,第2个 MSVCR120.rand
这是计算攻速后的汇总返回

设定一个最小值600,但取最大值
cmp edi,eax
cmovl edi,eax
所以要修改的话,可以改
mov eax,00000258 这里
然后将 lea eax,[edi-64] 这行代码置空即可
当然,综合分析之后,我们应该更进一步,直接改加密的攻速数据,应当如下:
假设ebx是人物地址
mov edx,10 //最大值是 FF 也就是255
movzx ecx,byte ptr [gamesvr.exe+1CEA26]
call gamesvr.exe+D4190 // 加密函数
mov byte ptr[ebx+40],al
// 如果有错,就用 mov word ptr[ebx+40],ax, 但绝不是 mov [ebx+40],eax 长度太大会窜改其它数据
攻速,在C端也有限制,所以仅修改服务器上的代码是不起直接作用的
想真正发挥效用,就得用我这个加密方法,并小退存档,数据同步到C端后,才会起效用
至于移动速度,也是类似,请自己找出加密的密钥吧。


IP属地:广东1楼2022-12-10 09:18回复
    666


    IP属地:湖北来自Android客户端2楼2022-12-10 12:45
    回复
      感谢教头的指导.......


      IP属地:河北3楼2022-12-10 12:52
      回复
        大佬 看看我这个

        怎么改都不管用 头都快炸了 小退也退了 是脚本插入位置不对? 还是C端的限制 C端不改的话 S端怎么改都不行?


        IP属地:河北4楼2022-12-11 21:47
        回复
          小白表示完全看不懂啊啊啊啊啊


          5楼2022-12-25 00:04
          回复
            汇编代码的确难懂

            不断学习中~


            IP属地:湖南6楼2024-07-12 10:45
            回复