最近,Escape From Tarkov的开发商Battlestate Games聘请BattlEye对联网的数据包实施加密,以使作弊者无法捕获这些数据包,无法对其进行解析并以雷达作弊或其他形式将其用于其优势。今天,我们将详细介绍我们如何在解密文件。
我们首先从分析“逃离塔尔科夫”本身开始。该游戏使用Unity Engine,该引擎使用C#(一种中间语言),这意味着您可以通过在ILDasm或dnSpy之类的工具中打开游戏来轻松查看源代码。我们为此分析选择的工具是dnSpy。
Unity Engine(如果不在IL2CPP选项下)将生成游戏文件并将其放置在GAME_NAME_Data\Managed
(在本例中为)下EscapeFromTarkov_Data\Managed
。此文件夹包含引擎使用的所有依赖项,包括包含游戏代码的Assembly-CSharp.dll
文件,我们将其加载到dnSpy中,然后搜索字符串encryption
,使我们进入了这里:
该网段位于名为EFT.ChannelCombined
的类中,该类是处理网络的类,您可以通过传递给它的参数来辨别:
右键单击channelCombined.bool_2
,该变量是他们记录的变量,以指示是否启用了加密,然后单击“分析”,向我们显示该方法已被2种方法引用:
第二个是我们当前所在的那个,因此,双击第一个,它就落在了这个上:
瞧!我们调用了BEClient.EncryptPacket,当您单击该方法时,它将带您到BEClient类,然后我们可以对其进行剖析并找到一个名为的方法DecryptServerPacket
,该方法将调用一个BEClient_x64.dll
名为的函数,该函数pfnDecryptServerPacket
会将数据解密为用户分配的缓冲区,并将解密缓冲区的大小写入调用方提供的指针中。
pfnDecryptServerPacket
不是由BattlEye导出的,也不是由EFT计算的,它实际上是由游戏曾经调用过的BattlEye的初始化程序提供的。通过将BattlEye加载到我们自己的进程中,并复制了游戏的初始化方式,我们设法计算了RVA(相对虚拟地址)。
正如我们在上一节中得出的那样,EFT调用BattlEye来完成其所有加密需求。因此,现在要解决的是反转本机代码,而不是IL,这要困难得多。
BattlEye使用称为VMProtect的保护程序,该保护程序可虚拟化和变异开发人员指定的段。要正确反转受此混淆器保护的二进制文件,您需要解压缩它。
解压缩就像在运行时转储映像一样简单。为此,我们将其加载到本地进程中,然后使用Scylla将其内存转储到磁盘。
在IDA中打开此文件,然后转到DecryptServerPacket
例程将使我们找到一个如下所示的函数:
这就是所谓的a vmentry
,它将a压vmkey
入堆栈,然后调用a vminit
作为虚拟机的处理程序。
这是棘手的部分:由于VMProtect已对其进行“虚拟化”,因此该函数中的指令仅可由程序本身理解。
对我们来说幸运的是,秘密俱乐部的同伴can1357制作了一个完全打破这种保护的工具,您可以在VTIL上找到它。
VTIL生成的文件将功能从12195指令减少到265,从而大大简化了项目。反汇编中存在一些VMProtect例程,但是这些例程很容易识别并且可以忽略,加密从此处开始:
等效于伪C:
uint32_t flag_check = *(uint32_t*)(image_base + 0x4f8ac);
if (flag_check != 0x1b)
goto 0x20e445;
else
goto 0x20e52b;
VTIL使用其自己的指令集,我将此翻译为psuedo-C以进一步简化它。
我们通过进入0x20e445
,这是一个跳转到0x1a0a4a
,分析了该例程,在此函数的开头,它们移动了sr12
,它是的副本rcx
(默认x64调用约定的第一个参数),并将其存储在上的堆栈中[rsp+0x68]
,的xor键[rsp+0x58]
。
然后0x1196fd
,该例程跳转到,即:
等效于伪C:
uint32_t xor_key_1 = *(uint32_t*)(packet_data + 3) ^ xor_key;
(void(*)(uint8_t*, size_t, uint32_t))(0x3dccb7)(packet_data, packet_len, xor_key_1);
请注意,rsi
是rcx
和sr47
是的副本rdx
。由于这是x64,因此它们0x3dccb7
以以下顺序调用参数:(rcx,rdx,r8)。vxcallq
VTIL 对我们来说很幸运call into function, pause virtual exectuion then return into virtual machine
,所以0x3dccb7
不是虚拟功能!
在IDA中进入该功能并按F5
将会弹出反编译器生成的伪代码:
对于一些完全没有意义的随机内联汇编,此代码看起来难以理解。一旦我们删除了这些指令,更改一些var类型,然后再次按F5键,代码就会看起来更好:
此功能使用滚动XOR密钥从第8个字节开始不连续地以4字节块为单位解密数据包。
一旦我们继续查看程序集,我们就会发现它在这里调用了另一个例程:
在x64汇编中等效:
mov t225, dword ptr [rsi+0x3]
mov t231, byte ptr [rbx]
add t231, 0xff ; uhoh, overflow;
the following is psuedo
mov [$flags], t231 u< rbx:8
not t231
movsx t230, t231
mov [$flags+6], t230 == 0
mov [$flags+7], t230 < 0
movsx t234, rbx
mov [$flags+11], t234 < 0
mov t236, t234 < 1
mov t235, [$flags+11] != t236
and [$flags+11], t235
mov rdx, sr46 ; sr46=rdx
mov r9, r8
sbb eax, eax ; this will result in the CF (carry flag) being written to EAX
mov r8, t225
mov t244, rax
and t244, 0x11 ; the value of t244 will be determined by the sbb from above, it'll be either -1 or 0
shr r8, t244 ; if the value of this shift is a 0, that means nothing will happen to the data, otherwise it'll shift it to the right by 0x11
mov rcx, rsi
mov [rsp+0x20], r9
mov [rsp+0x28], [rsp+0x68]
call 0x3dce60
在继续剖析其调用的函数之前,我们必须得出以下结论:由于未设置进位标志,导致移位无意义,从而导致sbb
指令的返回值为0 ,这意味着我们走错了路。
如果我们寻找对第一个例程的引用0x1196fd
,我们会发现它实际上是再次被引用的,这次是使用另一个键!
这意味着第一个键实际上是红色鲱鱼,而第二个键很可能是正确的。尼斯巴斯蒂安!
现在,我们已经找到了真正的xor键和的参数0x3dce60
,它们的顺序如下:(rcx,rdx,r8,r9,rsp + 0x20,rsp + 0x28)。
我们在IDA中转到该功能,按F5键,它非常可读:
我们知道参数的顺序,它们的类型和含义,剩下的唯一就是将其转换为实际的代码,我们已经很好地完成了此工作,并将其包装在此处的要点中。
这种加密并不是最难的反向工程,并且BattlEye确实注意到了我们的努力。3天后,加密更改为类似TLS的模型,其中RSA用于安全地交换AES密钥。这使得不能在所有意图和目的下读取过程存储器的MITM都是不可行的。
当青岛*测控技术有限公司遇上安企神,测控技术数据安全将迎来哪些新变化?
海*测控技术有限公司是海*微电子有限公司100%控股子公司,是由青岛市政府、山东省政府及行业领军企业共同出资成立的第三方检测平台。旨在集成电路可靠性验证及测试分析领域打造国内一流集成电路检测、分析、设计开发及技术解决方案等集成电路产业共性技术服务平台。海*以海洋装备和高端设备集成电路可靠性验证和测试分析为特色,主要为海...
"聚势谋远:重庆*医药集团与安企神达成战略合作,探索医药+科技融合发展新路径!
重庆*医药集团有限公司成立于2017年8月,是在重庆市*区医药(集团)有限责任公司基础上组建成立的大型医药产业企业。是重庆*经济技术开发(集团)有限公司控股的混合所有制企业和市级重点项目三峡国际健康产业园投资单位,位列全国百强医药流通企业。公司下辖重庆*制药有限公司、*医药科技重庆有限公司、重庆*肿瘤医院等十余家子公司...
聚焦核心数据安全:山东卫禾*股份有限公司携手安企神软件构建防泄密屏障!
项目背景山东卫禾*股份有限公司于2015年注册成立,公司拥有总资产1.5亿元,公司具有齿轮检测中心、三坐标测量仪、全谱直读光谱仪等关键研发设备。运用UGNX7.5、MASTA5.4等研发软件进行研发,具有强大的技术研发能力,拥有31项专利,坚持产学研结合,设有山东卫禾*技术研究院,并不断加强研发平台建设,打造创新型企业...
安全+智造双升级!江阴*电子有限公司携手安企神开启企业防护新时代!
江阴*电子有限公司成立于1989年,是一家电子元器件集成设计和生产服务的领先供应商。产品应用包括数据采集、计算机外围设备和其他电子产品。还进入了汽车电子行业、航空航天行业、工业控制行业、医疗器械行业和消费电子行业,为客户提供更广泛的高附加值产品和服务。随着科技产业的快速发展和市场需求的增加,现已成功转型为一家提供完整解...
福建*医药公司联手安企神软件,成功落地应用程序、网站黑名单设置与USB管控方案!
项目背景福建*医药有限公司前身是福建*工贸责任有限公司,2015年重组后成为中国五百强企业——*医药集团的子公司。 系中国最大的民营医药集团,是在中国医药商业行业处于领先地位的上市公司。公司成立于2015年08月04日,经营范围包括中药饮片、中成药、化学原料药、化学药制剂等。应用需求管控公司电脑安装程序和使用程序,禁...