发布于2022年11月8日3年前 21766239b79ece18b15a03f4517f3be6ed9c07ed 样本行为: 1、修改MBR 2、自关机 3、关机自启后锁机 样本分析: 载入IDA 主函数 如下: void start { sub_402058(); a2(&VirtualProtect, 172); sub_402002(&VirtualProtect, 172, 255); (loc_405010); sub_402002(&VirtualProtect, 172, 255); a1(&VirtualProtect, 172); off_40100C = &unk_4051BA; //数据 dword_401010 = 512; a2(&loc_4050BC, 254); sub_402002(&loc_4050BC, 254, 255); (loc_4050BC); sub_402002(&loc_4050BC, 254, 255); a1(&loc_4050BC, 254); ExitProcess(a3); } sub_402058(): { sub_402002(&nullsub_1, 16, 255); v1 = VirtualProtect; v2 =VirtualProtect; VirtualProtect(&nullsub_1, 16); (nullsub_1); if ( v3 ) { v2(&nullsub_1, 16); sub_402002(&nullsub_1, 16, 255); } else {start(v2, v1, a1);} } sub_402002(): //对数据进行操作 { char *v3; // esi char *v4; // edi char v6; // al v3 = a1; v4 = a1; do { v6 = *v3++; *v4++ = a3 ^ v6; --a2; } while ( a2 ); } loc_4050BC: { Lahf //将标志位加载到 AH xchg eax, ebp //交换eax和ebp的内容 call dword ptr [ebp-6A036A01h] call dword ptr [ebp-6803h] } 载入OD: 首先进入函数0x4020B5 然后进0x402002函数 该函数 装载0x405000处的数据 做异或 0x40307D call esi 此处调用VirtualProtect、VirtualProtectEx VirtualProtect将进程句柄、内存地址、内存大小等参数传递给VirtualProtectEx函数来设置内存的属性 调用ZwProtectVirtualMemory修改内存属性 0x402083-进入到0x405000地址位置 此处存储的是0x402002函数处理的数据 后续调用IsDebuggerPresent函数 用来检测调试器 0x4020DD 此地址处的函数 后续调用VirtualAlloc分配了两次空间 0x40504D GetModuleFileName获取当前进程文件的路径 0x40505A SHGetSpecialFolderPath获取系统路径(开始菜单) 0x405064-进入该地址可见调用了lstrcatW、CopyFileW函数 此处的主要目的是 设置开机自启 0x4050A6 此处释放一次VirtualFree 0x4050B4 此处释放再一次VirtualFree 0x40213C 进入该地址 0x4050CD-0x4050F8该地址处调用了CreateFile函数 打开\.\PhysicalDrive0 0x40512F 调用WriteFile函数 修改MBR数据 KiFastSystemCall 0x4050157-0x40518B-0x4051A1 0x4051B2 调用ShellExecute函数 启动CMD 执行命令shutdown -r -t 1 -f 以关机
创建帐户或登录后发表意见