致力于分享游戏安全技术,提供专业的游戏安全资讯
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)
近期精品文章:
∨
投稿文章:[email protected]
原文始发于微信公众号(游戏安全实验室):【游戏漏洞】Dnf游戏漏洞挖掘第4期 全屏秒杀+远程CALL
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论