WannaCry勒索病毒复现及分析,蠕虫传播机制全网源码详细解读原力计划应用程序字符串调用

2017年5月12日,WannaCry蠕虫通过永恒之蓝MS17-010漏洞在全球范围大爆发,感染大量的计算机。WannaCry勒索病毒全球大爆发,至少150个国家、30万名用户中招,造成损失达80亿美元,已影响金融、能源、医疗、教育等众多行业,造成严重的危害。

WannaCry是一种“蠕虫式”勒索病毒软件,由不法分子利用NSA泄露方程式工具包的危险漏洞“EternalBlue”(永恒之蓝)进行传播。该蠕虫感染计算机后会向计算机中植入敲诈者病毒,导致电脑大量文件被加密。

WannaCry利用Windows系统的SMB漏洞获取系统的最高权限,该工具通过恶意代码扫描开放445端口的Windows系统。被扫描到的Windows系统,只要开机上线,不需要用户进行任何操作,即可通过SMB漏洞上传WannaCry勒索病毒等恶意程序。

WannaCry利用永恒之蓝漏洞进行网络端口扫描攻击,目标机器被成功攻陷后会从攻击机下载WannaCry蠕虫进行感染,并作为攻击机再次扫描互联网和局域网的其他机器,行成蠕虫感染大范围超快速扩散。

木马母体为mssecsvc.exe,运行后会扫描随机IP的互联网机器,尝试感染,也会扫描局域网相同网段的机器进行感染传播,此外会释放敲诈者程序tasksche.exe,对磁盘文件进行加密勒索。木马加密使用AES加密文件,并使用非对称加密算法RSA2048加密随机密钥,每个文件使用一个随机密钥,理论上不可攻破。同时@WanaDecryptor@.exe显示勒索界面。其核心流程如下图所示:

WannaCry勒索病毒主要行为是传播和勒索。

WannaCry传播机制源码详解

WannaCry蠕虫主要分为两个部分:蠕虫部分用于病毒传播,并释放出勒索程序;勒索部分用于加密用户文件索要赎金。大家可能看到的很多样本都是没有传播部分代码或域名开关的。接下来是作者一点点的摸索,希望对您有所帮助,也欢迎批评和指正。

1.WannaCry蠕虫传播流程

WannaCry运行的整体流程推荐安天公司的框架图,如下图所示:

其中,图中上半部分为WannaCry蠕虫的传播部分,该蠕虫通过网络进行传播,有自我复制和传播迅速等特点。传播步骤如下:

(1)连接远程域名开关

(2)判断参数个数,选择蠕虫安装流程或服务传播流程

①创建服务:服务名称mssecsvc2.0,参数为–msecurity

②释放并启动tasksche.exe程序

①服务函数中执行传播感染功能

②打开mssecsvc2.0服务并设置其状态

③蠕虫初始化操作后,会进行局域网和公网传播(建立局域网或公网IP表,创建IP线程)

④尝试连接445端口,测试是否存在SMB漏洞

⑤如果存在漏洞,则建立通信连接并发送Payload(X86或X64)进行攻击

⑥执行shellcode并使用APC注入将生成的dll注入到进程lsass.exe

⑦dll调用导出函数PlayGame,释放资源文件并保存为mssecsvc.exe执行

2.程序入口Start

通过OD打开样本wcry.exe,发现程序入口地址为0x00409A16,对应start()函数。

通过一些初始化设置,紧接着会调用WinMain()函数进入主程序。

主程序调用关系如下图所示,调用地址为0x00409B45。

3.域名开关WinMain

主程序运行后会先连接域名(KillSwitch)hxxp://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com

该代码会调用InternetOpenUrl打开对应的网址,并根据其访问情况执行不同的操作。如果网址无法访问,会调用sub_408090()函数创建蠕虫服务。这也意味着如果蠕虫作者注册并访问了该URL,WannaCry蠕虫也就停止了传播。目前该域名已被英国的安全公司接管,网上怀疑该操作能有效防止在线沙箱检测。

4.参数判断sub_408090

接着进入sub_408090函数,通过判断参数个数来执行相应的流程。

推荐绿盟API词典:恶意样本分析手册——API函数篇-李东宏

mssecsvc2.0服务对应的数据部分如下图所示,该服务会伪装成微软安全中心的服务,服务的二进制文件路径为当前进程文件路径,参数为“-msecurity”。

OD动态调试如下图所示,包括调用CALL访问函数,将服务PUSH入栈等。

5.蠕虫安装流程sub_407F20

蠕虫安装流程主要调用sub_407F20函数,包括sub_407C40和sub_407CE0。

(1)sub_407C40:创建mssecsvc2.0服务,并启动该服务,参数为”-msecurity”,蠕虫伪装为微软安全中心。

(2)sub_407CE0:读取并释放资源tasksche.exe至C:\Windows路径,创建线程运行。

主要调用的函数包括GetProcAddress、MoveFileEx、CreateFile等。

动态调用过程如下图所示:

释放的C:\Windows\tasksche.exe效果如下图所示:

6.蠕虫服务传播流程sub_4080000

当参数≥2时,蠕虫执行服务传播流程,调用sub_4080000实现,其代码如下:

sub_4080000会打开mssecsvc2.0服务并设置其状态,服务设置函数包括RegisterServerCtrlHandlerA、SetServiceStatus。

动态分析过程如下图所示:

核心函数是sub_407BD0,它的功能包括:

7.蠕虫初始化操作sub_407B90

蠕虫初始化操作主要调用sub_407B90函数实现,具体功能包括:

函数WSAStartup主要是进行相应的Socket库绑定。函数原型如下:

使用Socket程序之前必须调用WSAStartup函数,以后应用程序就可以调用所请求的Socket库中的其它Socket函数

应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源

Socket接口的检索有关域名、通信服务和协议等Internet信息的数据库函数

继续调用sub_407A20函数从内存中读取MS17-010漏洞利用代码,Payload分为x86和x64两个版本,32位大小为0x4060,64位大小为0xc8a4。

8.局域网传播sub_407720

蠕虫初始化操作后,会生成两个线程,分别进行局域网和公网传播。

局域网传播:蠕虫根据用户内网IP,生成覆盖整个局域网网段表,然后循环尝试攻击。

这里存在一个疑问:你怎么能确定v1是局域网传播,而v3是外网传播呢?

在函数sub_407720中,会继续调用线程执行sub_4076B0函数。同时,函数如果同时调用10个以上IP地址,会执行Sleep暂停100毫秒(1秒=1000毫秒)。

函数sub_407720会调用函数sub_409160,接着调用GetAdaptersInfo获取网卡配置和IP地址详细信息,最终进行局域网IP地址拼接和传播。而外网传播的IP地址是通过四个随机数产生的,通过这些差异就能判断是局域网传播还是外网传播。

函数sub_4076B0会连接445端口,如果445端口连接成功,接着发起漏洞攻击。如果连接超过10分钟则终止该线程。

接下来调用sub_407540函数发起漏洞攻击。

9.公网传播sub_407840

公网传播:公网IP地址通过4个随机数拼接而成,然后循环尝试攻击。

sub_407840函数会生成四个随机数,然后调用aDDDD进行IP拼接,表示成%d.%d.%d.%d。0xFF表示255,对应最大地址,v8余数不等于127内网。接着调用sub_407540函数进行外网传播。

作用:将一个点分十进制的IP转换成一个长整数型数

参数:字符串,一个点分十进制的IP地址

返回值:如果正确执行将返回一个无符号长整数型数,如果传入的字符串不是一个合法的IP地址,将返回INADDR_NONE

作用:将一个十进制网络字节序转换为点分十进制IP格式的字符串

参数:一个网络上的IP地址

返回值:如果正确,返回一个字符指针,指向一块存储着点分格式IP地址的静态缓冲区;如果错误返回NULL

在sub_407840函数中,继续调用线程执行sub_407540函数,该函数为漏洞利用核心函数。

10.漏洞检测及创建通信连接sub_407540

IP地址拼接好后,会创建漏洞利用线程,调用sub_407540函数。

通过connet建立Socket通信连接,再调用send和recv进行数据包握手确认。最后会调用核心函数sub_406F50。

11.发送SMB数据包sub_4072A0

建立通信连接(connect、send、recv),发送利用Eternalblue的蠕虫SMB数据包。具体流程包括:(还需进一步分析)

12.获取Payload(dll+shellcode)

样本在利用漏洞MS17-010获取目标主机权限后,并不会直接发送蠕虫自身到目标,而是发送一段经过简单异或加密后的Payload到目标机器中执行。在sub_4077A0函数中,v7是系统标记,当v7等于1时表示32位操作系统,当v7等于0时表示64位操作系统。

Payload由shellcode和包含样本自身的dll组成,Payload分为64位与32位,函数sub_406F50如下图所示。

dll同样分为64位与32位版本,根据目标主机系统的不同,读取不同版本的dll

13.提取shellcode

对应的反汇编代码如下,包括x64_payload_addr、x86_payload_addr。

32位Shellcode获取:0x42E758~0x42FA5D。

64位Shellcode提取:0x42FA60~0x43125F。

14.shellcode分析之安装后门

Shellcode反汇编及功能分析如下:

①查找基地址

②获取Hash计算方法

③根据基地址、函数hash字符查找导出函数地址

④查找需要用到导出函数地址并保存导出函数hash对照表

⑤查找目标进程,通过hash编码782BF0E7h进程名查找(lsass.exe)

⑥使用查到导出函数的地址,并进行APC注入

⑦最后将shellcode自身以及其所分配的内存清0

shellcode部分作者还需要进一步研究,加油~

安装后门主要执行sub_401370函数,在远程电脑上安装双星脉冲DOUBLEPULSAR后门。

15.shellcode分析之APC注入

shellcode第二部分是利用安装的后门,APC向应用程序注入dll。

(1)查找ntoskrnl.exe基地址

首先找到gs[38]处的_KIDTENTRY64指针,在KIDTENTRY64的偏移4,得到中断处理的函数指针,这个地址在ntoskrnl.exe中,我们就找到了ntoskrnl.exe的地址空间,然后去地址空间的页头地址对比PE头MZ,找到则函数返回。

(2)获取Hash计算方法

需要使用的函数并没有硬编码写到程序里,而是硬编码了这些函数的hash值。所以我们需要首先知道函数编码和hash值得对应关系。Hash计算方法如下,用c++代码注释了一下。

(3)根据ntoskrnl.exe基地址、函数hash字符查找导出函数地址

find_func函数如下,有了ntoskrnl.exe所有导出函数hash对照表,整个程序流程就明朗了。

(4)查找需要用到ntoskrnl.exe导出函数地址并保存备用

(5)查找目标进程,通过hash编码782BF0E7h进程名查找(lsass.exe)

查找目标进程,通过hash编码782BF0E7h进程名查找,直接没找到“lsass.exe”,查找方法是使用pid暴力查找。具体通过pid调用PsLookupProcessByProcessId得到pEProcess结构指针,再通过pEProcess调用PsGetProcessImageFileName得到进程名。

(6)使用查到导出函数的地址,并进行APC注入

APC注入,使用查到导出函数的地址,注释见截图。第六个参数包含了第三层shellcode和dll代码,可自行dump出研究,第七个参数指定为usermode。

(7)最后将shellcode自身以及其所分配的内存清0

内核部分的注入代码主要流程就分析完了,到用户层的shellcode自己实现的一个peloader而没有使用LoadLibary,这样使得注入更加隐蔽,查询PEB_LDR_DATA的也查不到被注入了dll。

16.dll导出及分析

shellcode使用APC注入将生成的dll注入到系统进程lsass.exe,导出的dll文件如下图所示:

火绒剑检测结果如下,通过APC注入将生成的dll注入到系统进程lsass.exe,接着释放资源mssecsvc.exe,最后释放勒索程序tasksche.exe。

17.释放资源tasksche.exe

dll具有一个导出函数PlayGame,它会将母体程序释放到被攻击的计算机,保存为C:\WINDOWS\mssecsvc.exe并执行。下面是作者分析导出的dll静态代码,主函数PlayGame。

PlayGame包括两个核心函数:sub_180001014和sub_1800010F8。

最后释放资源tasksche.exe(勒索加密程序)到C:\WINDOWS目录下,并将其启动。

18.勒索行为

运行病毒程序后的界面如下图所示,已经成功被勒索。再次强调,所有代码必须在虚拟机中执行,并且关闭文件共享。

样本的解压密码是WNcry@2ol7,通过资源工具也可以查看到。解压后的文件结构如下:

msg文件夹下就是所有的语言包。

总结

参考文献

[1]安天针对勒索蠕虫“魔窟”(WannaCry)的深度分析报告

[3]WannaCry勒索病毒详细解读-腾讯电脑管家

[4]NSAEternalblueSMB漏洞分析-360核心安全

[5]针对WannaRen勒索软件的梳理与分析-安天

[6]【权威报告】WanaCrypt0r勒索蠕虫完全分析报告-360追日

[7]WannaCry勒索病毒分析报告-瑞星

[1]对WannaCry的深度分析-鬼手56(勒索部分详解)

[2][原创]WannaCry勒索软件中“永恒之蓝”漏洞利用分析-展博

[3][原创]通过Wannacry分析内核shellcode注入dll技术-dragonwang

[4][病毒分析]WannaCry病毒分析(永恒之蓝)-小彩虹

[5]WannaCry勒索病毒逆向和内网传播数据分析-sec360zz

[6]首发|Wannacry勒索软件母体主程序逆向分析(含临时解决方案自动化工具)-expsky

THE END
1.Android中CameraX的基本使用(Kotlin实现)public void handleMessage(@NotNull Message msg) { if (originHandler != null) { originHandler.handleMessage(msg); } } } } 6.项目的Manifest代码如下: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" https://www.jianshu.com/p/0f0a04a53e85
2.MEMSICSemiconductorCo.,Ltd.MEMSIC Semiconductor is a world-leading IC product company, mainly engaged in MEMS (Micro-Electro-Mechanical System)sensor R&D, manufacturing and sales, providing “one-stop” sensor solutions of MEMS sensor chip, software algorithm and applications. Mhttps://www.memsic.com/en
3.MISSION?esiRNAtargetingmousePsma6Sigma基因信息 mouse PSMA6(26443) , Psma6(26443) 说明 一般描述 MISSION? esiRNA are endoribonuclease prepared siRNA. They are a heterogeneous mixture of siRNA that all target the same mRNA sequence. These multiple silencing triggers lead to highly-specific and effective gene silencing.For https://www.sigmaaldrich.cn/CN/zh/product/sigma/emu025841
4.荣耀magic6信号问题全面解析常出现断网无法连接的情况,你们有没有遇到过? [图片]查看全部刚换了msgic6,之前用华为Mate40Pro。https://ask.zol.com.cn/x/28789134.html
5.荣耀俱乐部荣耀俱乐部是荣耀终端股份有限公司为用户提供的官方交流互动平台。社区版块为荣耀HONOR用户提供荣耀手机版块(荣耀 Magic6、Magic Vs2、Magic 90GT、荣耀100系列、荣耀Vpurse、荣耀90系列、荣耀Magic5、荣耀Magic4、荣耀Magic3、耀Magic Vs、荣耀80、荣耀70、荣耀60、荣耀50https://club.hihonor.com/forumall-heat-118.html?orderby=heat
6.MSG1Grout reference Marble Water Water content sludge (g) ([cm.sup.3]) "W" (%) MSG1 2000 1200 60 MSG2 2000 1600 80 MSG3 2000 2000 100 MSG4 2000 2400 120 MSG5 2000 2800 140 MSG6 2000 3200 160 MSG7 2000 3600 180 MSG8 2000 4000 200 Grout reference Water/sludge Grout volume ([cmhttps://acronyms.thefreedictionary.com/MSG1
7.smggzy.sm.gov.cn/smwz/ReadAttachFile.aspx?AttachID=18bd6211YBiZR8s7vPIV53aNoRusFsloLMs0yQXwEbOSqFEq6ayzMbpCQdCWpRBMvW67P6Wke9IFTcegMV1WpajbJWI8NIXcEamk1imbPViMpGznfJWZixCQRD5mbxicZM9byxoZ5pRrPLo6tnV5Yx4arV5XGCyJneU4h6b7PPO4xYsQnqdc2Woc57bsmdzuEdEqqxUmwqc/iUbMIwZFLxUGZpPxV/ygcP0zOHv/onQdaZ06NMbDL1/gBLc3OnnxNfRSG+ZO48fXxBjh+nN9bSL3dhttps://smggzy.sm.gov.cn/smwz/ReadAttachFile.aspx?AttachID=18bd6211-3fd6-49f0-a2b9-d380b60b6572
8.SimulationofaDynamic,RuleSetnPgtdrAHBzpKsCBgQzI2ocLnbxspEFzmdlFlzmNkhHmBQ8RYW+IqwRUqs0X+F/i0HbE2n4OefqjW+RaTl8fKBIbpga6pRvd0Q0/09mOvatgjeEuFd62uFW6u52hg/fVPlcW7xP6H6heFy3UVzgT+/H8oApcSeUyF7gx264ZM4Fuv68sHJ7X16bXh6ghd0jM7vqBHumPPdvlFv1oVa6eI8chSXwf0HWTGx1KMVyeSM3PR8NowiCGM8oQmMYNFrCDN91o4xhnOlYSyhttps://arxiv.org/pdf/1908.10758
9.madwifi(ic, IEEE80211_MSG_OUTPUT, + ("%s: cannot unshare for encapsulation\n", __func__)); + ic->ic_stats.is_tx_nobuf++; + } else if (skb_tailroom(skb) < need_tailroom) { + if (pskb_expand_head(skb, need_headroom - skb_headroom(skb), + need_tailroom - skb_tailroom(skb), https://sourceforge.net/p/madwifi/mailman/madwifi-cvs/?page=149
10.Python十五个超级炫酷代码研学社的技术博客6 一颗小爱心 7 一个呆萌的皮卡丘 8 小猪佩奇 9 放烟花 10 小呆呆小黄人 11 十里桃花飘落 12 炸死小坏蛋 13 哆啦A梦 https://blog.51cto.com/u_15739983/5983139
11.AMQ6xxx:CommonservicesThis may be because the AMQMSG message file could not be found. The message identifier is <IBM MQ was unable to display an error message <insert_6>. Severity 0 : Informational ExplanationUsage: amqicdir <insert_-s> [-a] [-f] [-i] Severity 20 : Error Explanation An incorrecthttps://www.ibm.com/docs/en/ibm-mq/8.0?topic=messages-amq6xxx-common-services
12.推送:1746OB6EI省市县区域/直送2023全+境+派+送价格GEFanucIC697MDL250F32Point120VACInputModule90-70IC697MDL250 GEFanucIC697MDL340F16PointOutputModule120VAC2AMP90-70IC697MDL340 GEFanucIC697MDL350C32Point120VACOutputModule90-70IC697MDL350 GEFanucIC697MDL350COutputModuleIC69790-70IC697MDL350 https://www.china.cn/qtgongkongxitongjizb/5211765570.html
13.BenzothiazoleAmidesasTRPC3/6InhibitorsforGastricCancerTransient receptor potential canonical channel 6 (TRPC6) has been implicated in many kinds of malignant tumors, but very few potent TRPC6 antagonists are available. In this study, a benzothiazole ahttps://pubs.acs.org/doi/10.1021/acsomega.1c00514
14.STM6777MSGWY6E数据表(PDF)部件名STM6777MSGWY6E 下载STM6777MSGWY6E下载 文件大小251.97 Kbytes 页29 Pages 制造商STMICROELECTRONICS [STMicroelectronics] 网页http://www.st.com 标志 功能描述Dual/tripleultra-lowvoltagesupervisorswithpush-buttonreset(withdelayoption) 类似零件编号 - STM6777MSGWY6E https://cn.alldatasheet.com/datasheet-pdf/pdf/242944/STMICROELECTRONICS/STM6777MSGWY6E.html
15.MTRJFTV6MSBA中文资料数据手册规格书AMPHENOLMTRJFTV6MSBC AMPHENOL Fiber Optic Connector Adapter, Single Mode, Simplex, Plug 获取价格 MTRJFTV6MSBE AMPHENOL Fiber Optic Connector Adapter, Single Mode, Simplex, Plug 获取价格 MTRJFTV6MSGB AMPHENOL Fiber Optic Connector Adapter, Single Mode, Simplex, Plug 获取价格 MTRJFTV6MSGC AMPHENOL Fibhttps://www.icpdf.com/AMPHENOL_datasheet/MTRJFTV6MSBA_pdf_16077521/
16.github.com/qinix/sol2/commit/479575c0ca1a927bb72deab4a8679ddm<8l?B@ z&kG-F!E+1%wy>1+LsJ7jfK(D6z_pf||Jq6I1b_fZ@z1Gsl|^#h!*|+?lJPZ02-8}Y zr236L%|}08?f`9zoulJ^_K;q2AjZ;-FPx}NT${Tm2AswMijaulX=@q&B*?Zj(NIr# z#?Dpl=1ExnjF;(qcjd4n6Ic9VN!$555_I92=-6=vFj~8FsODLwe+D$8J^33#16Zxe z_tdBY#JbZD-P&uyTkE_Er_qhttps://github.com/qinix/sol2/commit/479575c0ca1a927bb72deab4a8679dd76ab14af1.patch
17.Qcomlk阶段i2c接口配置方案I2C6qcom将uart改为i2c本文详细介绍了在高通MSM8952平台上,针对I2C6(BLSP6 QUP2)的初始化过程,包括gpio口22和23的配置、中断号300的定义以及时钟设置。通过修改`irqs.h`、`gpio.c`、`acpuclock.c`和`clock.h`等文件,实现了I2C中断号的添加、gpio和时钟的配置。同时,展示了如何在lk阶段的I2C测试程序中读取外部设备电压,以检查电池https://blog.csdn.net/qq_45034380/article/details/123005335
18.自做賽到2^^3c6 8g6 3dn 8fp 3f1 8fe 3g4 8f3 3h7 8em 3ic 8e7 3jo 8dm 3l9 8d8 3mj 8cq 3o0 8cc 3pg 8bu 3r2 8bj 3sm 8ba 3uc 8b4 404 8b0 41s 8b2 43m 8bb 45g 8br 479 8ch 492 8dd 4aq 8eb 4ch 8fe 4e8 8gj 4fv 8hq 4hl 8j3 4j9 8ke 4kt 8lr 4mf 8n9 4o1 8oo https://www.j2h.tw/bbs/bbs6/16459.html
19.[OpenWrtWiki]XiaomiRedmiAX6Wi{"msg":"connect succces!","code":0} If you get “504 Gateway time-out”, make sure you used WPA2 security mode for the password on Router B and repeat the previous point. If you get a “DHCPerror”, make sure you disabledDHCPserver onLANinterface of Router B and repeat the previohttps://openwrt.org/inbox/toh/xiaomi/xiaomi_redmi_ax6_ax3000
20.UnbreakableEnterpriseKernelリリース6(x86ipmi_msghandler 39.2 IPMIインタフェースの着信および発信メッセージ?ルーティング。 ipmi_poweroff sys_rebootへのIPMI Poweroff拡張 ipmi_si KCS、SMIC、およびBTのシステム?インタフェース用のIPMIドライバへのインタフェース。 ipmi_ssif SMBus上の管理コントローhttps://docs.oracle.com/cd/F10276_01/6/relnotes6.2/uek6.2-DriverModulesinUnbreakableEnterpriseKernelRelease6x8664.html
21.DescriptionofthesecurityupdateforSQLServer2016GDRMsg-dqi6.dll 13.0.1745.2 58,032 30-Dec-2017 04:01 x86 M_ncv9aa.dll 13.0.14500.10 24,768 18-Apr-2016 08:19 x86 Oqqljyw1.dll 2015.130.1745.2 36,528 30-Dec-2017 04:01 x86 Pi_fwbnq.dll 13.0.1745.2 408,240 30-Dec-2017 04:01 x86 R5lhttps://support.microsoft.com/en-us/topic/description-of-the-security-update-for-sql-server-2016-gdr-january-6-2018-cfc351d4-85ef-9539-d651-00d9a7441e08
22.郑州轻工业学院VPN客户端使用说明鍥?1.2锛氶€夋嫨涓 枃 3.涓€浜涙彁绀轰俊鎭 紱 鍥?1.3锛氫笅涓€姝? 4.娆㈣繋鐣岄潰锛? 鍥?1.4锛氬啀涓嬩竴姝? 5.閫夋嫨鎺ュ彈璁稿彲璇佸崗璁 腑鐨勬潯娆撅紱 鍥?1.5锛氶€夋嫨鎺ュ彈鏉℃ 6.濉 啓鐢ㄦ埛鍚嶇О鍜屽叕鍙稿悕绉帮紝姝ゅ 鐨勪袱椤瑰潎鍙 殢鎰https://www.zzuli.edu.cn/_upload/article/files/5e/29/7b7da5044d829ea52589d3fc89e2/d18cb291-2f57-4cfc-9365-7d29de34432c.mht