请选择 进入手机版 | 继续访问电脑版

[脑洞大开的玩] 安全文库带你一起吃鸡!(对绝地求生大逃杀某辅助的分析)

[复制链接]
查看: 2210|回复: 0

44

主题

78

帖子

812

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
812

SRC部落文库认证VIP会员专家顾问团文库巡逻文库游侠限定版文库段子手荣誉管理

发表于 2017-10-12 01:04:06 | 显示全部楼层 |阅读模式
点击标题下「安全文库」可快速关注
1文库带你一起吃鸡
注:相关DLL以及特征码已提交给官方切勿做一些不该做的事。
01class吃鸡吃鸡绝地求生是目前蛮火的一款游戏,同时这款游戏也存在很多的辅助,今天偶然我发现一个辅助只是单纯的透视,它对人物进行透视、染色。
1直接上图
111.png

我们都知道,3D游戏有使用两种渲染方法:第一种为Direct3D(简称D3D),另一种为opengl,所以一旦这个游戏使用了opengl方法就不能使用D3D透视。我先来说一下一般的D3D透视的基本操作:首先是获取游戏中人物坐标,再对其上色,使其达到透视效果。这款辅助是使用自己写的dll去注入到游戏中。
2 2.png
由定义函数可以看出,此dll定义了creationflags(定义动画),还有线程、模块。在此对其模块 线程进行加载,同时在异或r9d之后开始进行HOOK。在startAddress中为:
3.png

首先先用了__security_cookie机制去防止栈溢出,其次在使用AllocConsole为程序开启一个新的控制台,在用freopen寻找并打开线程、模块。在用SetConsoleTitleA函数设置命令控制台的标题。再其调用其CALL(sub_1800045F0)
sub_1800045F0内容:
4.png
反编译如下:
5.png
看样子是输出什么东西,又调用了call(sub_180003F00),再进入其call:
6.png
反编译:
7.png
3
(std::ios_base::width)先是读取/设定流的输出数据的显示宽度。(ios_base::flags)读取/设置流的格式(管理员格式标识)。sub_1800043D0其内容:
8.png
(std::ios_base::good)检查流的状态是否良好。

(std::basic_ios<char,std::char_traits<char>>::tie)使用管理员绑定的流。
(std::basic_ostream<char,std::char_traits<char>>::flush)清空流。
这段的意思就是获取游戏的流,用管理员模式去对流进行标识,最后检查流是否良好,否则就返回false。
(ps:对于std::basic_ios不理解的可以查看:http://zh.cppreference.com/w/cpp/io/basic_ios
9.png
(std::basic_ios<char,std::char_traits<char>>::rdbuf)将一个字符写入输出序列如果输出序列写位置不可用(缓冲区已满),则调用溢出(CH)。
全部的意思就是先是找到游戏的进程,再用管理员模式进行标识,再其对流进行设定,填充,如果流溢出,则调用溢出。以上就是call(sub_1800045F0)中的内容。
10.png
调用其call后,(GetForegroundWindow)去获取一个前台窗口的句柄。
11.png
GetWindowLongPtrA:在指定窗口中获取信息。
这段意思就是在获取游戏的信息。之后对比了rax中的值是否等0,如等则跳转到:
12.png
为这参数+1.否则直接跳到loc_180003C5D
4
13.png
此处创建用于渲染的显示设备和交换连接,在比较sf异或of=0 ,等于则调转,如果不等于则调用callsub_1800046A0
14.png
如果渲染显示设备或者交换连接失败则弹出错误,再调用call(sub_180003F00)对游戏流和游戏内容重新设置。这段其实就是在检查渲染是否开启成功,如果开启不成功就继续对流进行设置。 loc_180003D13内容如下:
15.png
可以看到为了避免防闪烁调用call(sub_180004630(数据流的调用))了pSwapChainVT来进行绘图,在硬件中有两个缓存:第一个为:前置缓存,另一个为:后置缓存。前置缓存执行当前将被显示在显示器上的图形数据,与此同时,下一帧正在后置缓存中绘制。在前置缓存都被画完后,两个缓存的关系翻转,前置缓存变成后置缓存,后置缓存变成前置缓存,这个交换的过程称为呈现,如果需要实现缓存交换的话只要定义两个指针相互交换就可以。
再其底下则使用pDeviceVT,同时也使用call(sub_180004630)数据流来进行。
16.png
以下都使用数据流的call来进行D3D11PRESENT(对D3D DLL的HOOK)(ps:我在其网上找了一份源码,有兴趣的可以去看看。)D3D11DRAWINDEXED(对D3D人物进行上色)
17.png
此处用指针指向sub_180004C00,其内容:
18.png
19.png
此处反汇编如下:
20.png
21.png
22.png
23.png
以上就是D3D绘图的初始化。
24.png
25.png
此处调用了call(sub_180004830)
26.png
最底下的call(sub_180005130)
27.png
此处调用了两个call:
第一个call:
28.png
Call中call:
29.png
这个call送格式化输出到串中(返回字符串的长度)。
第二个call:
30.png
防止栈溢出。Call(sub_180005130)就是送格式化输出到串中并且防止栈溢出,其实说白了就是传游戏人物中的位置。出call后
31.png
此处调用D3DCompile对人物进行了染色。(ps:D3DCompile方法使用:https://msdn.microsoft.com/en-us/library/dd607324(VS.85).aspx)。其实说白了这个辅助的过程就是使用数据流去搜索人物的位置,在开启VT再对其染色。所以一般的D3D透视都是需要开启VT。这就是对这款只有透视辅助的分析,本人对制作辅助不是很了解,辅助中是否存放人物的基质我也不是很明白,还望各位大神多多指教。

辅助透视源码下载地址
bbs.safewiki.org/web/D3D透视源码.txt

分析人:AhRMo

回复 印象

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩图文
在线客服(工作时间:9:00-22:00)
400-600-6565
安全文库公众号

Copyright   ©2015-2016  文库学院  Powered by©上海盾客网络科技有限公司  技术支持:安全文库    ( 闽ICP备15007866号-2 )