本帖最后由 图钉鱼 于 2025-9-4 02:40 编辑
终于不是银狐了。。。
0x140002c9d|[Anti-Analysis]|80%|入口点早期跳转,疑似加壳器行为
0x140000000|[Anti-Analysis]|90%|检测到IsDebuggerPresent API调用
0x1400040e8|[Execution-Injection]|90%|导入VirtualAlloc,用于动态内存分配,脱壳或载荷执行准备
0x1400040f0|[Execution-Injection]|85%|导入WriteFile,用于将脱壳后的载荷写入内存或文件
0x140004070|[Execution-Injection]|80%|导入GetProcAddress,用于动态解析API,常见于加壳和Shellcode
0x140004018|[Persistence]|85%|导入RegSetValueExW,用于设置注册表键值实现持久化
0x140004038|[Privilege-Escalation]|75%|导入AdjustTokenPrivileges,尝试进行权限提升
0x1400040c0|[Anti-Analysis]|95%|导入Sleep,用于时间延迟反分析
0x140004130|[Anti-Analysis]|95%|导入QueryPerformanceCounter,用于时间检测反分析
0x140003348|[Anti-Analysis]|95%|函数涉及_security_cookie的复杂计算,利用GetSystemTimeAsFileTime, GetCurrentThreadId, GetCurrentProcessId, QueryPerformanceCounter,反调试/反沙箱检测。
0x140002240|[Anti-Analysis]|90%|main函数通过GetConsoleWindow和ShowWindow(0)隐藏控制台窗口。
0x140002240|[Privilege-Escalation]|95%|main函数尝试启用SeDebugPrivilege, SeTakeOwnershipPrivilege, SeRestorePrivilege, SeBackupPrivilege, SeLoadDriverPrivilege, SeSecurityPrivilege, SeSystemEnvironmentPrivilege, SeTcbPrivilege, SeShutdownPrivilege等9项特权。
0x140002240|[Core-Logic]|95%|main函数调用sub_140001DE0(),此函数有危险操作!!!
0x140002240|[Anti-Analysis]|95%|main函数进入无限循环,持续调用VirtualAlloc分配大量内存(0x6400000uLL)并Sleep(0x64u),资源耗尽或反沙箱技术。
0x140001DE0|[Execution-Injection]|70%|sub_140001DE0函数通过间接调用qword_140007000处的地址,执行流转移到脱壳载荷。
1. 权限准备阶段(main函数主导)核心函数:
行为:隐藏控制台窗口(GetConsoleWindow+ShowWindow(0));
激进提升权限(启用SeDebugPrivilege等9项高危特权);
调用sub_140001DE0(核心破坏载荷)
1. 隐藏自身:
- 调用GetConsoleWindow()获取控制台窗口句柄;
- 调用ShowWindow(ConsoleWindow, 0)隐藏窗口(参数0表示SW_HIDE)。
2. 激进权限提升:
- 调用GetCurrentProcess()获取当前进程句柄;
- 调用OpenProcessToken(CurrentProcess, 0x28u, &TokenHandle)(0x28=TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY)打开进程令牌;
- 定义9项高危特权列表(SeDebugPrivilege、SeTakeOwnershipPrivilege等);
- 循环调用LookupPrivilegeValueW(0, lpName[v5], &NewState.Privileges[0].Luid)获取特权LUID;
- 调用AdjustTokenPrivileges(TokenHandle, 0, &NewState, 0, 0, 0)启用特权(NewState.Privileges[0].Attributes=2=SE_PRIVILEGE_ENABLED)。
3. 调用核心破坏载荷:
- 直接调用sub_140001DE0(),启动后续破坏流程
2. 磁盘与MBR破坏阶段(sub_140001260+sub_140001DE0)
行为:
sub_140001DE0直接写入MBR(\\\\.\\PhysicalDrive0)覆盖512字节垃圾数据;
sub_140001260循环验证对PhysicalDrive0-7的读写权限,通过重复IO干扰磁盘稳定性。
1. sub_140001DE0:直接覆盖MBR
- 调用CreateFileW(L"\\\\.\\PhysicalDrive0", 0x10000000u, 3u, 0, 3u, 0, 0)(0x10000000=GENERIC_READ|GENERIC_WRITE,3=FILE_SHARE_READ|FILE_SHARE_WRITE)打开物理磁盘0;
- 定义Buffer数组("114514"),调用WriteFile(FileW, Buffer, 0x200u, &NumberOfBytesWritten, 0)写入512字节(MBR大小),覆盖MBR;
- 调用FlushFileBuffers(FileW)强制刷盘,确保修改生效。
2. sub_140001260:验证磁盘权限与干扰
- 循环访问\\\\.\\PhysicalDrive0到\\\\.\\PhysicalDrive7(覆盖所有可能的物理磁盘);
- 调用CreateFileW打开磁盘,调用ReadFile读取512字节(MBR),再调用WriteFile写回原数据(虽未修改,但频繁IO会干扰磁盘稳定性);
- 目的:确认对所有物理磁盘的读写权限,为后续扩大破坏范围做准备。
3. 系统文件与驱动破坏阶段(sub_140001420+sub_140001DE0)
行为:
sub_140001DE0遍历15个核心系统文件(ntoskrnl.exe、hal.dll等),删除/覆盖垃圾数据;
1. sub_140001DE0:破坏核心系统文件
- 定义15个关键文件路径:C:\\Windows\\System32\\ntoskrnl.exe(内核)、C:\\Windows\\System32\\hal.dll(硬件抽象层)、C:\\Windows\\System32\\winlogon.exe(登录进程)等;
- 循环调用DeleteFileW(v5)删除文件;若删除失败(GetLastError()=32=文件被占用):
- 调用CreateFileW(v5, 0x40000000u, 1u, 0, 3u, 0x80u, 0)(0x40000000=GENERIC_WRITE)打开文件;
- 循环调用WriteFile(v7, "114514", 6u, &NumberOfBytesWritten, 0)写入垃圾数据;
- 再次调用DeleteFileW(v5)删除文件。
2. sub_140001420:扩大破坏范围
- 遍历系统关键路径:C:\\Windows\\System32\\drivers\\*.sys(驱动文件)、C:\\Windows\\DriverStore\\FileRepository\\*.*(驱动安装包)、C:\\Windows\\System32\\*.dll(系统DLL);
- 对每个文件执行删除+覆盖操作;遍历System32\\drivers、DriverStore等路径,删除驱动/配置文件,失败则写入"114514"后再次删除。
- 目的:破坏驱动和系统库文件,导致硬件无法识别、系统功能失效。
- ModuleHandleW = GetModuleHandleW(L"ntdll.dll");
- NtRaiseHardError = GetProcAddress(ModuleHandleW, "NtRaiseHardError");
- ((void (__fastcall *)(...))NtRaiseHardError)(3221226528LL, ...); // 0xC0000420
复制代码 代码从ntdll.dll中动态获取NtRaiseHardError函数的地址,并用0xC0000420(STATUS_ASSERTION_FAILURE)状态码调用它。这是一个主动触发蓝屏死机的技术,目的是立即让系统崩溃,使用户来不及做出任何反应。
4. 注册表与配置破坏阶段(sub_140001770+sub_140001DE0)
行为:
sub_140001770枚举Software、System等注册表键,修改现有值为垃圾数据"Block",并创建新键写入垃圾数据;
破坏系统启动项、驱动加载规则等关键配置,导致系统无法正常启动。
5. 资源耗尽与干扰阶段(sub_140001A90+sub_140001D00)
行为:sub_140001D00:无限循环分配100MB内存块,填充0x11,耗尽系统内存;
sub_140001A90:在用户屏幕循环绘制"114514",干扰视觉操作;
配合main函数的VirtualAlloc无限循环,彻底卡死系统。
1. sub_140001D00:内存耗尽攻击
- 调用beginthreadex创建线程,入口为sub_140001D00;
- 无限循环:
- 调用VirtualAlloc(0, 0x6400000u, 0x1000u, 4u)(0x6400000=100MB,0x1000=MEM_COMMIT,4=PAGE_READWRITE)分配内存;
- 调用memset填充内存为0x11(垃圾数据);
- 若内存不足(VirtualAlloc返回NULL),调用VirtualFree释放最早分配的块,继续循环。
- 目的:耗尽系统内存,导致系统卡顿、崩溃。
2. sub_140001A90:屏幕干扰
- 调用beginthreadex创建线程,入口为sub_140001A90;
- 调用GetDC(NULL)获取屏幕设备上下文(DC);
- 调用GetSystemMetrics(SM_CXSCREEN)/GetSystemMetrics(SM_CYSCREEN)获取屏幕分辨率;
- 无限循环:
- 调用TextOutW(DC, x, y, L"114514", 6)在屏幕随机位置绘制垃圾数据;
- 调用Sleep(100)延迟,避免CPU过载。
- 目的:干扰用户操作,使用户无法通过屏幕进行任何有效操作。
6. 辅助工具函数(sub_1400023A0-sub_140002560)
核心函数:sub_1400023A0(字符串格式化)、sub_140002400(长字符串处理)、sub_140002460(通用字符串处理)、sub_1400024C0(内存释放)、sub_140002560(内存扩容)
行为:支持核心破坏函数的字符串构造(如磁盘路径、注册表键名)和内存管理(如动态扩容数组存储文件路径)。
【IOCs】- 文件路径:C:\\Windows\\System32\\drivers\\*.sys、C:\\Windows\\DriverStore\\FileRepository\\*.*;
- 注册表键:HKEY_LOCAL_MACHINE\\Software、HKEY_LOCAL_MACHINE\\System;
- 垃圾数据:"114514"(用于覆盖文件/MBR)、"Block"(用于篡改注册表);
- API调用:CreateFileW(访问物理磁盘)、RegSetValueExW(篡改注册表)、VirtualAlloc(内存耗尽);
- 函数地址:0x140001260(磁盘IO)、0x140001420(文件破坏)、0x140001770(注册表破坏)。
该样本是高度针对性的Wiper,通过多层函数协同实现不可逆破坏: 底层破坏(MBR+磁盘)使系统无法启动; 系统破坏(文件+注册表)使系统无法运行; 资源耗尽与干扰使用户无法自救。
|