兔子洞里有什么?揭开BunnyLoader 3.0恶意软件的神秘面纱

本文将重点针对最新上线的恶意软件BunnyLoader 3.0进行详细介绍和深入分析,并探索BunnyLoader的基础架构和功能。BunnyLoader是一款一直在发展和进化的恶意软件,威胁行为者可以利用BunnyLoader窃取用户数据、凭证和加密货币,并向目标用户传递额外的恶意软件。

在网络安全环境日趋复杂的时代,威胁行为者必须要定期更新和重构其恶意软件,以与其他威胁行为者和安全研究人员做“斗争”。自2023年9月首次发现以来,BunnyLoader恶意软件即服务(MaaS)一直都在更新其功能,包括以下内容:

1、修复旧版本漏洞;

2、添加额外的保护措施和反病毒规避机制;

3、数据窃取组件新增多种数据恢复功能,包括额外浏览器路径和键盘记录等;

2024年2月11日,BunnyLoader背后的威胁行为者正式对外发布BunnyLoader 3.0,并声称新版本BunnyLoader进行了彻底的重构,功能增强了近90%。BunnyLoader Payload的增强部分包括:

1、Payload/模块完全重写以提高性能;

2、减少Payload体积;

3、高级键盘记录功能;

4、...

因此,本文将通过揭开BunnyLoader恶意软件的神秘面纱,包括其演变进程和TTP,来帮助安全社区更好地检测BunnyLoader的活动,并阻止相关的威胁风险。

BunnyLoader概述

BunnyLoader的开发周期特点就是“时间短、速度快”。1.0版本于2023年9月初首次出现,当时的BunnyLoader是一个使用C/C++开发的MaaS僵尸网络和恶意软件,并具备以下多种功能:

1、无文件加载;

2、凭证窃取;

3、加密货币窃取;

4、剪贴板数据窃取;

BunnyLoader 1.0背后的威胁行为者被称为“Player”或“Player_Bunny”,买家可以选择BunnyLoader要传播和感染的恶意软件类型,而且BunnyLoader 1.0禁止被用于俄罗斯境内的设备和系统。

居住在俄罗斯境内或附近的恶意软件开发者通常禁止对俄罗斯目标使用他们的恶意软件,威胁行为者可能会利用这一限制来绕过俄罗斯执法部门的检测。

2023年9月4日在暗网上发布了BunnyLoader 1.0,永久访问套餐价格位250美元:

到2023年9月底,BunnyLoader进行了快速重构,并新增了下列功能:

1、命令和控制(C2)仪表盘错误修复;

2、防病毒检测规避;

3、新增用于信息盗窃的多种数据恢复方法;

4、添加了浏览器路径;

5、新增键盘记录功能;

6、新增反分析保护;

BunnyLoader恶意软件的加载程序生态系统一直处于不断进化的状态,而BunnyLoader的积极重构和更新很大程度上是为了吸引市场眼光,并扩大其市场占有率。因此,2023年9月底,BunnyLoader 2.0正式上线。

2023年10月,BunnyLoader新增了“私人定制”版本,售价为350美元。这个版本中新增了代码混淆,并且会定期更新以尝试绕过反病毒产品的检测。

随后,也就是2024年2月11日,BunnyLoader背后的威胁行为者开始在他们的Telegram频道上为最新版本BunnyLoader 3.0打广告。

基础设施揭秘

当安全研究人员在2023年9月首次发现BunnyLoader 1.0时,它的C2服务器当时使用的IP地址位37.139.129[.]145,如下图所示:

在BunnyLoader最早的已知样本中,客户端使用了http://[url]/Bunny/[PHP节点]这样的标准化目录结构与C2服务器进行通信,而且在BunnyLoader 3.0之前发布的所有样本中也都使用了这样的模式:

BunnyLoader 2.0使用以Add.php结尾的URL向C2服务器初始注册BunnyLoaders客户端。在注册之前,恶意软件会枚举设备,并使用收集的信息作为指纹来识别不同的目标。

BunnyLoader和C2建立通信后,会使用以TaskHandler.php结尾的URL重复发送请求。并利用这些请求返回的响应初始化BunnyLoader需要进一步执行的恶意任务,这些任务被单独开发成了独立的功能,其中包括:

1、键盘记录;

2、窃取剪贴板数据;

3、下载其他恶意软件;

4、执行远程命令;

5、窃取加密货币;

6、窃取应用程序凭证;

2023年10月,BunnyLoader的C2基础设施将IP地址更换为了185.241.208[.]83,当月所发现的另一个BunnyLoader样本是通过一个名为Shovel Knight.zip的压缩文件来传播的,进一步分析表明,Shovel Knight.zip的内容包含一个Windows可执行文件,而它就是BunnyLoader 2.0的Stager。

Shovel Knight实际上是一款众筹开发的知名电子游戏,各大电子游戏平台基本上都有这款游戏,而威胁行为者使用这个名字,毫无疑问就是为了诱骗用户打开并执行恶意文件。

在2023年11月间,我们利用托管在下列地址的C2服务器识别了其后续活动:

195.10.205[.]23

172.105.124[.]34

2023年11月收集的样本使用了Themida来将BunnyLoader打包为Windows可执行文件。除了Themida之外,研究人员还观察到了通过PureCrypter来分发BunnyLoader的样本,这些技术也表明BunnyLoader的运营商开始采取额外措施来保护他们的恶意软件。

12月份,BunnyLoader又将C2服务器转移到了下列IP地址:

134.122.197[.]80

91.92.254[.]31

2023年12月份的感染链比之前几个月的要复杂很多,而且TTP有了额外变化:

PureCrypter感染链的一个分支会通过分发PureLogs加载器来继续部署额外的Pure恶意软件,然后感染PureLogs窃取程序。在第二个分支中,PureCrypter利用了一个.NET注入程序来分发BunnyLoader,这个分支中的样本会伪装成notepet.exe文件,而Notepet则是一款适宠物健康追踪器应用程序。

2024年2月11日,威胁行为者发布了BunnyLoader 3.0,并进行了完全的代码重构:

BunnyLoader的最新版本3.0在其C2服务器上使用了与2.0版本不同的目录结构。此目录结构的格式为http://[C2]/[path]/[PHP API]。

在BunnyLoader 3.0中,威胁行为者使用了一个CMD文件作为Dropper,并在其中嵌入了BunnyLoader恶意软件来分发实际的恶意Payload。当威胁行为者将BunnyLoader分发到目标设备上后,恶意软件就会与C2服务器(91.92.247[.]212)通信,并等待响应信息以执行下一步操作。

样本深入分析

2024年2月14日,安全研究员Germán Fernández识别到了第一个BunnyLoader 3.0样本,其中就包含了上述的恶意.cmd脚本。

随后,Unit 42的研究人员便对从.cmd脚本中提取初的最新BunnyLoader文件进行了分析,并确定了更新的部分,包括C2通信协议的更新和二进制的模块化。

命令和控制C2更新

C2通信的基本URI结构与以前的版本相比保持不变,使用格式为http://[C2]/[path]/[PHP API]。本文之前提到的样本使用的C2服务器托管在hxxp://ads[.]hostloads[.]xyz/BAGUvIxJu32I0/gate.php,而之前的BunnyLoader版本在URL路径中使用了字符串“Bunny”,BunnyLoader 3.0则允许手动指定路径名。

在版本3.0发布之前,BunnyLoader服务器使用了多个PHP API节点接收来自客户端的通信,而且3.0版本的所有样本都使用了同一个节点,即gate.php。

BunnyLoader 3.0使用了RC4算法对参数加密以实现模糊处理,而不是像以前的版本那样以明文形式发送HTTP参数。每次执行BunnyLoader时都会生成一个包含32个字符的随机密钥,用于RC4加密所有HTTP查询参数值。加密的值随后被转换为charcode和URL编码,如下图所示,其中客户端正在与C2服务器进行初始连接:

为了让C2服务器区分客户端请求,每个客户端函数都使用唯一的URI参数格式以及特定的用户代理。下表概述了所有可能的C2通信例程,包括其用途和使用的参数:

ID

用图

用户代理

HTTP/S URI参数

1

与C2服务器建立初始连接

Windows Defender

ipaddress
hostname
version (BunnyLoader version)
system (Operating System)
privileges (Local or Admin)
arch (CPU Architecture)
antivirus
disk_id (Bot ID)
key (BL Operator Key)
enc_key (RC4 Key)

2

每50秒向C2服务器发送心跳

Avast

heart (BL Operator Key)
hostname
system (Operating System)
arch (CPU Architecture)
heart_enc_key (RC4 Key)

3

每两秒钟发送一次请求。预期的响应是通过CMD运行的命令。

ESET SECURITY

hostname
system
arch
cecho (BL Operator Key)
enc_cecho (RC4 Key)

4

执行前一行命令后返回的C2响应

McAffe

val (BL Operator Key)
hostname
system
arch
value (command output)
va_enc_key (RC4 Key)

5

每两秒钟发送一次请求。预期的响应是由客户端解析的特殊格式命令

AVG

BID (Bot ID)
bid_enc_key (RC4 Key)

6

执行前一行命令后返回的C2响应

Google Chrome

CID (Command ID)
bid (Bot ID)
enc_key (RC4 Key)

7

每两秒钟发送一次请求。预期的响应是由客户端解析的特殊格式命令,用于下载拒绝服务(DoS)模块。

Avast

DBID (Bot ID)
DBID_enc_key (RC4 Key)

8

执行前一行命令后返回的C2响应

Google Chrome

DCID (Command ID)
DBID (Bot ID)
d_enc_key (RC4 Key)

C2地址、C2地址、C2路径、BunnyLoader版本和操作员ID都是二进制硬编码的,而且该函数还负责生成RC4密钥:

BunnyLoader代码模块化

BunnyLoader 3.0的第二个主要变化是从一个文件过渡到一个较小的基础客户端,该客户端具有可下载模块的功能。虽然大多数客户端代码与以前的版本相似,但BunnyLoader的自定义数据窃取程序、剪切板程序、键盘记录程序和新的DoS功能现在被分离为不同的二进制文件。BunnyLoader的操作员可以根据需求选择部署这些模块,也可以使用BunnyLoaders的内置命令来加载他们选择的恶意软件。

当在目标计算机上运行时,BunnyLoader将每两秒钟与C2进行一次检查,然后等待一个特定格式的命令,并按以下方式格式化,而这些指令有助于在目标计算机上下载和执行其他恶意软件:

ID --> [value]; Task_Name --> [value]; Task_Args --> [value]; DLL --> [value]

恶意软件会从命令中提取Task_Name和Task_Arg值并传递给相应的函数,这些函数负责指示客户端如何下载和执行新的Payload。随后,通过这些命令执行的所有HTTP下载请求都将使用用户代理ESET NOD32(下载保存到磁盘)或curl/1.0(无文件注入),所有下载的文件都保存到目标设备的%localappdata%\Temp文件夹中。

下面给出的是C2可以给客户端发送的所有可能的任务:

任务名称

概述

Download & Inject (Executable) [FileLess]

下载Task_Arg定义的.exe,并注入到notepad.exe, 完全在内存中执行

Download & Inject (DLL) [RTI]

将Task_Arg定义的.dll下载到%localappdata%/Temp目录, 并注入到calc.exe.

Download & Execute (Executable)

将Task_Arg定义的.exe下载到%localappdata%/Temp目录,并使用CreateProcessA执行.exe

Download & Execute (DLL)

将Task_Arg定义的.dll下载到%localappdata%/Temp目录, 并使用rundll32执行.dll

Download & Execute (Batch)

将Task_Arg定义的.bat或.cmd脚本下载到%localappdata%/Temp目录, 并使用CreateProcessA执行

Download & Execute (PowerShell)

将Task_Arg定义的.ps1下载到%localappdata%/Temp目录, 并使用powershell -ExecutionPolicy Bypass -File执行.ps1

Download & Execute (VBS)

将Task_Arg定义的.vbs 下载到%localappdata%/Temp目录, 并使用powershell -ExecutionPolicy Bypass -File执行.cscript.exe

Run Stealer

通过代码中硬编码的路径下载BunnyLoader数据窃取模块,并将其注入到notepad.exe,完全在内存中执行

Run Keylogger

通过代码中硬编码的路径下载BunnyLoader键盘记录模块,并将其注入到notepad.exe,完全在内存中执行

(Any of the following) Bitcoin, Bitcoin Cash, Monero, Ethereum, Litecoin, Dogecoin, ZCash, Tether, XRP

通过代码中硬编码的路径下载BunnyLoader剪切器模块,并将其注入到notepad.exe,完全在内存中执行

BunnyLoader 3.0使用了下列URL结构来下载功能模块,其中的文件名和URL格式在多个样本中均保持一致:

模块URL

功能

http://[C2]/[path]/Modules/eSentire.exe

信息窃取模块

http://[C2]/[path]/Modules/zScaler.exe

DoS模块

http://[C2]/[path]/Modules/any_run.exe

剪切器模块

http://[C2]/[path]/Modules/NextronSystems.exe

键盘记录模块

键盘记录模块

BunnyLoader 3.0的键盘记录模块可以记录所有的击键信息,并将记录存储到%localappdata%\Temp目录的日志文件中,除此之外,键盘记录模块还会试图识别目标用户何时对敏感应用程序或服务进行身份验证。为了实现该目标,键盘记录模块使用GetForegroundWindow和GetWindowTextA API来识别目标用户何时与目标应用程序或服务进行交互,并把相关的数据单独保存到硬编码文件中:

窗口标题或应用程序名称

日志位置(硬编码)

CredentialUIBroker.exe

mstsc.exe

%localappdata%\Temp\ADE_RDP.txt

Log in to your PayPal

%localappdata%\Temp\ADE_PAYPAL.txt

Nord Account

%localappdata%\Temp\ADE_NORD.txt

Sign in - chase.com

%localappdata%\Temp\ADE_CHASE.txt

Bank of America - Banking, Credit Cards, Loans

%localappdata%\Temp\ADE_BOA.txt

Sign On to View Your Personal Accounts | Wells Fargo

%localappdata%\Temp\ADE_WF.txt

Citi.com

%localappdata%\Temp\ADE_CITI.txt

All other keystrokes

%localappdata%\Temp\ADE_KEY.txt

信息窃取模块

BunnyLoader 3.0的信息窃取模块会自动执行,使用了与基础客户端相同的地址格式,即http://[C2]/[path]/[PHP API],信息窃取模块可以窃取目标设备中的凭证信息,然后直接提取到C2服务器中。

信息窃取模块收集到的所有信息都存储在%localappdata%\Temp\ADE_LOGS目录中,然后上传键盘记录模块的日志信息,并将其整合到同一文件夹中。

收集完所有数据后,信息窃取模块将使用PowerShell将ADE_LOGS文件夹压缩为zip文件中,在提取zip之前,信息窃取模块将使用Windows Defender用户代理向C2发送一个GET请求,其中将包含窃取数据的摘要。

HTTP GET请求的查询参数概述如下:

HTTP查询参数

theft_id

Bot ID

ipaddress

目标IP地址

system

操作系统

chromium

浏览器数量

messages

消息服务数量

wallets

加密钱包数量

keystrokes

键盘记录文件数量

games

游戏平台数量

v*ns

V*N服务数量

files

目标文件数量

extensions

Chrome扩展数量

type

ZIP文件硬编码值

size

ZIP文件大小

link

格式中的字符串: http://[C2]/[path]/Logs/ADE_LOGS_[hostname].zip

key_code

操作员ID

enc_key

RC4密钥

如果C2响应正确,信息窃取模块将会使用Uploader用户代理和自定义的Content-Type HTTP Header来上传.zip文件,上传完成后,信息窃取模块将删除收集到的数据和.zip文件:

剪切器模块

BunnyLoader 3.0的剪切器模块会使用指定的通信程序定期与C2交互并执行检查,C2通过向目标发送加密货币钱包的名称以及由威胁行为者控制的相应钱包地址来激活剪切器模块。

剪切器模块使用正则表达式模式来识别目标的剪贴板是否包含所需的钱包地址类型。如果找到匹配项,它将用威胁行为者的钱包地址替换目标用户的钱包地址:

钱包

正则表达式

Bitcoin_Legacy

^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$

Bitcoin_Bech32

^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$

erc-20

^T[1-9A-HJ-NP-Za-km-z]{33}$

trc-20

^0x[0-9a-fA-F]{40}$

Bitcoin Cash

^((bitcoincash:)?(q|p)[a-z0-9]{41})

Monero

^4([0-9]|[A-B])(.){93}

Litecoin

^[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}$

Dogecoin

^[DB][1-9A-HJ-NP-Za-km-z]{26,34}$

ZCash

^t1[a-zA-Z0-9]{33}$

xrp_address

r[1-9A-HJ-KM-NP-Za-km-z]{25,34}

拒绝服务DoS模块

BunnyLoader 3.0的DoS模块会使用指定的通信程序与C2交互并等待命令执行,支持使用GET或POST HTTP洪泛来对目标URL执行恶意行为。

为了执行攻击,该模块将生成一个新的线程,并进入无限循环状态,使用下列User Agent向目标服务器重复发送GET或POST请求:

Mozilla/5.0 (compatible; U; ABrowse 0.6; Syllable) AppleWebKit/420+ (KHTML, like Gecko)

总结

在MaaS不断变化的环境中,BunnyLoader不断发展,表明威胁行为者需要频繁重构代码以逃避检测。通过揭秘这些不断演变的战术和这种威胁的动态性质,可以帮助广大研究人员加强防御态势,更好地保护数字资产的安全。

入侵威胁指标IoC

BunneyLoader文件

SHA256

备注

首次发现

3a64f44275b6ff41912654ae1a4af1d9c629f94b8062be441902aeff2d38af3e

UPX-packed EXE

Sep. 9, 2023

0f425950ceaed6578b2ad22b7baea7d5fe4fd550a97af501bca87d9eb551b825

UPX-packed EXE

Sep. 9, 2023

82a3c2fd57ceab60f2944b6fea352c2aab62b79fb34e3ddc804ae2dbc2464eef

Themida-packed EXE

Nov. 11, 2023

2ab21d859f1c3c21a69216c176499c79591da63e1907b0d155f45bb9c6aed4eb

PureCrypter EXE

Nov 18, 2023

c006f2f58784671504a1f2e7df8da495759227e64f58657f23efee4f9eb59216

PureCrypter EXE

Nov. 18, 2023

52b7cdf5402f77f11ffebc2988fc8cdcd727f51a2f87ce3b88a41fd0fb06a124

PureCrypter EXE

Nov. 18, 2023

5f09411395c8803f2a735b71822ad15aa454f47e96fd10acc98da4862524813a

PureCrypter EXE

Nov. 18, 2023

cc2acf344677e4742b22725ff310492919499e357a95b609e80eaddc2b155b4b

PureCrypter EXE

Nov. 18, 2023

ebc17dbf5970acb38c35e08560ae7b38c7394f503f227575cd56ba1a4c87c8a4

PureCrypter EXE

Nov. 18, 2023

2d39bedba2a6fb48bf56633cc6943edc6fbc86aa15a06c03776f9971a9d2c550

PureCrypter EXE

Nov. 18, 2023

2e9d6fb42990126155b8e781f4ba941d54bcc346bcf85b30e3348dde75fbeca1

PureCrypter EXE

Nov. 18, 2023

74c56662da67972bf4554ff9b23afc5bdab477ba8d4929e1d7dbc608bdc96994

PureCrypter EXE

Nov. 18, 2023

fffdf51cdb54f707db617b29e2178bb54b67f527c866289887a7ada4d26b7563

PureCrypter EXE

Nov. 18, 2023

62f041b12b8b4e0debd6e7e4556b4c6ae7066fa17e67900dcbc991dbd6a8443f

PureCrypter EXE

Dec. 16, 2023

1a5ad9ae7b0dcdc2edb7e93556f2c59c84f113879df380d95835fb8ea3914ed8 (BunnyLoader 3.0 Dropper)

.cmd script

Feb. 14, 2024

c80a63350ec791a16d84b759da72e043891b739a04c7c1709af83da00f7fdc3a (BunnyLoader 3.0)

EXE payload from the above .cmd script

Feb. 14, 2024

BunneyLoader网络识别

BotID

C2 IP地址

首次发现

BotID=880873019

37.139.129[.]145

September 2023

BotID=3565265299

37.139.129[.]145

September 2023

BotID=272148461

37.139.129[.]145

September 2023

BotID=2475708340

37.139.129[.]145

September 2023

BotID=2341255921

37.139.129[.]145

September 2023

BotID=3763204704

185.241.208[.]83

October 2023

BotID=337525325

185.241.208[.]83

October 2023

BotID=2098524523

185.241.208[.]83

October 2023

BotID=774055690

185.241.208[.]83

October 2023

BotID=3408378377

195.10.205[.]23

November 2023

BotID=2219025839

195.10.205[.]23

November 2023

172.105.124[.]34

November 2023

185.241.208[.]104

November 2023

BotID=4040267350

134.122.197[.]80

December 2023

BotID=1662989558

134.122.197[.]80

December 2023

BotID=3860674539

134.122.197[.]80

December 2023

YARA规则

rule u42_crime_win_bunnyloader_3: windows_memory{meta:author = "Unit 42 Threat Intelligence"date = "2024-02-28"description = "Detects Bunnyloader 3.0, a loader with additional capabilities including keylogger, stealer, clipper, and DoS modules."hash1 = "c80a63350ec791a16d84b759da72e043891b739a04c7c1709af83da00f7fdc3a"malware_family = "bunnyloader"strings:$x1 = "Windows Defender" fullword ascii$x2 = "ONLINE" fullword ascii$x3 = "Blacklisted" fullword ascii$x4 = "ESET NOD32" fullword ascii$x5 = "McAffee" fullword ascii$x6 = "SecurityCenter2 path AntiVirusProduct get displayName" fullword ascii$cc1 = "&va_enc_key=" fullword ascii$cc2 = "&value=" fullword ascii$cc3 = "&arch=" fullword ascii$cc4 = "&system=" fullword ascii$cc5 = "&hostname" fullword ascii$cc6 = "&DBID_enc_key=" fullword ascii$cc7 = "/gate.php?DBID=" fullword ascii$cc8 = "/gate.php?DCID=" fullword ascii$cc9 = "(ID|Layer|Windows_Argument)" asciicondition:all of them}

参考资料

Central District of California | Qakbot Malware Disrupted in International Cyber Takedown | United States Department of Justice

VirusTotal

Analysis of the Pure Malware Family: Unique and Growing Threat

BunnyLoader | ThreatLabz

https://twitter.com/0xperator/status/1706402486083350586

参考链接

https://unit42.paloaltonetworks.com/analysis-of-bunnyloader-malware/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589246.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用minikube安装使用单机版K8S(docker)

前置:作为一个开发,工作之余想玩一下k8s,但是搭建成本太高,所以就找到了minikube这个工具,快速搭建单机版k8s,下面是个人搭建流程,基于centos7,仅供参考。 1.下载kubectl&#xff0…

C++中的List容器用法详解

文章目录 C中的List容器用法详解List 的特点List 的重要接口用法介绍1.创建和初始化Listlist 2.插入元素push_backpush_forntinsert 删除元素pop_backpop_fontclearerase 遍历List迭代器遍历范围for遍历 排序Listsort 反转Listreverse 转移Listsplice 去重unique 合并merge 总结…

【JVM】如何定位、解决内存泄漏和溢出

目录 1.概述 2.堆溢出、内存泄定位及解决办法 2.1.示例代码 2.2.抓堆快照 2.3.分析堆快照 1.概述 常见的几种JVM内存溢出的场景如下: Java堆溢出: 错误信息: java.lang.OutOfMemoryError: Java heap space 原因:Java对象实例在运行时持…

这里有份百度Create大会超长剧透,请查收!

作者简介: 辭七七,目前大二,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

【C++STL详解(二)】——string类模拟实现

目录 前言 一、接口总览 二、默认成员函数 1.构造函数 2.拷贝构造 写法一:传统写法 写法二:现代写法(复用构造函数) 3.赋值构造 写法一:传统写法 写法二:现代写法(复用拷贝构造) 4.析构函数 三、…

【flutter封装图片/视频选择控件】

引入库 wechat_assets_picker: ^6.0.5 、video_player: ^2.5.1 # 视频播放、 flutter_screenutil: ^5.7.0 import dart:async; import dart:io; import package:generated/l10n.dart; import package:jade/configs/PathConfig.dart; import package:jade/customWidget/addImag…

洛谷B3735题解

题目描述 圣诞树共有 n 层,从上向下数第 1 层有 1 个星星、第 2 层有 2 个星星、以此类推,排列成下图所示的形状。 星星和星星之间用绳子连接。第 1,2,⋯,n−1 层的每个星星都向下一层最近的两个星星连一段绳子,最后一层的相邻星星之间连一段…

算法知识点汇总

知识点 1. 求二进制中1的个数 int get_count(int x)//返回x的二进制有多少个1 int get_count(int x) {int res 0;while (x){res ;x - x & -x;}return res; }2. 建树,和树的DFS 记得初始化头节点 const int N 1e5 10, M N * 2; int h[N], e[M], ne[M], id…

RD55UP06-V 三菱iQ-R系列C语言功能模块

RD55UP06-V 三菱iQ-R系列C语言功能模块 RD55UP06-V用户手册,RD55UP06-V功能,RD55UP06-V系统配置 RD55UP06-V参数规格:10BASE-T/100BASE-TX/1000BASE-T 1通道;字节存储次序格式小端模式; 可使用SD存储卡插槽;工作RAM 1…

争光树脂邀您到场参观2024年第13届生物发酵展

参展企业介绍 宁波争光树脂有限公司成立于2006年11月,是浙江争光实业股份有限公司的全资子公司,公司专业生产离子交换树脂,产品的应用领域主要涉及电厂、核能、石油、化工、轻工、医药、食品、饮料、冶金、环保、生物等领域,年生…

AGV无人驾驶跨境运输新模式引领未来物流

agv AGV即“自动导引运输车”,这一概念起源于欧美,在欧美及日韩市场的发展比较成熟,于上世纪末被引入国内。这种自动导引运输车可以广泛应用于汽车、化工、医药以及食品饮料等制造业场景,以及机场、码头等仓储物流行业场景&#x…

JavaScript中什么叫深拷贝?

在 JavaScript 中,深拷贝指的是创建一个新的对象,这个新的对象与原始对象完全独立,没有任何共享的属性或者数据,它们不共享同一块内存地址。深拷贝会复制原始对象的所有属性和嵌套对象的所有属性,包括嵌套对象中的属性…