【首发】LOL换肤的功能的制作原理及其实现解析

社区服务
高级搜索
猴岛论坛LOL英雄联盟【首发】LOL换肤的功能的制作原理及其实现解析
发帖 回复
倒序阅读 最近浏览的帖子最近浏览的版块
4个回复

【首发】LOL换肤的功能的制作原理及其实现解析

楼层直达
小枫工作组

ZxID:17878826

等级: 上尉
举报 只看楼主 使用道具 楼主   发表于: 2014-06-11 0
修改皮肤的原理:
在游戏的目录里文件Game\Logs\Game - R3d Logs
可以查看到如以下2行关键字

Spawning champion (英雄名称) with skinID 皮肤编号 on team 队伍分类 for clientID 游戏ID and summonername (召唤师名称)

(is 玩家或AI判断)

Hero 英雄名称(皮肤编号) created for 召唤师名称

这时候用IDA静态反汇编主程序寻找以上关键字,可以得知由以下CALL引用:
sub_658E90(召唤师名称, 英雄名称, 皮肤编号, 队伍分类, 未知参数, 游戏编号, 未知参数, 未知参数, 判断是否为对战或AI, 未知参数)


其中队伍分类只分成蓝、紫方分別为100和200
游戏编号是英雄在队伍里的编号,10位召唤师编号0~9

特征码(Array Of Byte):57 FF 73 13 8D BB 97 00 00 00 8B D7 E8
以下是寻找到的参数调用
mov eax,[ebx+09]
mov [ecx],eax
lea ecx,[esp+0000024C]
cmp dword ptr [esp+00000260],10
lea eax,[esp+00000218]
push eax
cmovae ecx,[esp+00000250]
mov eax,00000064
cmp byte ptr [ebx+0F],00
cmovne edi,eax
push edi
push [ebx+13]
lea edi,[ebx+00000097]
mov edx,edi
call 00258E90

esp+24C = ecx = 召唤师名称
队伍分类预设值是200
检查 [ebx+F] 是否为1
是1的话将队伍分类改为100  

[ebx+13] = 皮肤编号
[ebx+97] = 英雄名称

总结 %后为格式化字符串:
  1. ecx       = 召唤师名称
  2. ebx+5   = (DWORD) ObjID    %d
  3. ebx+9   = (DWORD) clientID %i
  4. ebx+D   = (BYTE)  NodeID    %d
  5. ebx+F   = 0(200) or 1(100) 队伍判断(蓝 or 紫)
  6. ebx+10h = (BYTE) 有值为召唤师,不然就是AI
  7. ebx+13h = (BYTE) skinID       %d
  8. ebx+97h = 英雄名称               %s



PATCH掉sub_658E90 (不一定就是sub_658E90 ,游戏更新便有几率变化) 后以如下方式进行参数替换:
[    post]__asm
{
  mov summonername,ecx
  pushad
  lea edi,[ebx+97h]
  mov champion,edi
  call Get_champion_skinID //根据英雄名字取预先设置好的皮肤ID,可事先做好map,或直接赋值[ebx+13h] ,当然,编号必须与英雄是对应的。英雄与皮肤是一对多关系。
  cmp NameCheck,0
  je Normal
  mov NameCheck,0
  cmp skinID,0
  je Normal
  mov eax,skinID
  mov [ebx+13h],eax
Normal:
  popad
  push [ebx+13h]
  lea edi,[ebx+97h]
  jmp [originalPatchAddress]
}[/post]
以上虽为台服LOL换肤做法,其实在国服的实现方法也是一模一样的。方法也不止这一种。
奢華

ZxID:24230132

等级: 少将

举报 只看该作者 沙发   发表于: 2014-06-11 0
大婶你好  好久不见
2232217873

ZxID:52357735

等级: 新兵
举报 只看该作者 板凳   发表于: 2014-08-08 0
本人真心想学习怎么找到call的,看到此贴有1过多月了,天天都在找,实在没办法,请楼主赐教。QQ:857271370
本帖提到的人: @小枫工作组

际遇之神

惩罚

小贼们潜入2232217873家, 偷了 DB2

qq079d6

ZxID:43743931

等级: 大尉
举报 只看该作者 地板   发表于: 2014-08-08 0
不觉明历
短暂经历

ZxID:38826989

等级: 上士
平少-网络
举报 只看该作者 4楼  发表于: 2014-08-08 0
看不懂..
Y
« 返回列表
发帖 回复