首页
社区
课程
招聘
[原创]震惊!某男子居然对LockBit2.0做了这种事
2021-9-28 17:16 28365

[原创]震惊!某男子居然对LockBit2.0做了这种事

2021-9-28 17:16
28365

前言:

从2013-09-13注册至今,在默默的阅览大佬们的文章学习提升自我,由于工作繁忙至今没有在论坛中发过文章,对于白嫖了那么多年的我有点惭愧,也是由于各种事情吧,这个样本分析到中期的时候无法慢慢的去品尝了,开启了走马观花模式,此次也是记录了走马观花的过程,由于时间关系也没有仔细对算法和他更多的操作性进行分析,可能会有一些写的有问题的地方也希望各位大佬多多担待。
上传图可能有点小,可以通过附件查看原版

概况:

运行环境:win10
URL:hxxp://lockbitapt6vx57t3eeqjofwgcglmutr3a35nygvokja5uuccip4ykyd.onion;
hxxps://tox.chat/download.html;
加密算法:ECC+AES

样本分析:

通过查看导出表可以得知,该程序主要利用了自解密的方式来获取自身所需要的API函数。
图片描述

反调试:

样本加载完毕后,可以代码入口点处首先获取了PEB,并且在偏移0x68处进行了0x70的比较。
图片描述
通过PEB结构体可以看出,在0x68处对应的是NtGlobalFlag,当调试状态时NtGlobalFlag的值会被赋值为0x70,所以依次确定程序首先对调试环境进行了判断。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
typedef struct _PEB {
/*000*/ UCHAR InheritedAddressSpace;
/*001*/ UCHAR ReadImageFileExecOptions;
/*002*/ UCHAR BeingDebugged;                // 无调试器时 = 0,有调试器时 = 1
/*003*/ UCHAR SpareBool;
/*004*/ HANDLE Mutant;
/*008*/ HINSTANCE ImageBaseAddress;
/*00C*/ VOID *LDR; 
/*010*/ PPROCESS_PARAMETERS *ProcessParameters;
/*014*/ ULONG SubSystemData;
/*018*/ HANDLE DefaultHeap;
/*01C*/ KSPIN_LOCK FastPebLock;
/*020*/ ULONG FastPebLockRoutine;
/*024*/ ULONG FastPebUnlockRoutine;
/*028*/ ULONG EnvironmentUpdateCount;
/*02C*/ ULONG KernelCallbackTable;
/*030*/ LARGE_INTEGER SystemReserved;
/*038*/ ULONG FreeList;
/*03C*/ ULONG TlsExpansionCounter;
/*040*/ ULONG TlsBitmap;
/*044*/ LARGE_INTEGER TlsBitmapBits;
/*04C*/ ULONG ReadOnlySharedMemoryBase;
/*050*/ ULONG ReadOnlySharedMemoryHeap;
/*054*/ ULONG ReadOnlyStaticServerData;
/*058*/ ULONG AnsiCodePageData;
/*05C*/ ULONG OemCodePageData;
/*060*/ ULONG UnicodeCaseTableData;
/*064*/ ULONG NumberOfProcessors;
/*068*/ LARGE_INTEGER NtGlobalFlag;         // 有调试器时会被赋值为 70h
/*070*/ LARGE_INTEGER CriticalSectionTimeout;
/*078*/ ULONG HeapSegmentReserve;
/*07C*/ ULONG HeapSegmentCommit;
/*080*/ ULONG HeapDeCommitTotalFreeThreshold;
/*084*/ ULONG HeapDeCommitFreeBlockThreshold;
/*088*/ ULONG NumberOfHeaps;
/*08C*/ ULONG MaximumNumberOfHeaps;
/*090*/ ULONG ProcessHeaps;
/*094*/ ULONG GdiSharedHandleTable;
/*098*/ ULONG ProcessStarterHelper;
/*09C*/ ULONG GdiDCAttributeList;
/*0A0*/ KSPIN_LOCK LoaderLock;
/*0A4*/ ULONG OSMajorVersion;
/*0A8*/ ULONG OSMinorVersion;
/*0AC*/ USHORT OSBuildNumber;
/*0AE*/ USHORT OSCSDVersion;
/*0B0*/ ULONG OSPlatformId;
/*0B4*/ ULONG ImageSubsystem;
/*0B8*/ ULONG ImageSubsystemMajorVersion;
/*0BC*/ ULONG ImageSubsystemMinorVersion;
/*0C0*/ ULONG ImageProcessAffinityMask;
/*0C4*/ ULONG GdiHandleBuffer[0x22];
/*14C*/ ULONG PostProcessInitRoutine;
/*150*/ ULONG TlsExpansionBitmap;
/*154*/ UCHAR TlsExpansionBitmapBits[0x80];
/*1D4*/ ULONG SessionId;
} PEB, *PPEB;

PEB寻址

检测环境不存在调试环境时,接着会将32赋值到v198中,并将字符串GDIPLUS赋值给到了v199,利用循环将大写的GDIPLUS转换成小写并且拼接.dll后缀。
图片描述
通过动态调试,得到gdiplus.dll
图片描述
判断0x4F081C是否为空,如果为空则进行计算,并将返回值赋值给到0x4F081C内存中。
图片描述
  在NT内核系统中fs寄存器指向TEB结构,TEB+0x30也就是mov eax, large fs:30h处指向PEB结构,PEB+0x0c处指向PEB_LDR_DATA结构,PEB_LDR_DATA+0x1c处存放一些指向动态链接库信息的链表地址,DLL第一个指向ntdl.dll,第三个就是kernel32.dll的。

 

图片描述
FS段寄存器作为选择子指向当前的活动线程的TEB结构(Thread Environment Block)注释。在TEB偏移的0x30处,就是指向PEB(Process Environment Block)的指针。而在PEB偏移的0x0c处是指向PEB_LDR_DATA结构的指针。PEB_LDR_DATA的结构如下:

1
2
3
4
5
6
7
8
9
typedef struct _PEB_LDR_DATA
{
 ULONG Length; // +0x00
 BOOLEAN Initialized; // +0x04
 PVOID SsHandle; // +0x08
 LIST_ENTRY InLoadOrderModuleList; // +0x0c
 LIST_ENTRY InMemoryOrderModuleList; // +0x14
 LIST_ENTRY InInitializationOrderModuleList;// +0x1c
} PEB_LDR_DATA,*PPEB_LDR_DATA; // +0x24

在PEB_LDR_DATA结构中,又包含三个LIST_ENTRY结构体分别命名为:

1
2
3
InLoadOrderModuleList;           模块加载顺序
InMemoryOrderModuleList;        模块在内存中的顺序
InInitializationOrderModuleList;     模块初始化装载顺序

LIST_ENTRY其结构定义如下:

1
2
3
4
typedef struct _LIST_ENTRY {
   struct _LIST_ENTRY *Flink;
   struct _LIST_ENTRY *Blink;
} LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;

这个双链表指向进程装载的模块,结构中的每个指针,指向了一个LDR_DATA_TABLE_ENTRY 的结构:
我们来看看这个结构的定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
typedef struct _LDR_DATA_TABLE_ENTRY
{
     LIST_ENTRY InLoadOrderLinks;
     LIST_ENTRY InMemoryOrderLinks;
     LIST_ENTRY InInitializationOrderLinks;
     PVOID DllBase;
     PVOID EntryPoint;
     ULONG SizeOfImage;
     UNICODE_STRING FullDllName;
     UNICODE_STRING BaseDllName;
     ULONG Flags;
     WORD LoadCount;
     WORD TlsIndex;
     union
     {
          LIST_ENTRY HashLinks;
          struct
          {
               PVOID SectionPointer;
               ULONG CheckSum;
          };
     };
     union
     {
          ULONG TimeDateStamp;
          PVOID LoadedImports;
     };
     _ACTIVATION_CONTEXT * EntryPointActivationContext;
     PVOID PatchInformation;
     LIST_ENTRY ForwarderLinks;
     LIST_ENTRY ServiceTagLinks;
     LIST_ENTRY StaticLinks;
} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;

为了不被勒索所污染我们的调试环境,我们使用calc进行演示。
此时我们可以看到InLoadOrderModuleList.Flink指针指向的地址是000001c83e382bb0

 

图片描述
可以看出000001c83e382bb0所在的模块地址是64790000,也就是calc.exe的内存装载地址,它的flink指针指向了000001c83e3829e0,1a600000它就是ntdll.dll的内存装载地址,000001c83e3829e0的flink指向了000001c83e383100,18a60000它就是Kerenl32.dll的内存装载地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
0:000> dd 000001c83e382bb0
000001c8`3e382bb0  3e3829e0 000001c8 1a7653d0 00007ffb
000001c8`3e382bc0  3e3829f0 000001c8 1a7653e0 00007ffb
000001c8`3e382bd0  00000000 00000000 00000000 00000000
000001c8`3e382be0  64790000 00007ff6 64791820 00007ff6
000001c8`3e382bf0  0000b000 00000000 003a0038 00000000
000001c8`3e382c00  3e382768 000001c8 00120010 00000000
000001c8`3e382c10  3e382790 000001c8 0000a2cc 0000ffff
000001c8`3e382c20  1a7651d0 00007ffb 1a7651d0 00007ffb
0:000> dd 000001c83e3829e0
000001c8`3e3829e0  3e383100 000001c8 3e382bb0 000001c8
000001c8`3e3829f0  3e383110 000001c8 3e382bc0 000001c8
000001c8`3e382a00  3e3837e0 000001c8 1a7653f0 00007ffb
000001c8`3e382a10  1a600000 00007ffb 00000000 00000000
000001c8`3e382a20  001f0000 00000000 003c003a 00000000
000001c8`3e382a30  3e382870 000001c8 00140012 00000000
000001c8`3e382a40  1a72c428 00007ffb 0000a2c4 0000ffff
000001c8`3e382a50  1a765180 00007ffb 1a765180 00007ffb
0:000> dd 000001c83e383100
000001c8`3e383100  3e3837c0 000001c8 3e3829e0 000001c8
000001c8`3e383110  3e3837d0 000001c8 3e3829f0 000001c8
000001c8`3e383120  1a7653f0 00007ffb 3e3837e0 000001c8
000001c8`3e383130  18a60000 00007ffb 18a77c70 00007ffb
000001c8`3e383140  000b2000 00000000 00420040 00000000
000001c8`3e383150  3e3832d0 000001c8 001a0018 00000000
000001c8`3e383160  3e3832f8 000001c8 000ca2cc 0000ffff
000001c8`3e383170  1a765160 00007ffb 1a765160 00007ffb

知道PEB寻址之后,我们回过头来看勒索程序它所要找到的dll地址是什么。
此时,Flink地址:0x772FE0,
图片描述
[edi+0x30]指向的是ntdll.dll的内存装载位置,并将硬编码0x811C9DC5存入第一个变量当中。
图片描述
通过特征判断,这段程序主要是利用了特征比方式来判断所需要用到的dll的地址。
图片描述
通过返回结果可以看到,所匹配到的dll为Kernel32.dll,依次,我们可以将函数名称进行改名为KenDllAddr。
图片描述
改名后。
图片描述
获取到dll的装载地址后,将地址当作参数传入了4122E0中,经过之前我们的分析可以大概推断出,这个函数主要的功能是通过获取到的dll来寻找程序后续所需要用到的API函数地址,我们来验证一下猜想。
图片描述
我们F5结合反汇编来看*this指针所指向的位置是Kernel32.dll的装载地址,也就是Kernel32的MZ位置。
图片描述
通过结构体中我们可以看到0x3C指向的是e_lfanew,它的值指向了PE文件的文件头。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef struct _IMAGE_DOS_HEADER {
+00 h WORD e_magic // DOS可执行文件标记 MZ(4Dh 5Ah)
+02 h WORD e_cblp ; Bytes on last page of file
+04 h WORD e_cp ; Pages in file
+06 h WORD e_crlc ; Relocations
+08 h WORD e_cparhdr ; Size of header in paragraphs
+0A h WORD e_minalloc ; Minimun extra paragraphs needs
+0C h WORD e_maxalloc ; Maximun extra paragraphs needs
+0E h WORD e_ss // DOS代码的初始化堆栈SS
+10 h WORD e_sp // DOS代码的初始化堆栈指针SP
+12 h WORD e_csum ; Checksum
+14 h WORD e_ip // DOS代码的初始化指令入口[指针IP]
+16 h WORD e_cs // DOS代码的初始堆栈入口
+18 h WORD e_lfarlc ; File Address of relocation table
+1A h WORD e_ovno ; Overlay number
+1C h WORD e_res[4] ; Reserved words
+24 h WORD e_oemid ; OEM identifier(for e_oeminfo)
+26 h WORD e_oeminfo ; OEM information;e_oemid specific
+29 h WORD e_res2[10] ; Reserved words
+3C h LONG e_lfanew // 指向PE文件头
} IMAGE_DOS_HEADER ENDS

mov edx, [eax+ebx+78h]相当于:772C0000+E8+78h,通过结构体我们可以看到,该地址指向的是DataDirectory,也就是数据结构表,将获取到的偏移地址保存在了edx中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
typedef struct _IMAGE_OPTIONAL_HEADER
{
+18 h WORD Magic; // 标志字, ROM 映像(0107h),普通可执行文件(010Bh
+1A h BYTE MajorLinkerVersion; // 链接程序的主版本号
+1B h BYTE MinorLinkerVersion; // 链接程序的次版本号
+1C h DWORD SizeOfCode; // 所有含代码的节的总大小
+20 h DWORD SizeOfInitializedData; // 所有含已初始化数据的节的总大小
+24 h DWORD SizeOfUninitializedData; // 所有含未初始化数据的节的大小
+28 h DWORD AddressOfEntryPoint; // 程序执行入口RVA
+2C h DWORD BaseOfCode; // 代码的区块的起始RVA
+30 h DWORD BaseOfData; // 数据的区块的起始RVA
+34 h DWORD ImageBase; // 程序的首选装载地址
+38 h DWORD SectionAlignment; // 内存中的区块的对齐大小
+3C h DWORD FileAlignment; // 文件中的区块的对齐大小
+40 h WORD MajorOperatingSystemVersion; // 要求操作系统最低版本号的主版本号
+42 h WORD MinorOperatingSystemVersion; // 要求操作系统最低版本号的副版本号
+44 h WORD MajorImageVersion; // 可运行于操作系统的主版本号
+46 h WORD MinorImageVersion; // 可运行于操作系统的次版本号
+48 h WORD MajorSubsystemVersion; // 要求最低子系统版本的主版本号
+4A h WORD MinorSubsystemVersion; // 要求最低子系统版本的次版本号
+4C h DWORD Win32VersionValue; // 莫须有字段,不被病毒利用的话一般为0
+50 h DWORD SizeOfImage; // 映像装入内存后的总尺寸
+54 h DWORD SizeOfHeaders; // 所有头 + 区块表的尺寸大小
+58 h DWORD CheckSum; // 映像的校检和
+5C h WORD Subsystem; // 可执行文件期望的子系统
+5E h WORD DllCharacteristics; // DllMain()函数何时被调用,默认为 0
+60 h DWORD SizeOfStackReserve; // 初始化时的栈大小
+64 h DWORD SizeOfStackCommit; // 初始化时实际提交的栈大小
+68 h DWORD SizeOfHeapReserve; // 初始化时保留的堆大小
+6C h DWORD SizeOfHeapCommit; // 初始化时实际提交的堆大小
+70 h DWORD LoaderFlags; // 与调试有关,默认为 0
+74 h DWORD NumberOfRvaAndSizes; // 下边数据目录的项数,Windows NT 发布是16
+78 h IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; // 数据目录表} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;

紧接着执行mov eax, [eax+ebx+7Ch],当前eax保存的依然是PE头部偏移E8,ebx= 772C0000,那么相当于是772C0000+E8+7C,通过查看数据结构表我们可以得知,主要是获取第一块数据的大小。

 

图片描述
lea eax, [edx+ebx]获取第一块数据块的地址。
图片描述
将eax+0x20中的地址给到了edi,在取edi的值赋值给到了eax,该地址指向了对应Kernel32的导出表函数名称。
图片描述
通过硬编码的方式匹配到所需要函数的序号id,并通过序号id寻找该函数的地址。
图片描述
函数做找到的地址赋值给到了0x4F079C
图片描述
图片描述
对字符串进行不同方式进行解密,并且进行判断LoadLibrary函数是否获取成功,如果之前操作成功获取LoadLibrary函数则使用LoadLibrary函数进行地址获取,如果不成功,则继续利用PEB寻址方式进行API函数地址获取。
图片描述
对所有需要用到的dll进行地址获取,并获取所需要用到的API函数地址。
图片描述
终于结束了这该死的函数获取·····

初始化:

确认受害者国家:

将kernel32的内存加载地址传入ebx,并判断是否有获取成功,如果没有则利用PEB寻找到dll地址,如果找到则跳转。
图片描述
利用硬编码进行比对,找到所需要执行的函数。
图片描述
通过序号id找到该函数的地址。
图片描述
匹配是否命中已过滤的目标,如果命中则退出不进行勒索。
图片描述

绕过系统保护:

利用Teb. UniqueProcess的方法绕过系统文件保护。
图片描述
图片描述

检查访问控制:

修改ACL权限。
参考:https://new.qq.com/rain/a/20200330A0MJK800
图片描述

数据解密:

对所需要的信息以及图片进行解密。
图片描述
解密算法:
图片描述
解密出信息和分辨率相关。
图片描述
解密出信息感觉可能是参数信息。
图片描述
解密出图片相关信息。
图片描述
图片描述
解密另外一张图,这应该是一个小图。
图片描述
打开之后是这样的一个像嘴唇一样的勒索图标。
图片描述
解密出进程、服务列表:
图片描述
通过列出的信息可以猜测出,主要是为了结束相关的进程,避免在加密过程中进程运行,导致某些重要数据无法加密。

1
wxServer,wxServerView,sqlmangr,RAgui,supervise,Culture,Defwatch,winword,QBW32,QBDBMgr,qbupdate,axlbridge,httpd,fdlauncher,MsDtSrvr,java,360se,360doctor,wdswfsafe,fdhost,GDscan,ZhuDongFangYu,QBDBMgrN,mysqld,AutodeskDesktopApp,acwebbrowser,Creative Cloud,Adobe Desktop Service,CoreSync,Adobe CEF,Helper,node,AdobeIPCBroker,sync-taskbar,sync-worker,InputPersonalization,AdobeCollabSync,BrCtrlCntr,BrCcUxSys,SimplyConnectionManager,Simply.SystemTrayIcon,fbguard,fbserver,ONENOTEM,wsa_service,koaly-exp-engine-service,TeamViewer_Service,TeamViewer,tv_w32,tv_x64,TitanV,Ssms,notepad,RdrCEF,sam,oracle,ocssd,dbsnmp,synctime,agntsvc,isqlplussvc,xfssvccon,mydesktopservice,ocautoupds,encsvc,tbirdconfig,mydesktopqos,ocomm,dbeng50,sqbcoreservice,excel,infopath,msaccess,mspub,onenote,outlook,powerpnt,steam,thebat,thunderbird,visio,wordpad,bedbh,vxmon,benetns,bengien,pvlsvr,beserver,raw_agent_svc,vsnapvss,CagService,DellSystemDetect,EnterpriseClient,ProcessHacker,Procexp64,Procexp,GlassWire,GWCtlSrv,WireShark,dumpcap,j0gnjko1,Autoruns,Autoruns64,Autoruns64a,Autorunsc,Autorunsc64,Autorunsc64a,Sysmon,Sysmon64,procexp64a,procmon,procmon64,procmon64a,ADExplorer,ADExplorer64,ADExplorer64a,tcpview,tcpview64,tcpview64a,avz,tdsskiller,RaccineElevatedCfg,RaccineSettings,Raccine_x86,Raccine,Sqlservr,RTVscan,sqlbrowser,tomcat6,QBIDPService,notepad++,SystemExplorer,SystemExplorerService,SystemExplorerService64,Totalcmd,Totalcmd64,VeeamDeploymentSvc

解密出需要检测的服务:
图片描述

1
wrapper,DefWatch,ccEvtMgr,ccSetMgr,SavRoam,Sqlservr,sqlagent,sqladhlp,Culserver,RTVscan,sqlbrowser,SQLADHLP,QBIDPService,Intuit.QuickBooks.FCS,QBCFMonitorService, msmdsrv,tomcat6,zhudongfangyu,vmware-usbarbitator64,vmware-converter,dbsrv12,dbeng8,MSSQL$MICROSOFT##WID,MSSQL$VEEAMSQL2012,SQLAgent$VEEAMSQL2012,SQLBrowser,SQLWriter,FishbowlMySQL,MSSQL$MICROSOFT##WID,MySQL57,MSSQL$KAV_CS_ADMIN_KIT,MSSQLServerADHelper100,SQLAgent$KAV_CS_ADMIN_KIT,msftesql-Exchange,MSSQL$MICROSOFT##SSEE,MSSQL$SBSMONITORING,MSSQL$SHAREPOINT,MSSQLFDLauncher$SBSMONITORING,MSSQLFDLauncher$SHAREPOINT,SQLAgent$SBSMONITORING,SQLAgent$SHAREPOINT,QBFCService,QBVSS,YooBackup,YooIT,vss,sql,svc$,MSSQL,MSSQL$,memtas,mepocs,sophos,veeam,backup,bedbg,PDVFSService,BackupExecVSSProvider,BackupExecAgentAccelerator,BackupExecAgentBrowser,BackupExecDiveciMediaService,BackupExecJobEngine,BackupExecManagementService,BackupExecRPCService,MVArmor,MVarmor64,stc_raw_agent,VSNAPVSS,VeeamTransportSvc,VeeamDeploymentService,VeeamNFSSvc,AcronisAgent,ARSM,AcrSch2Svc,CASAD2DWebSvc,CAARCUpdateSvc,WSBExchange,MSExchange,MSExchange$

并将解密出来的信息进行copy,最后free掉当前解密的堆空间。
图片描述
将进程名称后增加.exe后缀,并将保存增加后的字符串分别保存在内存中,并将地址保存在00C90000中。
图片描述
图片描述
图片描述
服务也是依次方法操作
图片描述
图片描述

权限判断:

图片描述
图片描述
权限分配和初始化安全标识符
图片描述
图片描述
通过上述分析可以看出目前勒索程序正在对当前用户进行检测,判断是否拥有administrator的权限,参考Demo代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
BOOL IsAdmin()   
{   
    HANDLE hAccessToken;   
    BYTE * InfoBuffer = new BYTE[1024];   
    PTOKEN_GROUPS ptgGroups;   
    DWORD dwInfoBufferSize;   
    PSID psidAdministrators;   
    SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;   
 
    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken))   
    {   
        delete InfoBuffer;   
        return FALSE;   
    }   
 
    if(!GetTokenInformation(hAccessToken,TokenGroups,InfoBuffer,1024,&dwInfoBufferSize))   
    {   
        delete InfoBuffer;   
        CloseHandle(hAccessToken);   
        return FALSE;   
    }   
 
    CloseHandle(hAccessToken);   
 
    if(!AllocateAndInitializeSid(&siaNtAuthority,   
        2,   
        SECURITY_BUILTIN_DOMAIN_RID,   
        DOMAIN_ALIAS_RID_ADMINS,   
        0,0,0,0,0,0,   
        &psidAdministrators))   
    {   
        delete InfoBuffer;   
        return FALSE;   
    }   
 
    ptgGroups = (PTOKEN_GROUPS)InfoBuffer;   
 
    for(UINT i = 0; i < ptgGroups->GroupCount; i++)   
    {   
        if(EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid))   
        {   
            FreeSid(psidAdministrators);   
            delete InfoBuffer;   
            return TRUE;   
        }   
    }   
    return FALSE;   
}

勒索初始化:

图片描述
图片描述
检查命令参数,如果存在的话那么将会退出,可能是为了方便勒索开发人员调试,避免被加密的情况发生所以进行的设置。
图片描述
判断其中是否包含了一个管理员SID。
图片描述
图片描述
图片描述

如果不是管理员权限运行:

1
通过名为Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}的对象运行了CoGetObject,此段特征和Darkside相似。

图片描述
图片描述
程序将以系统权限重新运行。
图片描述

是管理员权限运行:

异或解密信息中文意思是使用管理员权限创建的进程。
图片描述
图片描述

创建启动项:

图片描述
图片描述
图片描述
图片描述

创建ico图标信息:

1
将之前解密出来的小图标存放到system32目录中,ico将以DDFDBB命名。

图片描述
图片描述
图片描述
由于我们是x64位系统,所以将其放到了SysWOW64目录中。
图片描述

设备枚举:

1
枚举操作系统中的设备,并且利用QueryDosDeviceW获取磁盘卷名

图片描述
获取磁盘类型,这是常见的勒索手段之一。
图片描述

进程服务检测:

1
对之前解密出来的服务、进程进行检测,检测服务、进程是否存在,存在则进行关闭,避免在勒索时发生无法加密的情况。

图片描述
图片描述

删除卷影:

图片描述
以参数runas 执行以下命令:

1
2
3
4
5
6
7
8
9
10
/c vssadmin delete shadows /all /quiet & wmic shadowcopy delete & bcdedit / set {default} bootstatuspolicy ignoreallfailures & bcdedit /set {default} recoveryenabled no & wbadmin delete catalog -quiet
/c vssadmin Delete Shadows /All /Quiet
/c bcdedit /set {default} recoveryenabled No
/c bcdedit /set {default} bootstatuspolicy ignoreallfailures
/c wbadmin DELETE SYSTEMSTATEBACKUP
/c wbadmin DELETE SYSTEMSTATEBACKUP -deleteOldest
/c wmic SHADOWCOPY /nointeractive
/c wevtutil cl security
/c wevtutil cl system
/c wevtutil cl application

勒索中:

加密前的准备:

开启AES-NI
图片描述
加载bcrypt.dll,该dll程序所包含的导出表均与加密相关。
图片描述
利用BCryptGenRandom生成随机数
图片描述

解密勒索的后需要输出的信息:

图片描述

执行勒索动作:

1
生成密钥信息

图片描述
图片描述
根据主机的CPU来调整线程优先级。
图片描述
图片描述
逻辑驱动器的信息获取,主要是为了能够识别出主机上的分区情况。
图片描述
获取硬盘类型,根据微软官方给出的返回值中,可以看到主要加密磁盘:本地硬盘、移动硬盘、RAM磁盘,但由于共享磁盘挂载本地的关系也会将其加密。
图片描述
图片描述
通过遍历针对每个磁盘创建一个线程进行勒索。
图片描述
图片描述
创建线程,利用sleep在线程中实现了对文件的加密,其中避过了系统文件以及非数据文件,例如exe等,主要加密对象为数据文件。
图片描述
勒索完途中,在每个目录中释放Restore-My-Files.txt文件。
图片描述
图片描述

勒索后:

利用打印机打印勒索文件:

图片描述
图片描述
图片描述

修改计算机壁纸:

图片描述
主要用于制作相关的界面信息。
图片描述
图片描述
图片描述
将制作好的相关信息写入bmp图片中。
图片描述
并将其修改成计算机背景。
图片描述
图片描述

HTA弹框:

1
组合勒索所要弹出的.hta文件信息。

图片描述
图片描述
设置HTA开机启动:
图片描述
图片描述

删除自身:

1
最后删除自身,目的是为了避免被安全厂商抓获,并将其拉黑处理。

图片描述


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2021-9-28 21:25 被zhj张尼玛编辑 ,原因:
上传的附件:
收藏
点赞8
打赏
分享
最新回复 (14)
雪    币: 12483
活跃值: (16262)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
有毒 10 2021-9-29 09:12
2
1
始于标题,终于才华,厉害
雪    币: 2326
活跃值: (9130)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
TkBinary 5 2021-9-29 09:22
3
0
完整看完了.详细有干货.
雪    币: 1021
活跃值: (4987)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
suuuuu 2021-9-29 09:55
4
0
图片好小
雪    币: 54
活跃值: (1297)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
zhj张尼玛 1 2021-9-29 10:05
5
0
suuuuu 图片好小
可以下载原稿来看看的,上面的图确实- - 图太多了一一上传太慢了
雪    币: 1292
活跃值: (4030)
能力值: ( LV9,RANK:195 )
在线值:
发帖
回帖
粉丝
天水姜伯约 4 2021-9-29 10:27
6
0
震惊!某男子竟对楼主帖子做这事
雪    币: 200
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
周瑜唱情歌 2021-9-29 10:33
7
0
震惊!张尼玛竟然发帖了
雪    币: 11973
活跃值: (15270)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2021-9-30 09:53
8
0
在编辑的时候图片是可以放大的,虽然会有些失真……
雪    币: 5381
活跃值: (16075)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
wusha 2021-9-30 23:23
9
0
佩服,牛逼,既吸得了眼球,也震撼到了我等凡夫。我还有点好奇,怎么弄到的样本。
雪    币: 1507
活跃值: (853)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guangzisam 2021-10-4 22:20
10
0
静态分析后,还有运行后的图片。水平很高
雪    币: 11
活跃值: (176)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
计算机李白 2021-10-5 22:49
11
0
nb,我直接看到了最后
雪    币: 2062
活跃值: (1176)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gaofengjx 2021-10-6 09:39
12
0
太厉害了啊  你也是大佬啊
雪    币: 200
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mengfeiX 2021-10-7 01:51
13
0
下载下来,怎么无法解压?
雪    币: 3794
活跃值: (1862)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
欧阳休 2021-10-9 14:46
14
0
震惊,居然有神直播手撕勒索病毒!
雪    币: 26435
活跃值: (18467)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2021-10-15 17:55
15
0
图片不清楚,建议编辑时,重新帖一下图,直接复制粘贴大图上来即可。
游客
登录 | 注册 方可回帖
返回