熊猫烧香病毒分析(下)

最后进行病毒专杀和文件修复的工作

病毒专杀:

由于现流行的编程语言版本和编译器版本编写专杀工具需要解决兼容win7_x32的问题,我就不花心思去解决了。我们可以使用批处理文件来实现。

程序需要实现的功能:

  • 删除并结束spo0lsv进程

  • 遍历每个盘,找到并删除setup.exe和autorun.inf,要避免误杀同名文件

  • 遍历路径,查找并删除Desktop_.ini,同样要避免误杀同名文件。

  • 修改注册表,删除Software\Microsoft\Windows\CurrentVersion\Run\svcshare和SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue

批处理文件实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@echo off
setlocal enabledelayedexpansion

REM 提升为管理员权限(需保存为.bat运行)
NET FILE >NUL 2>&1 || (powershell -Command "Start-Process '%~f0' -Verb RunAs" & exit b)

REM ██████ 终止进程并删除驱动文件 ██████
taskkill F IM spo0lsv.exe >nul 2>&1
if exist "C:\windows\System32\drivers\spo0lsv.exe" (
attrib -H -S "C:\windows\System32\drivers\spo0lsv.exe" >nul 2>&1
del F Q "C:\windows\System32\drivers\spo0lsv.exe" >nul 2>&1
echo 已删除 spo0lsv.exe
)

REM ██████ 遍历所有盘符删除隐藏的病毒文件 ██████
for f "skip=1" %%d in ('wmic logicaldisk where "DriveType=2 OR DriveType=3" get name') do (
set "drive=%%d"
if defined drive (
echo 深度扫描盘符: !drive!

REM ─── 处理根目录隐藏文件 ───
for %%f in ("!drive!\setup.exe" "!drive!\autorun.inf") do (
if exist %%f (
attrib -H -S -A %%f >nul 2>&1
del F Q %%f >nul 2>&1
echo 已清除根目录隐藏文件: %%f
)
)

REM ─── 递归处理子目录(含隐藏文件)───
for f "delims=" %%f in ('dir !drive!\* s b a:-d a:h 2^>nul ^| findstr i "\\setup.exe$ \\autorun.inf$"') do (
set "filepath=%%f"
REM 排除系统关键路径
if not "!filepath:\Windows\=!"=="!filepath!" (
echo 跳过系统文件: %%f
) else if not "!filepath:\Program Files\=!"=="!filepath!" (
echo 跳过程序文件: %%f
) else (
attrib -H -S "%%f" >nul 2>&1
del F Q "%%f" >nul 2>&1
echo 已删除隐藏病毒文件: %%f
)
)
)
)

:: 全盘遍历所有Desktop_.ini(严格匹配带下划线的文件名)
set "drive=C:"

REM 递归搜索并强制删除所有隐藏的Desktop_.ini文件
for f "delims=" %%f in ('dir a:h s b "%drive%\Desktop_.ini"') do (
del F Q A:H "%%f" >nul 2>&1
if exist "%%f" (
echo 删除失败(可能被占用或权限不足): %%f
) else (
echo 已删除: %%f
)
)

REM ██████ 注册表修复 ██████
reg delete "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\svcshare" f >nul 2>&1
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue" f >nul 2>&1
echo 注册表修复完成

pause

文件恢复:

逆向感染代码:

我们重新关注C_InfectFile(sub_407F00):

image-20250406144339906

大致逻辑:

  • 是把自己复制到目标文件目录下,伪装成目标文件(直接覆盖目标文件)

  • 把目标文件附加到伪装文件之后

  • 再在伪装文件之后添加一段字符串(”WhBoy”+”原文件名”+“.exe”+02+“原文件字节数”+01)

    image-20250406145633619

    这就实现了病毒“感染”。

编程文件恢复:

流程如下:

  • 识别被感染的病毒——可以通过末尾字符串识别。
  • 删除病毒部分——删除文件前30001个字节,这个部分应该建议通过计算原病毒大小来动态处理。
  • 删除文件最后的字符串标识。

批处理文件实现:

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
::C:\Program Files\IDA 6.8\idaw64.exe
@echo off
setlocal enabledelayedexpansion
:: 必须用管理员运行(右键选"以管理员身份运行")
set "target_file=文件路径"

:: 阶段1:安全截断前30001字节
powershell -Command "$f='%target_file%'; if (Test-Path $f) { $b=[IO.File]::ReadAllBytes($f); [IO.File]::WriteAllBytes($f, $b[30001..($b.Length-1)]) } else { exit 1 }"

:: 阶段2:精准解析尾部标识符
powershell -Command "$f='%target_file%'; $bytes=[IO.File]::ReadAllBytes($f); $sepIndex=$bytes.Length-1; while($sepIndex -ge 0 -and $bytes[$sepIndex] -ne 2){$sepIndex--}; $numStr=-join[char[]]$bytes[($sepIndex+1)..($bytes.Length-1)] -replace '[^0-9]',''; [IO.File]::WriteAllBytes($f, $bytes[0..([int]$numStr-1)]); echo 修复成功,最终大小: $numStr 字节"
pause

image-20250406232751253

心得:

这个病毒总的分析下来学到很多东西,编写者具有很强的工程思维,逻辑缜密,代码功力也很强。

最后:

image-20250406175153190

image-20250406175231727

太恐怖了,一觉醒来,就要攻击宿主机了。虚拟机网络还是设置成hostonly模式,并且宿主机关闭该局域网的”Internet 协议版本4(TCPIPv4)”才是安全的。