首页 > 动态中心 > 技术文章  >  正文

破解BattlEye数据包加密

2023-06-15 00:00:00

文章摘要:最近,Escape From Tarkov的开发商Battlestate Games聘请BattlEye对联网的数据包实施加密,以使作弊者无法捕获这些数据包,无法对其进行解析并以雷达作弊或其他形式将其用于其优势。今天,我们将详细介绍我们如何在解密文件。推荐阅读:如何选购企业数据加密软件?电汇分析我们首先从分析“逃离塔尔科夫”本身开始。该游戏使用Unity Engine,该引擎使用C#(一种中间语言

最近,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(相对虚拟地址)。

BattlEye的分析

正如我们在上一节中得出的那样,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);

请注意,rsircxsr47是的副本rdx。由于这是x64,因此它们0x3dccb7以以下顺序调用参数:(rcx,rdx,r8)。vxcallqVTIL 对我们来说很幸运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都是不可行的。

上一篇 : Magic Leap起诉中国工程师窃取技术遭驳回!
  • 相关推荐
  • 电脑文件加密必备!2024精选十款加密软件,保护数据安全

    在数字化时代,数据安全已成为不可忽视的重要议题。为了守护您宝贵的文件信息,我们精心挑选了十款2024年的电脑文件加密软件。这些软件各具特色,采用先进的加密技术,确保您的数据在存储和传输过程中的安全性。无论是个人用户还是企业用户,都能在这些软件中找到适合自己的加密解决方案,让数据安全无忧,尽享数字生活的便捷与安心。1、洞...

    2024-10-18 14:55:23
  • 图纸加密软件推荐|2024年8款CAD加密软件推荐

    在数字化时代,图纸作为设计与创新的重要载体,其安全性日益凸显。2024年,随着技术的不断进步,CAD图纸加密软件成为守护创意与知识产权的坚实盾牌。本文将为您精选8款优秀的CAD加密软件,它们各具特色,以强大的加密技术、灵活的权限管理、便捷的操作体验,共同构筑起图纸安全的铜墙铁壁。让我们一同探索,为图纸安全保驾护航。1、...

    2024-10-18 10:26:53
  • 加密软件有哪些?精选六款加密软件,让企业数据更安全!

    在数字化时代,企业数据的安全至关重要。为了保障企业信息的机密性和完整性,选择一款合适的加密软件显得尤为重要。本文精选了六款加密软件,它们各具特色,功能强大,能够为企业提供全方位的数据加密保护。这些软件都能确保企业数据在传输和存储过程中的安全,助力企业构建坚不可摧的数据安全防线。1、洞察眼MIT系统采用先进的加密算法,能...

    2024-10-17 10:50:10
  • 数据怎么加密?2024年五款企业数据加密必备软件

    在数字化时代,数据安全已成为企业不可忽视的核心议题。为了确保敏感信息不被泄露,数据加密成为了企业保护资产的重要手段。2024年,市场上涌现了众多优秀的企业数据加密软件。本文将为您精选五款必备的数据加密软件,它们各具特色,能够为企业数据提供全面而高效的保护。让我们一起探索这些加密利器,共同守护企业的数字资产安全。1、洞察...

    2024-10-17 09:51:22
  • 软件界大PK!年度精选!2024数据防泄密软件前十强

    在数字时代,数据的安全与保密成为了企业生存的命脉。2024年,众多数据防泄密软件如雨后春笋般涌现,它们各自施展绝技,为企业的信息安全保驾护航。本篇将精选出年度前十强数据防泄密软件,它们凭借卓越的性能、智能的防护和便捷的操作,赢得了市场的广泛认可。让我们一同走进这场软件界的大PK,见证数据防泄密技术的最新成果!1、洞察眼...

    2024-10-17 09:49:40
  • 企业防范数据泄露方法有哪些?八个实用防泄密方法

    在数字化时代,企业数据如同生命之源,其安全关乎企业的生死存亡。面对日益严峻的数据泄露风险,企业必须筑起坚实的防线。以下八个实用防泄密方法,旨在为企业提供一套全面、高效的数据保护策略,确保企业数据在存储、传输、处理等各个环节中的安全性,助力企业稳健前行,在激烈的市场竞争中立于不败之地。1、使用专业软件—洞察眼MIT系统透...

    2024-10-15 14:00:13
  • u盘加密软件哪个好用?2024年9款顶级U盘加密软件大盘点

    在数据保护日益重要的今天,U盘加密软件成为了我们保护敏感信息的得力助手。2024年,市场上涌现出了众多优秀的U盘加密软件,它们各具特色,功能强大。本文精选了9款顶级U盘加密软件进行大盘点,旨在帮助读者找到最适合自己的加密工具。让我们一同探索这些宝藏级的U盘加密软件,为数据安全保驾护航!1、洞察眼MIT系统主要特点:不仅...

    2024-10-15 10:25:54
  • 如何给U盘加密?U盘加密必备五招,保护U盘数据

    在数据泄露风险日益加剧的今天,U盘作为便携的数据存储工具,其安全性显得尤为重要。如何给U盘加密,确保数据在传输和存储过程中的安全,成为每个人都需要掌握的技能。以下五招U盘加密必备技巧,将帮助您轻松提升U盘数据的安全性,让您的数据隐私得到更有效的保护。让我们一同学习,为数据安全保驾护航。方法一:使用专业软件(洞察眼MIT...

    2024-10-15 09:45:43
  • 怎么防止u盘里的东西被拷贝?U盘数据安全:六招防拷贝秘籍

    在数字化时代,U盘作为便携的数据存储工具,其安全性尤为重要。如何防止U盘里的数据被非法拷贝,成为保护个人隐私和企业机密的关键。以下六招防拷贝秘籍,全方位守护您的U盘数据安全。让我们一起学习,确保数据在传输和存储过程中的安全无忧。一、U盘加密软件加密:利用专业的加密软件(如BitLocker、FileVault、安全神等...

    2024-10-15 09:43:45
  • U盘安全无忧:U盘防复制防拷贝怎么办?精选七款U盘数据保护软件

    在数字化办公日益普及的今天,U盘作为数据交换的重要工具,其安全性显得尤为重要。为防止数据泄露,精选七款U盘数据保护软件,它们各具特色,能够有效防止数据被非法复制和拷贝。这些软件通过加密、权限控制等技术手段,为U盘数据筑起了一道坚固的安全屏障,让您的U盘使用更加安心无忧。1、洞察眼MIT系统该系统采用透明加密技术,对存储...

    2024-10-12 10:15:02

大家都在搜的词:

微信扫一扫联系售前工程师