首页
社区
课程
招聘
[原创][原创]银狐木马深度剖析:手工拆解三层自解密壳与 48KB 最终载荷
发表于: 2026-10-1 01:09 6679

[原创][原创]银狐木马深度剖析:手工拆解三层自解密壳与 48KB 最终载荷

2026-10-1 01:09
6679

样本取自755K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1j5i4A6S2j5i4u0Q4x3X3g2S2j5Y4g2K6k6g2)9J5k6h3y4Z5i4K6u0r3j5Y4u0G2N6%4y4W2i4K6u0r3N6r3q4Y4i4K6u0r3f1$3W2D9N6X3g2J5c8X3!0^5i4K6u0r3
样本:524b0b9f10daa60f347cf8f906fd79fa43855df1d5fef2b9a58a90d543c5fdf4.exe(38 MB,x64,来自 abuse.ch/bazaar 的 SilverFox 标签页) 环境:VMware Win11 虚拟机 + IDA(静态)+ x64dbg(动态),宿主机 Python 3.14

用DIE打开看一下这个exe文件
image.png

查看签名,发现是空的
image.png

查看版本
image.png

我们用PE-bear打开看一下有哪些导入表
image.png
image.png

静态加载的dll没啥,有可能是动态加载的dll.我们去ida里搜索一下%s.dll
image.png
发现是crypto\dso\dso_win32.c,是 OpenSSL 源码路径。Windows 上 OpenSSL 用 DSO(动态库)加载引擎时,就是 "%s.dll" 这种拼法。6MB 的业务/打印相关程序里链一份 OpenSSL 很常见.

我们直接静态分析一下

ida打开exe文件
start函数

我们看第一个函数

这个函数是栈保护函数,常数 47936899621426 = 0x2B992DDFA232,这是 MSVC 默认 栈保护cookie

我们看第二个函数sub_401161
image.png

看下函数401196函数的汇编

分析汇编

call sub_401190

单纯恶心,rdtscp 循环,等到 CPU 时间戳差 ≥ 0xEE6B2800 + 单步调试的循环了16 * 82354371,继续往下看汇编

rax = 0 -> loc_401190 ,rax != 0 -> loc_401440,这里我们ida动调一下看看rax的值到底是多少,发现rax = 2 -> ZF = 0 -> jz不成立,所以只能跳转loc_401440
image.png

先看loc_401190

enter 0FFFFFFFFFFFF8348h帧大小被写成一个大到离谱的数,所以这个分支会直接退出

再看loc_401440

loc_401440->loc_4023D5->loc_402A4E->loc_4023D5->sub_4032EB->sub_4039A9,会循环1963664186次才跳出循环执行后面的函数sub_4032EB->sub_4039A9

sub_4032EB函数

0x7FFE0000这是 Windows 映射给每个进程的只读页,里面有中断时间、Tick、倍率等。常见偏移:

sub_4039A9

VirtualAlloc(lpAddress: nullptr, dwSize: 0xDE7Au, flAllocationType: 0x1000u, flProtect: 0x40u) 作用是向系统要一块虚拟内存,
lpAddress — 想要的起始地址
dwSize — 要多少字节
flAllocationType — 怎么分配

flProtect — 页权限

unk_42D10D这个数据会复制到VirtualAlloc开辟的区间,然后就跳转到r11寄存器了,于是动调一下r11寄存器看看是怎么个事,打开x64dbg,在0x403A39打断点,看看寄存器的值
image.png
此时寄存器RSI = 0x0299DE7A,RDI = 0x0043AF87,R12 = R11 = 0x02990000,RAX = 0x00403AE4
说明sub_4039A9这个函数执行完之后就跳转到了0x02990000这个地址,然后我们直接ctrl + G跳转到这个内存看看
image.png
直接在x64dbg中dump出来

用ida打开这个bin文件
image.png
然后x64dbg单步F8
image.png
发现RIP刚好指到了0x2990000的位置,并且第一条就是call 299DE2D,偏移和ida里显示的一样,感觉像是加载器在运行期动态构造解密桩

看一下299DE2D

动调进入299DE2D函数,这时候那四个字节应该解密完成,我们dump出来看一眼
image.png

savedata C:\Users\sfoxlab1\Desktop\patch_applied.bin, 0x2990000, 0xDE7A, 用ida打开看一眼是不是解密出一部分代码了

image.png

x64dbg

ida

用滚动异或,把 0x2990024~0x299DE2C 解开。

那就在x64dbg里在0x2990024打硬件断点bphws 0x2990024,然后再dump出解密的部分savedata C:\Users\sfoxlab1\Desktop\payload_C2_v2.bin, 0x2990000, 0xDE7A
image.png

打开看一下

image.png
发现还是没有解密成功,x64dbg往下继续执行吧,看看有没有发现

下一步0000000002990028 | E9 60BF0000 | jmp 299BF8D,我们直接在ida里看一下BF8D

这一块应该就是解密的核心函数了


传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!

收藏
点赞 ・24
打赏
分享
打赏 + 11.00雪花
打赏次数 2 雪花 + 11.00
 
赞赏  mb_rmvnfvjb   +10.00 2026/10/01 感谢分享~
赞赏  mb_ifcfsukk   +1.00 2026/10/01 感谢分享~
最新回复 (3)
雪    币: 339
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2 楼
厉害啊
2026-10-5 23:52
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3 楼
强强强
2026-10-7 10:51
0
雪    币: 421
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4 楼
这类分析如果能补充目标版本、运行环境和关键日志,复现与讨论会更准确。
2026-10-13 11:55
0
游客
登录 | 注册 方可回帖
返回