游戏安全实验室 首页 游戏漏洞 查看内容

【游戏漏洞】Dnf游戏漏洞挖掘第4期 全屏秒杀+远程CALL

发布于:2018-5-28 11:12   |    147448次阅读 作者: 外部投稿

1. 线索:

利用我们第一节课学到的无CD找法,找到放技能相关的关键点。接着,这节课我们要分析释放技能的相关CALL,实现全屏技能秒杀CALL。

启动DXF,CE搜索,OD附加

2. 调试:

0227BC22 无CD的地址 [分析与查找见本系列教程第二课],我们到了16级了,可以体验转职后的技能,在无CD的地址下好断点,往上回溯,我们知道这里是判断的地方,我们需要找到真正放技能的地址

我们在判断CD的地方走出来后,发现了这样的代码

006C01A0    6A 01           push    0x1

006C01A2    6A 00           push    0x0

006C01A4    6A 00           push    0x0

006C01A6    6A FF           push    -0x1

006C01A8    6A 01           push    0x1

006C01AA    6A 01           push    0x1

006C01AC    6A 01           push    0x1

006C01AE    51              push    ecx

006C01AF    8BCE            mov     ecx, esi

006C01B1    E8 DA9B4A01     call    01B69D90                         ;

我们尝试把返回值修改为0试试,我们可以看到,技能的CD刷新了,但是却没有释放出来效果,可以判断这里就是一个判断技能能否释放,然后刷新CD,蓝量相关的代码。真正的效果还是在下面,我们把之前的无CD关闭..

我们看到,这里的返回值如果是1的话,就算在CD中也可以释放。那么我们就需要调用的是这个CALL了

006C01BA    6A 01           push    0x1

006C01BC    6A 00           push    0x0

006C01BE    6A 00           push    0x0

006C01C0    6A 01           push    0x1

006C01C2    6A 00           push    0x0

006C01C4    6A 69           push    0x69

006C01C6    8BCE            mov     ecx, esi

006C01C8    E8 D3974A01     call    01B699A0

这个CALL看上去只有一个地方是变量,那就是ecx

这是上一次启动Dxf的ecx 498E2940,

这是这一次的ECX 46E62940 ,

Ecx = 4C172940

他们是会变化的,那么我们需要先测试一下,看一下这个到底是不是我们需要找的技能CALL

我们把ecx直接修改为刚刚得到的值,然后利用工具去调用CALL测试,发现可以

push    0x1

push    0x0

push    0x0

push    0x1

push    0x0

push    0x69

mov    ecx, 46E62940

call     01B699A0

 

我们去这个CALL里面看下释放其他技能是什么样子的,我们发现有个技能的第二个参数没有处理就会引发游戏崩溃。其他的不涉及到第二个参数是没有问题的,我们去副本中测试一下,看如果我们没有拥有这个技能,是否也可以释放出来。

0019EB94   00000065

0019EB98   0019EBB4

0019EB9C   00000001

0019EBA0   00000000

0019EBA4   00000000

0019EBA8   00000001

 

可以看到,我们就算是没有这个技能,也是可以通过调用这个CALL来实现释放这个技能的,我们可以看到,这个CALL有个地方是变量,游戏每次启动的都不一样,那我们怎么定位这个地方呢,我们打开CE,利用指针搜索扫描这个地址,扫描完成后,我们重新打开游戏,然后再次搜索变化的地址,再次拿到ecx的值4C6E2940,在CE中重新扫描

我们得到了许多的多级地址,我们这里采用简单原则,越简单越不容易出错的原则,选用级数最少的那个

[[[[Dnf.exe + 0x49f5700] + 0x1b4]+0x6f8]+4fc]我们去od中测试一下

[[[00400000 + 0x49f5700] + 0x1b4]+0x6f8]+4fc(这里由于疏忽找错了数据,下文已经更正,视频中已重新分析,此说明针对word投稿特意说明)  这样,我们就得到了地址,而且我们发现就算ecx不一样,调用其它技能也是没有问题的

我们去采集下不同职业的大招

无尽侵蚀:

0019ED00   00000069

0019ED04   00000000

0019ED08   00000001

0019ED0C   00000000

0019ED10   00000000

0019ED14   00000001

 

我们可以看到第二个参数需要再处理,这里我们先用别的

破灭斩:

 

0019ED00   0000002E

0019ED04   00000000

0019ED08   00000001

0019ED0C   00000000

0019ED10   00000000

0019ED14   00000001

 

坠蚀之雨

0019ED00   00000066

0019ED04   00000000

0019ED08   00000001

0019ED0C   00000000

0019ED10   00000000

0019ED14   00000001

 

我们目前采集完了,现在就该把我们刚刚的多级地址配合这个CALL转换成汇编的样子了

[[[[[Dxf + 49F5700]+1B4]+80]+54]+1F8]+4FC

写好的代码如下:刚刚写错了,现在我们要开始编程实现自己的程序了

 

pushad

pushfd

mov eax,0x0400000

mov eax,[eax + 0x49f5700]

mov eax,[eax + 0x1b4]

mov eax,[eax + 0x80]

mov eax,[eax + 0x54]

mov eax,[eax + 0x1f8]

add eax,4fc

mov ecx,eax

 

push    0x1

push    0x0

push    0x0

push    0x1

push    0x0

push    0x69

call    01B699A0

 

popfd

popad

 

3. 测试

4. 编程

打开我们之前的VS工程 ,下面来测试一下,由于我们刚刚找的基不对,游戏重新开始后,基变化了,我们需要再用CE搜索一边,所以在搜索指针的时候一定要确认3遍以上

下面我们使用新的地址测试

[[[[[Dxf + 49F5700]+1B4]+80]+54]+1F8]+4FC

 

没问题了,我们把其他的地址也修改

5. 总结

1. 根据无CD找到判断技能的关键点,然后再利用这个找到真正释放技能的函数

2. 根据技能释放的参数,找到多级偏移并且利用

3. 学习如何编写动态CALL

4. 编程实现CALL的注入以及如何测试CALL

5. 本文所讲解的功能仅供学习交流,请勿用作非法用途



来源:邮件投稿

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

GSLAB网站投稿文章仅代表作者本人的观点,与本网站立场无关。

分享到:
踩0 赞0

收藏

上一篇:【游戏漏洞】QQ西游发包分析

下一篇:【游戏漏洞】QQ西游人物对象数据追踪

最新评论
B Color Image Link Quote Code Smilies

发表评论

top 问题反馈

返回顶部