吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1838|回复: 2
收起左侧

[会员申请] 申请会员ID:TheHydra【未报到,已注销】

[复制链接]
吾爱游客  发表于 2023-2-23 16:09

1、申 请 I D:TheHydra
2、个人邮箱:whisper4628@gmail.com
3、原创技术文章

勒索軟體 PlayCrypt 的靜態分析

一、簡介

PlayCrypt (又稱作 PLAY ),勒索軟體於 2022 年 8 月出現第一例受害事件,當時的受害者是阿根廷的司法機構,該機構的系統遭到 PLAY 的加密,造成逾 500 萬美金的損失。被 PLAY 感染的系統,所有檔案的副檔名都會加上 .play 後綴,該勒索軟體在設計上使用 BGH 策略,這個策略大致上的意思

A. 黑客針對大型企業或是政府機關所精心策畫的攻擊。
B. 這個攻擊會藉由惡意程式、漏洞利用等技術來突破目標的防禦系統。
C. 在受害者不知情的情況下,植入勒索軟體或竊取機密資訊。

而且 PLAY 勒索軟體較不一樣地方,它在勒索訊息當中,只寫了一句 PLAY,並附上聯絡電郵,因此要自己寫信過去獲得解密金鑰。

二、目錄

1. 威脅指標 (IOC)
MD5
SHA-256
2. 靜態分析 (IDA)
初始加密
檢測硬碟
檔案遍歷
加密檔案

三、威脅指標 (IOC)

1. MD5

<pre>
<code class="text">223eff1610b432a1f1aa06c60bd7b9a6</code>
</pre>

2. SHA-256

<pre>
<code class="text">006ae41910887f0811a3ba2868ef9576bbd265216554850112319af878f06e55</code>
</pre>

四、靜態分析 (IDA)

1. 初始加密

在初始加密階段,PLAY 會初始化並向 C2 確認該用何種加密模式。
以下的 pseudo-code 表示 PLAY 勒索軟體會藉由 BCryptOpenAlgorithmProvider 加載 CNG Provider ,然後產生一個隨機數以及 BCryptImportKeyPair,也就是製作一個加密金鑰,之後也會使用這組金鑰來加密檔案
<pre>
<code class="language-cpp">v6 = v52;
v7 = w_BCryptOpenAlgorithmProvider($BCRYPT_RND_PROVIDER, RNG_str); *RNG_str = 0i64; if ( v7 ) return 0xFFFFFFFE; decrypt_string(0x1Cu,$PLAY_RSAPUBLICBLOB, v32, v7, RSAPUBLIC_str);
v9 = w_BCryptImportKeyPair(RSAPUBLICBLOB_str, v8, RSAPUBLICBLOB_str);
memset(RSAPUBLICBLOB_str, 0, sizeof(RSAPUBLICBLOC_str));
if ( v9 )
return 0xFFFFFFF9;
FILE_STRUCT_LIST = w_VirtualAlloc(v10, 0x2400, v10);
FILE_STRUCT_LIST_2 = FILE_STRUCT_LIST_1;
*FILE_STRUCT_LIST_1 = FILE_STRUCT_LIST;
if (!FILE_STRUCT_LIST)
return 0xFFFFFFFD;
::FILE_STRUCT_LIST = FILE_STRUCT_LIST;</code>
</pre>

2. 檢測硬碟

在加密所有硬碟之前,PLAY 會先調用 FindFirstVolumeW 和 FindNextVolumeW函數找出所有volumes,如果 volume 不是 CD-ROM 或 RAM disk ,勒索軟體就會調用GetVolumePathNamesForVolumeNameW 並取得硬碟資訊
<pre>
<code class="language-cpp>find_volume_handle_1 = FindFirstVolumeW(volume_name, 0x104);
v5 = 0xEC2;
v6 = 4;
find_volume_handle = find_volume_handle_1;
if ( find_volume_handle_1 != INVALID_HANDLE_VALUE )
{
v24 = 0x74;
v23 = 0x68;
v21 = 0x56;
do
{
GetDriveTypeW = resolve_API_layer_2(::GetDriveTypeW);
drive_type = GetDriveType(volume_name);
if ( drive_type != DRIVE_CDROM && drive_type != DRIVE_RAMDISK )
{
GetVolumePathNameForVolumeNameW = resolve_API_layer_2(::GetVolumePathNameForVolumeNameW);
if ( !GetVolumePathNameForVolumeNameW(volume_name, &volume_path_name, 0x208, &volume_path_name_len) )
v23 = v22 + v19 + 1;
v19 = 0xB4;
}
v23 -= 0x56;
}
}
FindNextVolumeW = resolve_API_layer_2(::FindNextVolumeW);</code>
</pre>

3. 檔案遍歷

勒索軟體會調用 FindFirstFileW 和 FindNextFileW 找出所有目錄跟檔案。PLAY 會避免去加密 Windows 系統目錄以及下面列表中的檔案。
<pre>
<code>.exe .dll .lnk .sys, readme.txt, bootmgr, .msi, .PLAY, ReadMe.txt</code>
</pre>
<pre>
<code class="language-cpp>decrypt_string(0x164, &unk_42B944, v10, v11, v12);    // ReadMe.txt
v1 = wcscmp(file_name, v12);
if ( v1 )
v1 = v1 < 0 ? 0xFFFFFFFF : 1;
if ( v1 )
{
v2 = check_encrypted_extension(file_name);    // .play
if ( !v2 )
return 0;
v3 = &EXTENSION_TO_AVOID_LIST;    // .exe .dll .lnk ...
v4 = 0;

            while ( 1 )
            {
                if ( v3 )
                            {
                                v5 = *v3;
                                            v14 = *(v3 + 4);
                                            v6 = *(v3 + 0xA);
                                            v13 = v5;
                                            v15 = v6;
                            }
                            else
                            {
                                v14 = 0;
                                            v13 = 0i64;
                                            v15 = 0;
                                            *_errno() = 0x16;
                                            _invalid_parameter_noinfo();
                            }
            }
            decrypt_string(0x2C4, &v13, v10, v11, SubStr);

}</code>
</pre>
此外,PLAY 勒索軟體也會避免加密大檔案,如下
<pre>
<code>mdf, ndf, ldf, frm</code>
</pre>

3. 加密檔案

最後,PLAY 會使用 RSA 公鑰並調用 BCryptEncrypt 函數加密檔案。
<pre>
<code class="language-cpp>while ( 1 )
{
v29 = bcrypt_encrypt_file(
&crypt_IV,
bcrypt_sym_key_handle,
file_struct_1 → file_handle,
file_struct_1 → file_data_buffer,
0x100000,
0,
&chunk_count_flag,
&chunk_write_offset_from_end,
0,
0
);
v30 = v108 - 1;
v108 = v30;
LOBYTE(v103 = v30);
BYTE1(v86[0]) = v110;
if ( v29 <= 0 )
break;
v95[0xC] = v94 v111;
WORD1(v67) = v105[4];
v87[0] = v71 + v87[2];
++chunk_count_flag;
v10 = 2
v84;
v31 = CFADD(v104, 1) + v88;
v105[4] = 7;
++v104;
v88 = v31;
if ( PAIR64(v31, v104) >= *file_end )
goto ENCRYPT_LAST_CHUNK;
}</code>
</pre>

檔案加密完成後,PLAY勒索軟體才會將檔案加上 .play 副檔名。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2023-2-23 16:45
I D:TheHydra
邮箱:whisper4628@gmail.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。
Hmily 发表于 2023-3-9 16:35
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 03:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表