Python程序钓鱼样本分析

本文针对一个伪装成 PDF 的钓鱼样本展开分析。样本最初由 Python 编写并打包为 EXE,运行后会正常打开 PDF 诱导受害者放松警惕,同时在后台释放并执行恶意程序。通过提取 EXE 中的 PYC 文件、还原 Python 脚本、解码内嵌的 PDF 与二阶段 EXE,进一步确认其为典型的“文档诱饵 + 木马投递”攻击链。随后针对二阶段程序继续分析,结合 PyInstaller 解包特征、临时目录 _MEI 文件捕获、加密载荷提取与解密逻辑还原,最终定位到其会将解密后的 ShellCode 注入进程执行,并加载 Cobalt Strike 木马与远程 C2 通信。

关于后续的样本分析文章,前期主要以参考复现别人的样本分析文章为主,后期则自找样本进行分析。当然针对别人的样本分析文章,绝对不是完全复制粘贴过来哈,因为原作者可能太熟悉擅长分析样本了,所以很多分析文章写的太简要了,省略了很多细节。所以,我会根据自己复现过程中的理解,完善我认为需要添加的内容和步骤到文章中。

1、钓鱼样本使用 python 编写,再打包成 exe 程序。编译时间为 2025-11-07。

image-20260324160918696

2、解析该 exe 程序,获取对应的 pyc 文件。

image-20260324170254987

3、解析 pyc 文件得到 python 脚本。

image-20260324181207395

image-20260324181343557

4、脚本变量包含一个 pdf 和 exe 数据。

image-20260324181631824

5、依次解码 base64 提取 pdf 和 exe 文件。

image-20260324182831646

image-20260324182235964

一个文件为 pdf,一个文件为 exe。

6、结合沙箱,确定该样本为 PDF 文件捆绑木马。运行后会正常打开 pdf 文件,并后台执行恶意的 exe,向 C2 发起回连。

image-20260324183446566

7、对得到的 exe 进行进行识别。

image-20260324183758162

程序同样使用 python 编写。同样,提取 python 脚本内容。

8、这里直接使用 pycdc 提取脚本会出现不全的情况。

image-20260324190555128

需要手动使用 pycdas 先还原 pyc 为 asm 文件,再根据 asm 文件尝试手动(或借助AI)还原 py 脚本。

或者推荐直接在线还原(https://pychaos.io/)。

image-20260424150252086

脚本会读取 exe 执行后释放的加密数据文件 encrypted_payload.bin。

image-20260324210626096

9、encrypted_payload.bin 不是脚本自己写出来的,而是 PyInstaller onefile 在运行时临时解包到 _MEI… 目录里的,进程退出后,bootloader 会把整个 _MEI… 目录清掉。本地可通过 Noriben 工具捕获到相关文件的创建记录。

image-20260324212157243

如果要把文件真正取出来,可以尝试在样本运行后立刻挂起 tmp…exe,趁 _MEI… 还在时复制目录。我们可以运行以下 Powershell 脚本持续监控 %LocalAppData%\Temp\_MEI*,一出现就自动复制到 C:\dump_mei 目录。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$srcRoot = "$env:LOCALAPPDATA\Temp"
$dstRoot = "C:\dump_mei"
New-Item -ItemType Directory -Force -Path $dstRoot | Out-Null

while ($true) {
    Get-ChildItem $srcRoot -Directory -Filter "_MEI*" -ErrorAction SilentlyContinue | ForEach-Object {
        $dst = Join-Path $dstRoot $_.Name
        if (-not (Test-Path $dst)) {
            Copy-Item $_.FullName $dst -Recurse -Force -ErrorAction SilentlyContinue
        }
    }
    Start-Sleep -Milliseconds 200
}

获取到的数据如下:

image-2026032421270658010、加密的数据文件 encrypted_payload.bin 内容如下:

image-20260324212814817

image-20260324212948032

11、解密算法如下:

image-20260324213005506

12、还原的 ShellCode 内容如下:

image-20260324213928177

13、程序会将该 ShellCode 注入到进程当中执行。

image-20260324221414125

image-20260324221529319

14、解密出来的 ShellCode 就是一个 CS 木马,与黑客远程服务器通信,如下所示。

image-20260407005202229

image-20260407193524280

通信 URL 链接地址,如下所示。

image-20260407193638825

IOC:

image-20260427154911983

如有侵权请及时联系,本文会添加文章访问密码,不再直接公开。

updatedupdated2026-04-272026-04-27