搜索

查看: 3472|回复: 11

给大家科普一下LOL的换肤是如何实现的

[复制链接]
发表于 2023-5-20 06:48:44 | 显示全部楼层 |阅读模式
耗子g 2023-5-20 06:48:44 3472 11 看全部
给大家科普一下LOL的换肤是如何实现的

1.游戏介绍
给大家科普一下LOL的换肤是如何实现的6017 作者:耗子g 帖子ID:3161 游戏知鸟论坛_zn60.com

从上图我们可以知道,LOL是MOBA类型的游戏,MOBA类型的游戏分析学会,那么其他MOBA类型的游戏也就非常easy。
进入正题:
2.前戏(需要准备的数据)
皮肤编号
MOBA类型的游戏皮肤都是有自己的ID编号的,一般默认皮肤的ID为0。之后的皮肤按照顺序每次递增1。同理手游的王者荣耀也是moba类型游戏,皮肤ID也同样可以这样,默认的皮肤ID为0,往右边数每次递增1。
检测皮肤的机制
MOBA检测游戏皮肤,会在角色死亡重生之时检测皮肤ID与对应的角色名称,而皮肤ID与名称通过键值对形式存储。说人话就是:男的不能穿女的衣服,女的不能穿男的衣服,不是人的不能穿人的衣服,人不能穿不是人的衣服,每次复活都会重新校验你的皮肤,也是为了防止有人篡改皮肤数据,如下自己画的抽象图(不怎么玩LOL,用同类型王者荣耀做个栗子,皮肤是随便想着写的,并没有按照游戏中皮肤顺序写!)
给大家科普一下LOL的换肤是如何实现的9033 作者:耗子g 帖子ID:3161 游戏知鸟论坛_zn60.com
3.上操作
3.1:查找换肤call可以通过皮肤ID或者是名称进行访问下段调试,如果通过皮肤ID,需要借助换肤插件,原皮搜0,换第二个皮肤搜1,第三个搜2以此类推。或者原皮搜索0,换皮肤搜索变动的,没有换搜索未变动,在0与变动和未变动三者去筛选数据。这里楼主采用名称下端访问。如下图,右键名称地址,查找谁访问了该地址:
给大家科普一下LOL的换肤是如何实现的1068 作者:耗子g 帖子ID:3161 游戏知鸟论坛_zn60.com
  1. 00580F12 - 8A 01  - mov al,[ecx]      //这里我们直接看下汇编代码
  2. 01378857 - 8B 16  - mov edx,[esi]
  3. 0137886D - 8A 06  - mov al,[esi]
  4. 00DD9A4B - 80 3E 00 - cmp byte ptr [esi],00
  5. 00DD9A51 - 80 3B 00 - cmp byte ptr [ebx],00
  6. 00DD9A80 - 8A 06  - mov al,[esi]
  7. 01391191 - 8A 07  - mov al,[edi]
复制代码
我们对此处下断
  1. 00580F12 - 8A 01  - mov al,[ecx]
复制代码
给大家科普一下LOL的换肤是如何实现的4904 作者:耗子g 帖子ID:3161 游戏知鸟论坛_zn60.com
给大家科普一下LOL的换肤是如何实现的9831 作者:耗子g 帖子ID:3161 游戏知鸟论坛_zn60.com
下段之后,ecx保存的是人物名称,循环每次递减,那么此处的代码以及第一个call就是作为校验名称的。我们继续往下走,发现第二个call的参数调用了人物基址与名称,那么我们直接F7跟进第二个call,一直往下走跳过上面的判断,上面都是一些无用的参数,一直走到下面的地址,edi保存的是人物基址,那么换肤call就是在该地址下了,我们F7跟进call(忘记截图了,我把地址粘贴出来)
  1. League of Legends.exe+18CBD5 - 8D 8F 182B0000        - lea ecx,[edi+00002B18]
复制代码
进入call之后
给大家科普一下LOL的换肤是如何实现的1792 作者:耗子g 帖子ID:3161 游戏知鸟论坛_zn60.com
  1. League of Legends.exe+11CE5E - 8B 46 18              - mov eax,[esi+18] { eax=0,这里是默认的原皮ID }
  2. League of Legends.exe+11CE61 - 8B CB                 - mov ecx,ebx { 这里的ecx保存的就是人物基址,可以往上找ebx的来源 }
  3. League of Legends.exe+11CE63 - 6A 01                 - push 01 { 固定值 }
  4. League of Legends.exe+11CE65 - 89 43 24              - mov [ebx+24],eax { eax是皮肤的ID }
  5. League of Legends.exe+11CE68 - E8 23B2FEFF           - call "League of Legends.exe"+108090 { 换肤call }
复制代码
这里往上找ebx来源
  1. League of Legends.exe+11CE46 - 8B D9                 - mov ebx,ecx
复制代码
ebx来源于ecx,到了程序头部,没有找到ecx来源,下段跳出。
发现ecx来源于:
  1. League of Legends.exe+18CBD5 - 8D 8F 182B0000        - lea ecx,[edi+00002B18]
复制代码
其中edi保存的就是人物地址。那么我们完整的换肤call就找到了。
可以使用注入工具,注入代码执行。也可以HOOK,HOOK的好处就是人物死亡之后,皮肤不会恢复原皮。这里就不演示效果了,把写好的CT代码粘贴出来,你们自行研究。
  1. [ENABLE]
  2. //code from here to '[DISABLE]' will be used to enable the cheat
  3. alloc(newmem,2048)        
  4. alloc(id,2048)          //申请内存
  5. label(returnhere)
  6. label(originalcode)
  7. label(exit)
  8. registersymbol(id)  //人造指针

  9. newmem: //this is allocated memory, you have read,write,execute access
  10. //place your code here

  11. originalcode:
  12. push 01
  13. mov eax,[id]          //通过CE添加ID,修改皮肤
  14. mov [ebx+24],eax

  15. exit:
  16. jmp returnhere

  17. "League of Legends.exe"+11CE63:
  18. jmp newmem
  19. returnhere:

  20. [DISABLE]
  21. //code from here till the end of the code will be used to disable the cheat
  22. dealloc(newmem)
  23. "League of Legends.exe"+11CE63:
  24. push 01
  25. mov [ebx+24],eax
  26. //Alt: db 6A 01 89 43 24
复制代码
不过还有一个问题,使用换肤call后防御塔以及小兵都会改变皮肤,也就是说防御塔、小兵、人物共同使用一个皮肤call,小兵多次死亡调用会导致游戏崩溃情况,所以需要自行判断edi是否是人物基址,是就执行换肤,不是就跳过。
4.结束
大家还想聊什么,可以回复,视情况而定。还有关于CE不能调试LOL问题,自行下载编码,重新编译DBK64.sys驱动文件,改个名字即可。



发表于 2023-5-20 06:50:33 | 显示全部楼层
老橡树1 2023-5-20 06:50:33 看全部
这东西我收了!谢谢楼主!知鸟论坛真好!
发表于 2023-5-22 04:52:02 | 显示全部楼层
贰十岁装成熟装s 2023-5-22 04:52:02 看全部
我看不错噢 谢谢楼主!知鸟论坛越来越好!
发表于 2023-5-22 07:47:51 | 显示全部楼层
丁侦球 2023-5-22 07:47:51 看全部
我看不错噢 谢谢楼主!知鸟论坛越来越好!
发表于 2023-5-22 08:50:46 | 显示全部楼层
啤酒瓶空了缓 2023-5-22 08:50:46 看全部
楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
发表于 2023-5-22 09:10:55 | 显示全部楼层
心随674 2023-5-22 09:10:55 看全部
论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛。
发表于 2023-5-22 10:13:18 | 显示全部楼层
123456809 2023-5-22 10:13:18 看全部
这东西我收了!谢谢楼主!知鸟论坛真好!
发表于 2023-5-22 12:01:59 | 显示全部楼层
向往草原403 2023-5-22 12:01:59 看全部
这东西我收了!谢谢楼主!知鸟论坛真好!
发表于 2023-5-22 14:31:10 | 显示全部楼层
音乐之家1 2023-5-22 14:31:10 看全部
楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
发表于 2023-5-22 14:32:29 | 显示全部楼层
风吹吹蛋蛋疼风w 2023-5-22 14:32:29 看全部
这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
  • 您可能感兴趣
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

RSS订阅| 小黑屋| 知鸟论坛 |网站地图
本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
快速回复 返回顶部 返回列表