首页
社区
课程
招聘
[原创]关于LOL动态皮肤修改的逆向与实现
发表于: 2018-12-3 09:18 16390

[原创]关于LOL动态皮肤修改的逆向与实现

2018-12-3 09:18
16390

        第一次在看雪这种地方发这种帖子,心里很动荡不安。因为我本身很菜,所以有哪里不足的请大佬多多包涵并指出。。


        最近莫名其妙又染上LOL这个游戏了,然后突然想到之前网上的动态换肤辅助,所以就打算下载一个然后搞搞事,最后虽然是弄出来了,但是因为技术比较差。在实现方面会因为和游戏主线程冲突,导致游戏崩掉(原因看文章结尾)。下面我开始上分析。Ps:本人技术以及表达能力都很差,请大家见谅。(因为在写这篇文章的时候,我是一边分析一边写这篇文章所以游戏可能是已经结束的状态。但是如果有需要调试游戏的话,我会重新打开游戏进行调试,所以会发现有一些图片和数据是不一样的,重要的是分析)


在开始分析的时候,因为我以前搞过这游戏,所以我知道这个实现动态换皮肤是需要一个皮肤ID的。所以我就直接打开下载好的辅助,来进行找这个ID。

辅助图片如下:

                                                                                             


         在这里先说一下如何去找一个英雄皮肤ID,所谓的英雄皮肤ID指的是某个英雄他的皮肤数从0开始算,比如【暗裔剑魔】有4个皮肤,那么他的皮肤ID就是0(默认皮肤)、1、2、3。如下图: 


                         

       于是我在寻找这个ID的时候就是按照这种方法来寻找,因为默认皮肤的ID为0,所以我通过辅助来换到下一个皮肤的时候,我搜索1,这样慢慢的搜索,最后就会剩下一个我们需要的地址。下面我以【剑圣】为例(搜索好了的)。




         然后我们右键访问这个地址,然后去自杀。因为在人物复活的时候皮肤CALL会访问这个皮肤ID来重新对皮肤进行初始化,然后我们就可以通过这个来找出皮肤CALL。下图是该地址在人物复活的时候被访问

                       



       现在出现了下面两条:



                                                     

          我们会发现eax=0,esi=7DE7D2E8。回到游戏我们会发现我们原本换好的皮肤现在变成默认的皮肤了,也就是皮肤ID变成了0。然后还会发现esi+0x40=7DE7D328,而7DE7D328这个地址刚刚好就是我们搜索出来的皮肤ID地址,就是说我们在复活的时候游戏会把0赋值给我们的皮肤ID地址,让我们的皮肤变成默认的皮肤。那么这个地方很可能就是一个皮肤CALL的传参关键。。。。。然后我们看第二条,一样查看详细信息

                                                     

           发现edi=7DE7D2E8,然后把edi+0x40的值传进ebx,而这个edi+0x40刚好是我们搜索到的这个皮肤ID地址。可是我们来想一下,此时这个时候皮肤ID地址的值已经为0,说明游戏在执行到这个语句之前,皮肤ID的值已经被改变,就是说在执行到这条语句之前皮肤已经被修改过,所以这条语句不太可能是调用皮肤CALL之前的语句,而是在调用皮肤CALL之后的语句。

       以上分析后,发现只有第一条

      

       符合我们的要求,我们记录他的地址00581B6B,然后扔到OD里查看



              我们打开OD,Ctrl+G输入我们记录的地址然后回车跳到这一行代码。有意思的地方到了,在反汇编窗口中可以看到在eax传进皮肤ID地址后,立即去执行了一个CALL,这个就引起了我们的注意,因为我上面说过,调用皮肤CALL需要的一个参数就是皮肤ID值。现在我们在这个CALL下一个断点,然后去送自杀,等待复活。注意:这个CALL需要在即将复活的那一瞬间下断,不然会被其他地方调用的时候断下,这个时候所返回的数据是不正确的。




     当人物即将重生的时候游戏断了下来

    看右边,EAX的值依然为0。这个时候往上看一下EAX的来源:


           然后在我开始研究的时候,第一想法是去追这个esp的来源然后想直接通过找到的最终地址加上各种偏移来修改皮肤的,然后发现追不到。结果重新思考一下发现是没有必要的去追这个esp的,因为我直接可以在调用这段的时候给eax一个皮肤ID的值或者直接把皮肤ID的值传进皮肤ID地址(esi+0x40)里,然后直接调用下面的那个CALL就ojbk了。于是我就打算尝试直接调用这个CALL看看效果。为了弄懂调用这个CALL需要哪些参数的需要,我们继续分析。

这里先贴上这个部分的反汇编代码:


           首先:把esi传进了ecx,然后压入一个1,之后把eax传进[esi+0x40],最后就直接去调用CALL。到发现这里没看到esi的值是哪里来的,所以要么esi的传值操作在上面,要么就在上一层。我们往上找看看有没有对esi赋值的语句。哟西,果然有

                            

          把ecx的值传进esi,然后又发现上面没有对ecx的传值操作,那只能去上一层找。我们在程序头下断点,然后去自杀,等复活。等我们即将复活的时候断点断了下来,我们直接快捷键返回上一层,这个时候会看到有对ecx的传值操作。




        我们在这里下一个断然后去自杀等复活,看看断下来的时候edi的值


    

     edi=5D395010


                          

                    

               

            会发现出现一个绿色的值,我们把它拉下来查看地址

                         

       032A6DCC ("League of Legends.exe"+2EA6DCC)

      那么032A6DCC这个估计就是人物地址了,所以

      ecx=[0x032A6DC]+0x32B8C   // lea ecx,[edi+0x32B8]

      因为esi=ecx,由此可知皮肤ID的地址=[0x032A6DC]+0x32B8C+0x40

      我们现在找出ecx的值了,我们返回到刚刚的这个位置

      



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-12-3 12:30 被PlaneJun编辑 ,原因: 补充一点内容
收藏
免费 7
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  junkboy   +1.00 2018/12/05
最新回复 (27)
雪    币: 26398
活跃值: (63257)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
感谢分享!
2018-12-3 09:22
0
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
3
在看雪发鹅厂的游戏 不给关键数据打码 估计等下这贴****
最后于 2018-12-3 11:25 被kanxue编辑 ,原因:
2018-12-3 10:39
0
雪    币: 269
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哈哈是不是可以拿着最后这段代码修改皮肤了
2018-12-3 10:54
0
雪    币: 2473
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
hzqst 在看雪发鹅厂的游戏 不给关键数据打码 估计等下这贴就要进****了
*****
最后于 2018-12-3 11:25 被kanxue编辑 ,原因:
2018-12-3 11:05
0
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
6
PYGame ****啊
********** 现在不知道了
最后于 2018-12-3 11:25 被kanxue编辑 ,原因:
2018-12-3 11:14
0
雪    币: 164
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
先下载下来在看
2018-12-3 11:15
0
雪    币: 47147
活跃值: (20415)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
8
3~6楼帖编辑了一下,低调低调
2018-12-3 11:26
0
雪    币: 10946
活跃值: (2900)
能力值: ( LV5,RANK:71 )
在线值:
发帖
回帖
粉丝
9
tp什么的都无效吗?
2018-12-3 13:44
0
雪    币: 1258
活跃值: (1434)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
低调低调,肯定是要被河蟹的。
2018-12-3 14:01
0
雪    币: 6977
活跃值: (1786)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
这种方式肯定会被检测的,我这里有个外国小哥开发的,稳定玩了半年了
2018-12-3 14:35
0
雪    币: 3466
活跃值: (1300)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
TopC 这种方式肯定会被检测的,我这里有个外国小哥开发的,稳定玩了半年了
分享一下
最后于 2019-1-30 16:33 被晴空暖暖编辑 ,原因:
2018-12-3 17:16
0
雪    币: 3545
活跃值: (4684)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
在两年前吧  你怎么改 就算改发包也不行 必须强行干了TenRPCS的检测 因为他是主动从服务器获取的皮肤ID再来读取校验
根本上防住了改皮肤 后面.....

以上都是我瞎说 如果说对了 那肯定不是我说的!
2018-12-3 17:36
0
雪    币: 4709
活跃值: (1575)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
14
感谢分享鸭
2018-12-3 18:29
0
雪    币: 122
活跃值: (7471)
能力值: ( LV9,RANK:335 )
在线值:
发帖
回帖
粉丝
15
我很伤,我觉得大家没看懂我文章标题吗?逆向分析与实现方法。我只是分享了方法。封不封号和会不会封那个是你们自己的问题。为什么你们要争执过检测这个东西?如果想不封号那就自己过crc检测
2018-12-3 18:44
0
雪    币: 6524
活跃值: (4316)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
16
TX的东西有毒,在看雪放完几天就会改。
2018-12-3 20:05
0
雪    币: 665
活跃值: (1051)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
这个看起来像是任鸟飞中级班教程啊哈哈哈..
2018-12-3 22:14
0
雪    币: 854
活跃值: (69)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
tx:知道了。改改改
2018-12-4 15:34
0
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
支持
2018-12-5 14:33
0
雪    币: 66
活跃值: (2735)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
文章通畅 挺不错的
2018-12-13 11:23
0
雪    币: 6124
活跃值: (4651)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
21
楼主说的这个方法就是直接调用死亡call或者创建call来强制让游戏刷新人物模型重新渲染达到换肤的目的。目前动态换肤基本都是这个思路。检测的话,tx现在LOL大部分检测已经不开了,你要过这个检测应该只有一个call stack检测 还有救是rcps哪里发包的你得把包里面那个id改成默认的也就是0这样就能完美过检测了。
2018-12-18 14:37
0
雪    币: 236
活跃值: (107)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
最近玩LOL,按照楼主的方法修改皮肤是成功的,可是改完技能没有特效........。
2019-6-13 10:49
0
雪    币: 441
活跃值: (1035)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
23
难道没有保护的嘛,你这ce od 咋随便用的
2019-6-13 12:44
0
雪    币: 5
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
楼主牛B啊,怎么做到调试LOL的
2019-7-24 15:30
0
雪    币: 266
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
厉害啊
2020-5-25 11:38
0
游客
登录 | 注册 方可回帖
返回
//