问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
挖矿病毒处置总结
安全管理
处理过的挖矿病毒隐藏自身的方式总结及处置方法总结
1、加密货币与挖矿 --------- 加密货币是没有物理形式,且仅存在于网络的数字货币,因其前瞻性设计、价值增长潜力和匿名性而广受欢迎。最著名以及最成功的加密货币是2009 年问世的比特币。加密货币由“密码学”和“货币”两个词组合而成,是一种基于复杂的数学加密原理来确保交易安全及控制交易单位创造的交易媒介。所有加密货币都以加密的去中心化货币单位存在,可在网络参与者之间自由转移。 “挖矿”是指通过执行工作量证明或其他类似的电脑算法来获取虚拟货币,“矿”代表的是虚拟货币,挖矿的工人通常称为“矿工”。而“挖矿木马”是一种集成化恶意代码,能够通过各种手段将挖矿程序植入受害者的计算机中,在用户不知情的情况下,利用受害者计算机的运算力进行挖矿,从而获取非法收益。这类非法入侵用户计算机的挖矿程序被称作挖矿木马。 2、挖矿方式 ------ 挖矿方式有两种:一种是solo式(即个人单独挖矿,直接连入中心网络工作),产出收益均归自己所有;另一种是连入矿池,收益与矿池分成。 挖矿类型还可以分为两种:一种是被动型挖矿,在用户不知情的情况下被植入挖矿程序,获取的虚拟货币归植入挖矿程序的入侵者所有;另一种是主动型挖矿,人员主动利用计算资产运行挖矿程序,获取的虚拟货币归计算资产所有者或使用者所有。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-a1d90a8ebc989ad9b2b90328ad4318f4e6bc97fc.png) 3、感染挖矿木马的迹象 ----------- 根据某些迹象,用户可以初步怀疑设备已感染挖矿木马恶意软件,如下: ①CPU 使用率大幅高于正常数值,甚至 100% ②电脑过热 ③系统运行速度变慢 ④设备比正常情况下更频繁地使用冷却风扇等 `其他情况`:其中一些挖矿木马家族会对自身的行为进行限制,只在CPU资源闲置时进行挖矿,当用户查看CPU资源时,将停止挖矿,导致用户很难察觉是否存在感染挖矿木马的异常行为。 4、挖矿类型 ------ 恶意挖矿通常分为基于浏览器的驱动式网页挖矿和二进制文件的恶意挖矿。 驱动式网页挖矿与恶意广告攻击类似,攻击者将一段JavaScript 代码嵌入到目标网页中。当用户访问该页面时将执行JS脚本,进行加密货币挖掘,缺点是用户退出页面时将结束挖矿。 而二进制文件的恶意挖矿与网页挖矿不同,一旦计算机感染恶意挖矿程序,受害设备将开始全天候的虚拟货币挖矿,同时将恶意进程隐藏在后台,并启用多种持久手段在目标设备上驻留,直到威胁被清除为止。 5、挖矿木马传播方式 ---------- 1. 钓鱼邮件传播 攻击者伪造邮件,通过邮件附件传播恶意软件,或者通过邮件中的恶意链接诱导用户点击下载恶意软件,当用户打开恶意软件时,将导致系统被植入病毒,并执行脚本自动化横向渗透网络,部署挖矿程序进行作业获利。 2. 通过非法网页进行传播 攻击者通常会在色情网站和在线赌博等非法站点上内嵌网页挖矿脚本,由于这类站点打开后往往需要停留一段时间才出现界面,不会轻易引起用户的怀疑, 这也是黑客选择这些非法网站部署网页挖矿的原因之一,用户一旦进入此类网站,JS脚本就会自动执行,并占用大量的CPU资源以挖取门罗币,致使电脑出现卡顿。 3. 软件捆绑下载传播 在一般情况下,激活工具、破解软件、游戏外挂以及盗版游戏等来历不明的下载站点是感染挖矿木马的温床。攻击者通过捆绑下载方式植入恶意挖矿程序,当用户下载执行激活工具、破解软件、游戏外挂以及盗版游戏时,将执行恶意程序在后台进行挖矿恶意活动。 4. 通过僵尸网络进行分发 攻击者会选择组建一个规模庞大的挖矿僵尸网络进行恶意活动,并通过各种方式入侵目标设备,例如网页挂马、MySQL 数据库弱口令爆破等方法传播僵尸程序,这些僵尸程序一般内置蠕虫模块,使受害机器成为新的攻击源,从而迅速传播爆发,并通过多个主机组成僵尸网络。攻击者可以在控制端中通过僵尸网络下发指令到受害主机,执行分发挖矿木马等恶意操作。目前,这种构建僵尸网络下发挖矿木马的方法已成为挖矿黑产团伙的主要手段。 5. 通过漏洞传播 通常,企业可能会提供对外的网站服务,但其服务器操作系统却存在仍未修补的漏洞,给了攻击者可乘之机。漏洞利用一直是挖矿木马用作传播感染的重要手段,其通过配备各种可利用的通用漏洞对目标网络资产进行扫描,如果设备未及时修补漏洞,将很有可能导致入侵事件的发生。 6. 利用软件供应链感染传播 供应链感染可在短时间内获得大量的计算机资源,而备受黑产青睐,例如“恶意NPM软件包携带挖矿恶意软件”安全事件就证明了通过开源软件包存储库进行软件供应链攻击的有效性,在这之前就发生过多起类似的安全事件,如 2021年6月初研究人员就曾在 PyPI 软件包仓库中发现恶意挖矿程序。 7. 通过浏览器插件传播 攻击者通过将恶意插件伪装成正常的 Chrome 浏览器插件,上传到插件商店供用户使用,而该插件实则上被内置了恶意代码,当用户下载安装后,将执行挖矿等恶意操作。例如有一款浏览器插件名为 Archive Poster,原本的功能是协助用户在社交平台汤不热 (Tumblr)上进行多账号协作,该恶意插件会劫持电脑资源去挖掘虚拟货币 Monero,背地里却在未经用户同意的情况下,利用 Coinhive 软件开始挖矿作业。 8. 容器镜像污染 随着云原生容器的应用越来越流行,黑产团伙也将目光瞄向了这个领域。在云容器当中,最为著名的是 Docker Hub 公共容器镜像仓库,黑产团伙利用Docker Hub上传恶意挖矿镜像,污染容器镜像,当用户下载执行镜像时,将导致其docker主机被感染,攻击者还会通过容器服务器的漏洞传播蠕虫病毒,以尽可能地感染更多的docker主机,并执行挖矿程序进行牟利。 这种容器镜像污染的攻击方式所造成的下载传播量 通常能达数十万,甚至数百万以上,给云原生环境造成严重的污染。 9. 利用移动存储介质传播 在2015年就出现了通过USB设备和其他可移动媒体传播挖矿程序的攻击案例,例如著名的 Lemon Duck 挖矿团伙就曾利用 CVE-2017-8464 快捷方式漏洞作为感染传播的途径。通过将恶意的 Windows\*.lnk 快捷方式文件和恶意DLL文件一起植入文件夹中,当使用解析.lnk 快捷方式文件打开驱动器时,快捷方式将执行恶意的DLL组件,从而触发CVE-2017-8464LNK 远程执行代码漏洞,导致可移动USB驱动器和网络驱动器被感染。 在用户不知道移动介质已被感染的情况下,很可能会将受感染的设备携带到其他不联网的环境中,导致原本安全的环境被病毒渗透,从而扩大内部感染范围并影响工作环境的正常运作。 6、挖矿病毒的危害 --------- 受感染的设备通常会产生以下较为明显的负面影响: ①能源消耗大,与节能减排相悖而行 挖矿木马迫使信息系统基础设施长时间高负载运行,致使其使用寿命缩短,运行性能严重下降。 ②降低能效,影响生产 挖矿病毒最容易被感知到的影响就是机器性能会出现严重下降,影响业务系统的正常运行,严重时可能出现业务系统中断或系统崩溃。直接影响企业生产,给企业带来巨大经济损失。 ③失陷主机沦为肉鸡,构建僵尸网络 挖矿病毒往往与僵尸网络结合,在失陷主机感染挖矿病毒的同时,挖矿木马普遍具有添加SSH免密登录后门、安装RPC后门,接收远程IRC服务器指令、安装Rootkit后门等恶意行为,致使受害组织网络沦为僵尸网络。 ④失陷主机给企业带来经济及名誉双重损失 失陷主机在感染挖矿病毒同时,也会被安装后门程序,远程控制软件等。这些后门程序长期隐藏在系统中,达到对失陷主机的长期控制目的,可以向主机中投放各种恶意程序,盗取服务器重要数据,使受害企业面临信息泄露风险。不仅给而企业带来经济损失,还会带来严重的名损失。 7、挖矿处置 ------ ### 7.1 异常情况确认 当有挖矿告警时,首先需要查看挖矿告警确定挖矿连接的域名或IP,同时观察访问挖矿IOC的频率是多少(基本信息收集),接着通过威胁情报确定挖矿的家族,可以为后续的溯源分析做准备。如下图中可以看到访问的域名为donate\[.\]ssl.xmrig\[.\]com ,访问的频率为1分钟左右访问1次。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-958a88843d2c9655a0db24766c58f850c21bc31e.png) 通过威胁情报查询域名确认为矿池域名,确认中了挖矿。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-efd51da5fff4b09acb6547df12dd7ef4cc792ecc.png) ### 7.2 上机排查 #### 7.2.1 显性排查 显性排查,就是挖矿病毒的现象在上机查看很明显,排查处置的过程跟普通的病毒排查过程没有区别,通过外联的挖矿域名或者IP定位通信进程,从而定位到挖矿的文件位置,最后对挖矿进程和挖矿文件清理后,排查系统基础项: **系统用户:** Linux系统 Cat /etc/passwd | grep /bin/bash Windows系统 ①使用net users命令,可查看系统用户情况; ②打开计算机管理-->本地用户和组中可查找可疑用户及隐藏用户(用户名以$结尾的为隐藏用户);可以使用快捷键,win+R,输入lusrmgr.msc,打开本地用户和组。 ③有时攻击者也会克隆正常的用户名来隐蔽自己,可以通过注册表方法查找克隆用户,也可以通过工具查找克隆用户,比如D盾就可以查找隐藏用户。 **免密用户排查(只有linux排查)** chattr -ia /root/.ssh/authorized\_keys rm -f /root/.ssh/authorized\_keys ls -lhta /root/.ssh/ **开机启动项:** Linux系统 vi /etc/inittab id=3 initdefault:系统开机后直接进入哪个运行级别 more /etc/rc.local ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-0fd59ac59d825823b5d4b3d137c00cc8d7921151.png) /etc/rc.d/rc\[0~6\].d Is -lart /etc/rc.d/init.d/ ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-dbc046b0f0f311731c34f8964f36bcd256ac3d0a.png) **定时任务:** Linux系统 /var/spool/cron/目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名 /etc/crontab 这个文件负责调度各种管理和维护任务。 Windows系统 1、在桌面打开运行(可使用快捷键 win+R),输入 control 打开控制面板,在 系统与安全 中查看计划任务属性,便可以发现病毒文件的路径。 2、也可以使用 SCHTASKS 命令查询计划任务。例如,若要显示名为 "MyTask" 的当前计划任务的详细信息,请执行以下命令:schtasks /query /tn "MyTask" **系统服务:** Linux系统 文件路径:/usr/lib/systemd/system/ /etc/systemd/system/ systemctl stop 服务名称 停止服务 systemctl disable 服务名称 阻止服务在运行时自动启动 Windows系统 win+R,输入services.msc,查看服务 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-33fdb36c5fe2605132d93e1655a271296f0f2a8e.png) #### 7.2.2 隐性排查 隐性排查与显性特征相反,上机排查使用系统的内置命令或工具看不到挖矿的特征如(CPU使用率正常、网络连接过滤、系统命令替换、进程被隐藏、挖矿文件被删除等等)。 ##### 7.2.2.1 库文件劫持 LD\_PRELOAD 是 Linux 操作系统的一个环境变量,用于动态库的加载,且动态库加载的优先级最高,一般情况下,其加载顺序为LD PRELOAD>LD LIBRARY PATH>/etc/ld.so.cache>/lib>/usr/ib。它允许定义在程序运行前优先加载的动态链接库,可以覆盖一些系统调用,设置完成后立即生效。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-b1f39954ff30bad40554faae6326cc1368c2b94b.png) 劫持预加载动态链接库的进程隐藏方式往往是过滤ps等命令从 /proc/ 获取的结果。 检测方法1:使用sysdig(有开源版,可以监控ps等的调用过程,观察是否有恶意动态库被加载) ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-53150eb77b38da29f7d8d0567b490fc7046a2d24.png) **安装方法** 1、导入draios源 rpm --import <https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public> curl -s -o /etc/yum.repos.d/draios.repo <http://download.draios.com/stable/rpm/draios.repo> 2、装包 yum -y install kernel-devel\* dkms sysdig 检测方法2:使用strace追踪命令加载库文件是否有异常 ldd /bin/cat确认加载的库文件是否正常,如被劫持被劫持的库文件/etc/ld.so.preload。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-97442c25d2168e7dbf3b939c2c53fe6874d1af50.png) 使用busybox工具删除恶意库文件。如果无法删除,可以chattr去掉隐藏属性再rm删除。 检测方法3:prochunter工具 下载链接:<https://github.com/n0way0ut/prochunter> ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-51ab6e4c4b0bd6d4d59b24bc75f4e5654122e660.png) 如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据; 如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件; BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。BusyBox 包含了一些简单的工具,例如 ls、cat 和 echo 等等,还包含了一些更大、更复杂的工具,例 grep、find、mount 以及 telnet。 ./busybox lsattr -ia /etc/ld.so.preload 查看文件属性 ./busybox chattr -ia /etc/ld.so.preload 去掉隐藏属性 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-b24ec7bbf032c63c4a122e4e32be60613b5398f0.png) ##### 7.2.2.2 守护进程 为了防止挖矿进程被杀掉,部分挖矿木马会创建守护进程用以监控挖矿进程的状态,在挖矿进程被kill时能够及时重新拉起,以RainbowMiner为例,下图中kthreadds为挖矿进程,pdflushs为守护进程: ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-177d67dbe6c686096b5a933e2286dfbf7c382ffa.png) ##### 7.2.2.3 命令替换 替换ps、top、ls等命令的文件,破解方法很简单,查看文件修改时间和HASH值,如果与默认时间,或正常命令文件的HASH值不符,则被替换。破解方法,传回来一个正常的文件重新使用命令操作即可。 查看文件状态stat filename ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-e6087fd53ccefaac8eed2da6073b7a5e0095017a.png) 计算文件hash值 md5sum filename ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-eaaeed851e09b611afb700ee3de1ea1e055ba3a3.png) 也可使用rkhunter检查 Linux 系统命令是否被替换 工具链接: rkhunter可以在系统启动时创建一个以PID命名的目录在/proc下,其中包含该进程的信息,通过检查文件修改时间或大小是否改变来检测命令是否被替换。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-e5c218a90fb6da40cbdddb43011d28c3a720590d.png) 系统完整性性可以通过rpm(不适用于Ubuntu系统)自带的-Va来校验检查所有的rpm软件包,有哪些被篡改了,防止rpm也被替换,上传一个安全干净稳定版本rpm二进制到服务器上进行检查。 rpm -Va > rpm.log 如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是8位长字符串, c 用以指配置文件, 接着是文件名。 8位字符的每一个用以表示文件与RPM数据库中一种属性的比较结果。 . (点) 表示测试通过。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-48ad480b527fccd3d11c424adb3058c21c9133e5.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-5436bb26cdca79bf3a32e1efc4f115e0fda33034.png) 如果命令被替换了,还原回来的步骤如下: 文件提取还原案例: rpm -qf /bin/ls 查询 ls 命令属于哪个软件包 mv /bin/ls /tmp 先把 ls 转移到 tmp 目录下,造成 ls 命令丢失的假象 rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls 提取 rpm 包中 ls 命令到当前目录的 /bin/ls 下 cp /root/bin/ls /bin/ 把 ls 命令复制到 /bin/ 目录 修复文件丢失 ##### 7.2.2.4 挂载隐藏 在Linux系统中,/proc目录是一个虚拟文件系统,提供了对系统内核和进程信息的访问。每个运行的进程都有一个以其PID (进程ID)命名的子目录,例如/proc/1234。 **原理** 当挂载一个特定进程的/proc/PID 目录时,实际上是在创建一个新的挂载点,与系统的/proc 目录不同。这样做会导致无法正常获取到进程信息,因为系统命令ps、top等依赖于默认的/proc 目录结构,通过readdir()函数获取/proc目录下内容来获取进程信息。 挂载特定PID文件,挂载后可隐藏PID,使用netstat、top等命令无法看到该进程ID;使用ps可以看到进程但无法看到进程命令。 mount -t proc proc /proc/PID ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-1cbf4c64151f199e0733fb8ef1e3cb084af49a7b.png) 使用mount可以查看挂载的进程 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-1a12df4ee3f81d57e4c2cf32bf389365b1221ac5.png) 要想取消挂载恢复隐藏PID,使用umount /proc/PID即可 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-9c97bbea2920e48eb32f9d0100fda63e9fa1f024.png) ##### 7.2.2.5 内核劫持(模块) Linux内核级rootkit技术是一种极为高级的黑客攻击技术,它能够打破Linux系统的安全防御,实现对系统和用户的完全控制。相较于用户态rootkit,内核级的rootkit在操作系统内核层进行操控,更难被发现。一旦成功安装,rootkit就可以在操作系统内核中运行,更加持久和难以清除,并且由于存在于内核级别,它能够篡改内存数据和内核模块,控制权更高,危害更大。 Linux常⻅的rootkit为动态链接器劫持型,以及LKM型。可加载内核模块(Loadable Kernel Modules,LKM)是可以根据需要加载和卸载到内核中的代码⽚段。可加载内核模块是可以根据需要加载和卸载到内核中的代码⽚段。 它们⽆需重启系统即可扩展内核的功能,例如设备驱动程序。默认情况下,modprobe 尝试从/lib/modules//kernel/ ⽬录加载模块。某些模块具有依赖性,即在加载相关模块之前必须加载的其他内核模块。模块依赖项列表由 depmod 程序⽣成和维护,该程序会在安装内核或驱动程序包时⾃动运⾏。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-357bf776567f82fc72306fccda727deea81d3b14.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-d5488df4eeb2e9c023f114d1e52999d855c6a560.png) 内核态的隐藏进程方法除了新增内核模块(LKM),还有可以修改内核模块,但是修改内核模块一般需要重启。 可以使用uname -a查看内核编译时间 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-8aae003319902126c0ff1ff340df995c48c7ad6f.png) 使用lsmod查看内核模块 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-22d2b0da078c7d0ce5bfbe3bec5dbf7d3321c5b1.png) ##### 7.2.2.6 删除文件恢复挖矿文件 在Linux系统中删除文件是很难找回的,即便是找回也可能是残缺不全。由于Linux中文件删除时不影响进程的,所以只要文件在进程中时被打开的,那就可以通过进程找回删除的文件。 举例:可以通过lsof看看哪些文件是deleted的状态 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-a685b1c5c3b1010c34387f97002a2989087e82ad.png) 可以看到很多删除的日志是1168这个进程,看一下是rsyslogd服务。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-ba9858cd38f50934d6b1257be052292a6287439b.png) 进入/proc/1168/fd目录,可以看到这个进程中删除的文件 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-45f8b42f825cad0df4b88240b5b2d21019ba700d.png) 恢复文件重定向对应的序号导出即可 cat 3 >/var/log/messages ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-57c1f5da7bfd7b8e782d96d86aab28a03890ba70.png) 工具恢复:extundelete【官方链接】 依赖安装: **centos安装操作** yum install e2fsprogs-devel e2fsprogs *gcc* **ubuntu安装操作** apt-get install build-essential e2fslibs-dev e2fslibs-dev 编译安装: wget <http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz> tar xfextundelete-0.2.4.tar.bz2 cd extundelete-0.2.4 ./configure make make install 8、挖矿木马防范 -------- 无论是在本地系统还是通过浏览器被恶意挖矿,一般事后都较难通过手动检测找到入侵路径,而且也很难快速排查出高CPU使用率的原因。因为恶意挖矿软件可能会隐藏自身或伪装成合法的进程,以避免被用户删除。当计算机以最大性能模式运行时,系统速度将会非常慢,因此更难排除故障,所以预防恶意挖矿软件的最好方法,是在成为受害者之前采取安全措施。 最常见的方法是在常用的浏览器中阻止 JavaScript 脚本运行。虽然该功能可以有效阻止路过式网页挖矿攻击,但同样也会阻止用户使用浏览器插件功能,另外一种方法是安装专门用于防范浏览器挖矿的拓展程序,例如“No Coin”和 “MinerBlock”,两者都有适用于 Chrome、Firefox 和 Opera 的扩展程序。 另一种防范本地系统感染恶意挖矿的方法与常规恶意软件基本相同: 1. 提高个人安全意识,从正常的应用市场和渠道下载安装应用程序,不轻易安装来历不明的第三方软件,或随意点击和访问一些具有诱导性质的 不良网页; 2. 安装终端安全防护并定时进行全盘查杀; 3. 及时修复系统漏洞,更新系统版本、软件版本和应用版本。
发表于 2024-12-31 09:00:00
阅读 ( 855 )
分类:
应急响应
1 推荐
收藏
0 条评论
请先
登录
后评论
hupo_zhu
1 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!