许多应用程式可以自动更新,无需用户互动。从安全性角度来看,这通常被认为是一种良好的做法,因为它能快速分发针对关键漏洞的修补程式。然而,自动更新也带来额外的风险,因为它允许软体开发人员在用户的机器上推送任意代码。不幸的是,用户往往别无选择,只能信任开发者会仅将更新通道用于其预期目的,并且会阻止恶意第三方的侵入。
在这篇博客文章中,我们将展示这种信任有时可能是错误的。我们具体将展示一个猫刮下载器(torrentclient)和三个广告拦截器是如何通过自动更新暗中安装了 FakeMBAM后门的。我们对这个后门进行了反向工程,并在本帖的第二部分中描述了它的内部工作原理。
意外的感染途径
我们最近报导了在超过 100,000 台安装了 Avast 的设备上检测到的一个假冒 Malwarebytes 安装程序。这个安装程序试图伪装成正宗的
Malwarebytes 安装程式,并在很大程度上模仿其布局 – 它使用相同的文件名和图标,并创建了一个包含由 Malwarebytes 签名的有效 PE文件的 Malwarebytes 安装目录。然而,这一切仅仅是表面,因为该安装程序实际上并未安装
Malwarebytes。实际上,该安装程序的主要目的是打开一个后门,以便攻击者控制的伺服器,从而让其运营者能够向被感染的机器推送额外的恶意载荷。
A 地图展示了在 FakeMBAM 后门保护下的 Avast 用户分布情况。该后门在俄罗斯、乌克兰和哈萨克斯坦的活动最为频繁。
在我们的第一篇报告中,我们指出不知道这个假冒安装程序是如何分发的。自那以后,我们花了一些时间反向工程该恶意软体,并调查其感染途径。我们发现,假冒安装程序是通过一个猫刮下载器(download[.]studio
)和三个广告拦截器(netshieldkit[.]com
、myadblock[.]com
和 netadblock[.]com
)的自动更新推送到受害者的机器上。这些应用程序的网站上列出了三个不同的公司名,分别是“SigmaSoftware”、“GRAND MEDIA, TOV”和“BirmonSoftware”。但是,根据代码的高度相似性和共享基础设施(以及它们都分发了完全相同的恶意软件),我们认为非常可能这四个应用程序背后有同一个操作者。
下载工作室
为了调查用于分发假冒安装程序的感染途径,我们首先查看了被检测到的安装程序提交的元数据。这为我们提供了两个重要线索:安装程序应该通过名为 dstudio-
的进程执行,并带有命令行参数
gui.exe/SP- /VERYSILENT /SUPPRESSMSGBOXES /NORESTART
。第一个线索表明,安装程序不应被社交工程传播,因为上述参数指示 Inno Setup在后台静默安装软体。第二个线索暗示了可能的嫌疑犯:下载工作室。
/NOCANCEL /NOICONS
下载工作室产品页面的截图。
下载工作室是一款在俄罗斯和乌克兰受欢迎的免费猫刮下载器。它拥有一个嵌入的 torrent文件库,提供大量电影、软件、视频游戏、音乐等各类选择。就像通常情况下的猫刮下载器一样,它可以轻松下载很多受版权保护的材料,这似乎是它广泛流行的主要原因。下载工作室被一些反恶意软件程序检测为潜在不必要的程序(PUP)或风险软件,因为它促进非法行为并通过下载不明来源的
torrent 使用户处于风险之中。
下载工作室的电影库截图。
为了澄清一些潜在的混淆,我们必须说明,还有另一款名为 Download Studio 的软体:由 Conceiva 开发的
。除了名称外,这款软体与本博客所描述的猫刮下载器完全无关,因此毫无理由怀疑其合法性。在本博客的其余部分中,“下载工作室”将指代前一段提到的猫刮下载器。
由于下载工作室可用于下载各种软件,因此不妨猜测假冒 Malwarebytes 安装程序是通过它作为常规 torrent 文件分发的(毕竟我们在
Download Studio 中搜索“Malwarebytes”时有 609个结果)。然而,这无法解释我们在野外所观察到的命令行参数。这些参数显然表明运行安装程序并不是用户主动开启的操作,用户可能根本不知道安装程式的存在。此外,我们保护的用户数量与我们对使用下载工作室的
Avast 用户数的估算相符,这让我们怀疑是下载工作室本身在某种程度上负责。因此,我们决定对其进行反向工程,以查看它是否包含隐藏的恶意代码。
我们很快发现 Download Studio 与 FakeMBAM 后门之间存在明显的代码相似性。下载工作室和后门都使用 Qt框架开发,并且使用了相同的字符串混淆方法。其中一种混淆方法特别有趣,因为它在混淆上并不是非常有效——它是通过使用相同的掩码对混淆字符串进行两次 XOR操作,导致明文在反组合中明显可见。
在下载工作室中与 FakeMBAM 后门中字符串 .tmp
的混淆(左)和反组合(右)。
我们还在一段代码中发现了其他相似性,该代码计算自定义 HTTP 标头的 HMAC,或在通过 ITaskService
COM接口创建计划任务的代码。我们还发现下载工作室中包含一个字符串,该字符串包含上面提到的命令行参数。这些参数用于静默地在后台执行应用程式更新。通过反向工程下载工作室,我们还发现应用程式更新应从一个临时目录中执行,其名称可以用正则表达式
ds-\d{7}\.tmp
描述,这与我们对伪安装程序检测的元数据进一步匹配。
反组合的下载工作室片段,显示负责自动更新执行的代码。
此时,看起来几乎可以肯定该后门是通过下载工作室的自动更新分发的。不过,我们想要确认这一点,因此我们监控了更新,记录了每个观察到的更新的文件名和哈希值。这给我们提供了以下列表:
SHA-256| 文件名
—|—
16d0559067f3cc0ab19e22b935ac90d44897f09f3426f858498dfd7e667c4bda
|
updater.exe
1d77fdc7f1b1efc8bdb0938cacc713baa70a2549412ce0be18adf2ebd133cb70
| updater-
full.exe
333dd34d3efc4ded71b36f5fc38bce67de71f80b7fab43358a36e8ba7d4df0f0
|
updater.exe
5822d2b9717cc2a87ba54173587a3808e17f5961f42f5b1702c4a75950ecd4f6
|
updater.exe
6754c5e7d3c03f4e2bf29b013b1a0d532b7f4e8e145da82e6973376785938f65
| DS-
updater-1.8.0.0-full.exe
9c112b452ce839536a5cd4a3d8f4999adcb03dc3af5cbd86ca3a477c5b75127b
|
updater.exe
b1acc87c7b010f4aafbe03cd70a6452679de07ef31bc2d5701de63d573654615
|
updater.exe
b3359c92cd87bd39ecbf8159666f2c7e123903751654bb8aefd714e23f8e7f7f
|
updater.exe
b4039b6a15af681d7c02d1ff798f41023a378668b32132761c8cdffd648a5a5d
| DS-
updater-1.8.0.0.exe
c759c6fffe3d32424f8b29b58ee5cb11d68be5f27e50ba1d1a4755fb56602f7d
|
updater.exe
dfb1a78be311216cd0aa5cb78759875cd7a2eeb5cc04a8abc38ba340145f72b9
|
MBSetup.exe
f2caa14fd11685ba28068ea79e58bf0b140379b65921896e227a0c7db30a0f2c
|
MBSetup.exe
仅根据文件名,最后两个条目立刻引起了我们的注意。确实,虽然之前所有条目都对应于下载工作室的合法更新,但最后两个哈希则是我们一直在调查的假冒
Malwarebytes 安装程序。它们是以与所有其他自动更新相同的方式执行的,在后台静默进行,而用户并不知情。
这意味著某人试图感染所有下载工作室的用户以安装 FakeMBAM后门。虽然我们不确定实际上发生了什么,但可以想像出三种可能的情况。第一种情况是,下载工作室的开发者希望以非常不道德的方式“获利”他们庞大的安装基础。DownloadStudio 和 FakeMBAM后门之间代码的重用暗示了这种可能性。另一种解释是,后门是由一组不良员工扩散的,他们在不告知公司的情况下行动。最后,也可能某个未知的攻击者黑进了下载工作室并成功实施了供应链攻击。
我们希望寻找一些答案,因此联系了下载工作室的开发者,询问有关后门的情况。他们声称在 2020 年 8月发现了其持续集成伺服器上的安全事件,并指出他们此后已对此事件进行了全面调查并加强了安全措施。他们对我们进一步的询问没有回应,对于多少用户可能受到此事件影响以及是否通知受影响的用户。
广告拦截器
下载工作室并不是唯一分发 FakeMBAM 后门的软件。我们还发现三个广告拦截器也以相同的方式滥用了自动更新。这些广告拦截器是 NetShieldKit(netshieldkit[.]com
)、My AdBlock(myadblock[.]com
)和 NetAdBlock(netadblock[.]com
)。
NetShield Kit 产品页的截图。
虽然这些广告拦截器被宣传为三种不同产品,但它们的内部结构几乎相同。广告屏蔽的实现是用 Golang 开发的,利用开源的 。提供这些广告拦截器下载的网站也看起来非常相似,甚至都由同一个 IP地址 (62.112.11[.]43
) 托管。似乎未来可能还会推出另外两个广告拦截器,因为 adblockpro[.]net
和
adblockfree[.]com
也解析到这个 IP 地址。
所有三个广告拦截器对应的域名解析到同一个 IP 地址。
我们还发现这些广告拦截器和下载工作室之间的代码相似性,这表明它们是同一组开发的。更有甚者,一些下载工作室的安装程序也提供了安装 My AdBlock的选项。
提供安装 My AdBlock 选项的下载工作室安装程序。
和下载工作室一样,我们不知道这些广告拦截器的主要目的是否是传播恶意软体。但是,如果这是一场供应链攻击或不良员工的行为,很难解释为什么域名
bitminer[.]tech
(这里承载了与 FakeMBAM 后门分发的 XMRig基于的加密货币挖矿工具类似的工具)曾经解析到这三个广告拦截器的网站相同的 IP 地址。此外,NetShield Kit 网站上的 FAQ部分也显得非常可疑。
NetShield Kit 网站 FAQ 部分的截图。
这里面可能还有其他未被提及的“陷阱”。
FakeMBAM 后门分析
现在我们已经展示了假冒 Malwarebytes 安装程序是如何送达其受害者的,让我们来看看它实际上做了什么。当这个恶意安装程序被执行时,它会创建一个假
Malwarebytes 安装目录,并在其中隐藏 FakeMBAM 后门。该目录看起来与合法的 Malwarebytes安装目录一模一样,唯一的不同是增加了一个恶意 DLL 文件、一个被恶意修改的 DLL 文件和一个包含随机数据的新 data.pak
文件。
合法的 Malwarebytes 安装目录与恶意软件创建的假安装目录的比较。
即使假安装程序应静默在后台执行,但恶意作者仍然试图使其看起来像合法的 Malwarebytes安装程序,以骗取任何实际分析它的人的注意。然而,仍然存在一些明显的区别。首先,与合法安装程序不同,假安装程序并未数位签名。假安装程序还是使用 InnoSetup 创建的,使其看起来与合法的 Malwarebytes 安装程式不同。默认的安装目录稍有不同。假安装程序会安装在
%ProgramFiles%\Malwarebytes
(在 64 位 Windows 上为
%ProgramFiles(x86)%\Malwarebytes
),而合法的 Malwarebytes 通常安装到
%ProgramFiles%\Malwarebytes\Anti-Malware\
。这一区别可能是恶意作者故意引入的,他们希望避免恶意软件与合法的
Malwarebytes 发生冲突。
安装精灵(左)有典型的 Inno Setup 外观,使其与合法的 Malwarebytes 安装程序(右)不同。
假安装程序中包装的所有都是人们在 Malwarebytes 安装目录中会期待的常见 PE 文件,除了两个恶意 DLL 外,所有这些文件都由
Malwarebytes 或 Microsoft 进行了有效的签名。第一个恶意 DLL 文件名为 Qt5WinExtras.dll
。正如其名所示,它是
的一部分,合法的 Malwarebytes 安装中同样可以找到相同名称的 DLL。这个恶意 DLL文件与合法的 Qt5WinExtras.dll
几乎相同,唯一重要的不同是在函数
setCurrentProcessExplicitAppUserModelID
中,恶意作者将对从 Qt5Help.dll
导出的函数进行调用。
合法和后门的 Qt5WinExtras.dll
之间的 Bindiff,1793 个函数是完全匹配的。
Qt5Help.dll
是另一个恶意 DLL 文件。与 Qt5WinExtras.dll
不同,合法的 Malwarebytes 安装中找不到名为
Qt5Help.dll
的文件。这个 DLL 文件是网络罪犯添加的,实现了实际的后门功能。请注意,主要的 Malwarebytes 可执行文件
mbam.exe
进口了 Qt5WinExtras.dll
并调用导出的函数
setCurrentProcessExplicitAppUserModelID
。如上所述,Qt5WinExtras.dll
又导入了
Qt5Help.dll
,并调用了暴露恶意功能的函数。这意味著,当合法的 mbam.exe
执行时,如果在相同的目录中植入这两个
DLL,则必然会将控制流传递到隐藏在 Qt5Help.dll
中的 FakeMBAM 后门。
Inno Setup 可执行文件的安装过程由其安装脚本指导。这些脚本嵌入在安装程序中,但可以提取和反编译。假冒 Malwarebytes安装程序中嵌入的脚本相对简单。首先,它将压缩包中的所有文件复制到安装目录。然后,它创建一些注册值,包括
HKLM\SOFTWARE\Malwarebytes\LicenseKey
,其中存储了一个随机十六进制字符串。如我们稍后将看到的,这个字符串由
Qt5Help.dll
读取,并以加密形式包含恶意软件的初始配置。接著,mbam.exe
被添加到 Windows 防火墙的排除项中。最后,执行
mbam.exe
并加上命令行参数 /install
。如前面所述,这是合法的由 Malwarebytes 数位签名的
mbam.exe
。由于这两个恶意 DLL 文件已被放置在相同的目录中,因此它必然会加载并执行藏在 Qt5Help.dll
中的主要恶意负载。
从假安装程序的 Inno 安装脚本中提取的片段。
Qt5Help.dll
Qt5Help.dll
负责后门的持久性、配置更新和额外载荷的传递。它使用 Qt框架开发,并利用该框架提供的功能进行加密操作,以及与底层操作系统的互动。只使用基础的混淆—最明显的是被加密字符串,在堆栈上构建并在运行时使用基本的混淆方法(例如,带一字节密钥的简单
XOR 密码)进行解密。
在堆栈上构建的加密字符串,使用简单的 XOR 密码进行加密。
Qt5Help.dll
执行的具体操作由命令行参数决定。如果当前进程带有 /install
参数,Qt5Help.dll
将创建一个新服务,旨在系统启动时自动启动 mbam.exe
。如果命令行中带有 /remove
、/start
或
/stop
,则该服务将被删除、启动或停止。
如果没有命令行参数,Qt5Help.dll
假设它已经在服务进程中运行,并调用
StartServiceCtrlDispatcher
。如前所述,Inno Setup 脚本最初以 /install
命令行参数执行
mbam.exe
。这将安装服务并立即启动它。新创建的恶意服务的名称为 MBAMSvc
,显示名称为 MalwarebytesService
。而合法 Malwarebytes 服务的名称为 MBAMService
,这也可以被视为试图模仿
Malwarebytes,而不实际选择相同的服务名称。
Qt5Help.dll
的反编译片段显示恶意服务的创建。
当恶意软件以服务的身份执行时,它进入一个无限循环,轮询 C&C 伺服器以获取配置更新。恶意软件的配置以加密的十六进制字符串形式保存在注册表中,位于
HKLM\SOFTWARE\Malwarebytes\LicenseKey
(或在 64 位 Windows 中的
HKLM\SOFTWARE\Wow6432Node\Malwarebytes\LicenseKey
)。该配置可以使用 AES 在 CTR 模式下以密钥
cefd8928fd7411b4c9cef7ec35cc827c
和 IV 260743d9b464883ecc7f144bfa06e36d
进行解密(如JSON_Beautify(‘%20%20%20%20’,false)可以看到)。该密钥和
IV 是由硬编码字符串 MGZ_th#l}{JmC^!:4525719127089151290
和 ?0@1!elVN]9L.)2.
的 MD5摘要生成的,因此对所有受害者来说都是一致的。
该后门在 HKLM\SOFTWARE\Malwarebytes
中创建的注册值。
配置更新通过使用自定义 HTTP 标头的 HTTP GET 请求来执行。恶意软件发出请求时包含 X-Build-ID
和 X-Build-Sign
标头,其中 X-Build-ID
设置为恶意软件的版本号,后接加密负载配置的 MD5 十六进制摘要(稍后将进行解释),X-Build-Sign
则设置为用硬编码密钥 JXaZy7brRJ
计算的 X-Build-ID
标头的 &input=MS5jZjA0YTdhOWM2N2ZhOGJhNTlkYWY4NmU3YjlmNDUyYQ)。C&C伺服器检查 HMAC 的有效性,若无效则返回 404 (未发现)
响应码。否则,如果签名有效,C&C 伺服器将响应 204 (无内容)
状态码。然而,这并不意味著 C&C 伺服器不会返回任何数据。这只是意味著响应主体是空的。来自 C&C 伺服器的实际响应编码在自定义的 X-Payload
HTTP 响应标头中。当恶意软件看到这样的标头时,它会使用标头的解密内容更新其配置。
C&C 通信的 Fiddler 捕获。请注意 X-Payload
响应标头,它包含更新的配置。
解密后的配置是一个 JSON 字符串,包含一级对象中的最多五个键。该恶意软体支持以下键:
键| 描述
—|—
api
| 包含用于定期查询的 C&C URL 数组,以获取配置更新。
params
| 用于替代分发的恶意载荷中的占位符(稍后会解释)。此配置参数目前仅用于让恶意软件可以快速更改挖矿池 IP地址,而无需更新整个恶意payload。
refresh
| 后门在查询 C&C 伺服器之前等待的秒数。默认值为 7200(两小时)。
hash
| 这似乎是配置部分的哈希值。不幸的是,我们无法确定这个哈希是如何计算的,因为它是由 C&C伺服器生成的,而恶意软体自身并不对其进行验证。恶意软体只会将这个值与以前配置的 hash
进行比较,以查看是否有任何更改。根据观察到的哈希长度,这似乎是
MD5 摘要。
extra
| 需要下载的额外恶意充载。这是一个包含三个值的数组:url
、hash
和
arguments
。在收到包含此键的配置时,恶意软体将从 url
下载文件,检查其 MD5 摘要是否与 hash
匹配,如果匹配,则执行并在命令行中传递 arguments
。
从 C&C 伺服器分发的配置示例。
持久性载荷
FakeMBAM后门可能还会投放某些持久性载荷,如果被删除或终止,则会定期重新安装。目前为止,我们看到的唯一持久性载荷是加密货币挖矿器,但该恶意软体能够同时处理多个持久性载荷,因此未来可能会添加其他恶意载荷。
持久性载荷以名为 data.pak
的加密文件存储,该文件位于假 Malwarebytes 安装目录中。解密可以使用与解密配置相同的密钥和 IV 进行
AES CTR 模式的操作。解密后,data.pak
文件应以魔术字节 71 72 65 73
(qres
)开头,用以识别文件格式:。这基本上是一种自定义压缩格式,可以使用
Qt 框架提供的 API 函数进行解包。
data.pak
压缩包总是包含一个名为 config.json
的文件,其中保存了载荷配置。在下面的示例 config.json
中,仅有一个载荷,名为 app5
。要安装此载荷,恶意软体首先从 data.pak
压缩包中提取所有来自 app5
目录的文件到
payload['path']
(在这里是 C:\ProgramData\VMware\VMware Tools\
)。接著,它根据
payload['type']
和 payload['pre']
的值执行几个设置操作,这些内容将在后面进行说明。当所有设置操作完成后,后门会执行指定为 payload['file'][0]
的文件,并在命令行中传递
payload['file'][1]
。如下面的示例配置所示,"C:\ProgramData\VMware\VMwareTools\vm3dservice.exe" /detach
的命令将被执行。
描述加密货币挖矿载荷的示例配置。
第三个尚未描述的配置参数是
payload['pre']
。这是一个数组,描述恶意软件在实际运行持久性载荷之前将执行的各种设置动作。每个动作由其整数类型和可按具体类型解释的字符串完整指定。目前,该恶意软件支持三种设置动作类型:
类型| 描述
—|—
1| 终止具有给定名称的进程。根据在野外观察到的配置,这用于终止先前的持久性载荷实例,而不是终止知名的恶意软件分析工具。
2| 使用 ITaskService
COM 接口删除具有给定名称的计划任务。
3| 为给定的档案系统路径创建一个 Windows Defender 排除项。排除项是通过使用 IGroupPolicyObject
COM接口添加的,这样会创建一个新的组策略对象,并修改 HKLM\SOFTWARE\Policies\Microsoft\WindowsDefender\Exclusions\Paths
。
结论
本博客文章报导了网络罪犯如何滥用下载工作室和三个广告拦截器的更新过程,试图将 FakeMBAM后门传送给数十万受害者。它还对此后门进行了技术分析,特别关注文档说明恶意软体如何存储和保护其配置以及个别配置参数的作用。这些信息应能帮助事件响应人员处理这一恶意软件。
C&C 通信协议也已被记录下来,这有助于创建基于网络的检测规则,以及实施监控 C&C 活动的追踪器。
妨害指标
完整的 IoC 列表可在 https://github.com/avast/ioc/tree/master/FakeMBAM 上获得。
SHA-256| 文件名
—|—
391817d625e14d6b5b0115b7215c07d9ef6612cccdb1d6891626fdd5609506bf
|
Qt5Help.dll
02be0f263b95017caa20f0fed861d2126e81ec176d542cc7415074f48965f2e0
|
Qt5WinExtras.dll
dfb1a78be311216cd0aa5cb78759875cd7a2eeb5cc04a8abc38ba340145f72b9
|
MBSetup2.exe
f2caa14fd11685ba28068ea79e58bf0b140379b65921896e227a0c7db30a0f2c
|
MBSetup.exe
C&C URLs
URL
https://apis.bytestech[.]dev/get/data
https://apis.mbytestech[.]com/get/data
https://apis.masterbyte[.]nl/get/data
https://d3ko3huol26z6z.cloudfront[.]net/get/data
https://d1t8lqzz4q8388.cloudfront[.]net/get/data
https://agonistatdata[.]site/get/data
https://apolistatdata[.]site/get/data
https://augustatdata[.]site/get/data
https://dq96vx43jmub5.cloudfront[.]net/get/data
下载 URLs
URL
http://dl.bytestech[.]dev/1/mbsetup.exe
http://dl.bytestech[.]dev/2/mbsetup.exe
http://dl.bytestech[.]dev/3/mbsetup.exe
http://dl.bytestech[.]dev/mbsetup2.exe
http://dl.cloudnetbytes[.]com/3/mbsetup.exe
挖矿载荷
SHA-256
c6a8623e74f5aad94d899770b4a2ac5ef111e557661e09e62efc1d9a3eb1201c
fea67139bc724688d55e6a2fde8ff037b4bd24a5f2d2eb2ac822096a9c214ede
b3755d85548cefc4f641dfb6af4ccc4b3586a9af0ade33cc4e646af15b4390e7
7f7b6939ae77c40aa2d95f5bf1e6a0c5e68287cafcb3efb16932f88292301a4d
c90899fcaab784f98981ce988ac73a72b0b1dbceb7824f72b8218cb5783c6791
a4447559249f3ce04be4c6d28fc15946cbb8513da76ba522f635bda6a60bedcc
8536d573c4180f5df09f183b9434636127127b2134fbf5dced0360ec6d4ee772
61b194c80b6c2d2c97920cd46dd62ced48a419a09179bae7de3a9cfa4305a830
589377832b1f1e6be2bdbef1753f30e3907c89a680f7f327999d9a1b510aa4ae
d7a06cba490da60cfbf6f120c33652393f7a1b9176170e57c6cc3649530fca6a
af49b57c1fc4781a7a38457c0b4a595dbb6b5bd7bc4ccafe15fb6b8ae29e17f8
55869621fb2321ab8c8684d10c49e50e6a0b131f215ac0bbfe7c398d08fbea34
f761242dfa8cf57faaae2c659f450bcbdc3253134556141eb6e0e282fbd98aa1
269e14bb368ef26f47416a8fcd7f556bece57f5b6113986dc733c2230efdf398
beb718a13ef88b2d7f2126226217e76ea773af609aeae870f55e8eb6ed4c497b
70830ed1357efd6b373faeaa52701369e2ae7bf9ad74e2f9355b5499ecef1123
277cb64e6cd1155c21f6f169d77036ea6e4a36288494f2dfc39d2e76191197d9
f8288ecb42478dd37335669a956b4e1adb3400928e1ec440a24882163a9cbbe8
edd918e7fe5dbb8e66464939c4a62132d5a3ba17d081c56f0a23beffb2c0ca0c
`4c36a69540ffb7ac3655170148fe9f358bf0fc926baa7ef96611a