一款勒索病毒的详细分析

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

原文出自看雪论坛:[原创]一款勒索病毒的详细分析-『软件逆向』-看雪安全论坛

0×01 程序信息

大小:2,132,992 字节

MD5:671ec2f2b246113f65a0afd1c53c5c3b

壳:UPX 0.89.6 - 1.02 / 1.05 - 2.90

编写语言:易语言

0×02 程序行为

开机自启

修改浏览器信息

禁用UAC

进程检测

加密文件

发送数据到指定邮箱

0×03 运行截图


0×04 脱壳去花指令

采用UPX加壳,通过ESP定律脱壳


脱壳后: 从入口特征判断为VC++6.0编译[易语言]


程序插入了大量花指令


用OD插件E Junk Code 轻松去除


去除花指令后


0×05 分析思路

从病毒的行为判断所调用的API,在所调用的API下断点,然后通过栈回溯找到关键函数。

程序所用到的API:

病毒运行后会隐藏自身文件(SetFileAttributes)

修改注册表信息(RegOpenKey、RegSetValue)

遍历文件(FindFirstFile)等等

SetFileAttributes设置断点,然后查看调用堆栈,回溯到关键函数


0×06 关键函数分析

函数功能:设置程序开机启动、隐藏程序文件、修改浏览器信息、禁用UAC、生成解密KEY(30位随机值)、创建加密线程.



加密所有文件后,会在Temp目录下生成Victim.tmp文件,程序运行后会判断Temp目录下是否有Victim.tmp文件,没有则创建加密线程,如果已经存在Victim.tmp文件,则直接加载勒索窗口。


创建线程后,程序执行消息循环,然后系统会调用线程回调函数


0×07 线程回调函数分析

函数功能:遍历全盘文件,加密指定后缀文件

*.zip.*.rar.*.7z.*.txt.*.doc.*.pptx.*.wps.*.jpg.*.jpeg.*.gif.*.bmp.*.png.*.swf.*.wav.*.mp3.*.mp4.*.avi.*.rmvb.*.xis.*.htm.*.html.*.e.*.ec.*.bak.*.docx.*.ico.*.rtf.*.xlsx.*.c.*.h.*.cpp.*.php.*.pps.*.pdf.*.fla.*.asm.*.dot.

加密后会生成对应后缀的文件

*.zip ----- *.XiaoBa1

*.rar ----- *.XiaoBa2

……

线程回调函数0x40F82B设置断点


进入线程主函数0x4065D8


加密完成后


0×08 勒索窗口事件分析

函数功能:把用户的IP、CPU信息、屏幕截图、系统信息、解密信息发送到指定邮箱

InternetOpen设置断点,通过回溯找到关键函数



发送的数据格式


0×09 进程检测函数追踪

函数功能:程序加载时,会创建一个定时器,每隔一秒调用一次进程检测的函数,通过CreateToolHelp32Snapshot创建进程快照的方式遍历进程,检测到指定进程后,会尝试结束进程。

SetTimer设置断点


Timerproc为NULL,说明调用的是系统默认的回调函数OnTimer(),DispatchMessage设置条件断点[[esp+4]+4](esp+4 是MSG对象的地址 [esp+4]+4是消息类型)

WM_TIMER == 0x113


断下时的堆栈如下:


然后在代码段设置访问中断


F9运行,直接到窗口回调函数


进入窗口回调继续分析,注意堆栈数据,


跟进0x4AEDED


跟进0x4AEE31


继续跟踪分析onTimer,最终调用进程检测函数


函数检测的进程列表:

taskmgr.exe

OllyDbg.exe

吾爱破解[LCG].exe

MSASCuiL.exe

RAVmon.exe

RAVtimer.exe

rav.exe

360Tray.exe

360Safe.exe

ZhuDongFangYu.exe

360sd.exe

KSafeSvc.exe

KSafeTray.exe

kxetray.exe

kxescore.exe

QQPCTray.exe

QQPCRTP.exe

BaiduSdSvc.exe

BaiduSdTray.exe

BaiduAnTray.exe

BaiduAnSvc.exe

avp.exe

egui.exe

ekrn.exe

MsMpEng.exe

msseces.exe

0x0A加密函数分析:


用CPU序列号生成一个大小为0xFF的Key表


通过计算得到一个Key表索引,取Key值异或数据


IDA分析生成Key表函数


IDA分析加密数据函数


因为加密只采用了异或运算,所以加密算法也是解密算法。

文件还原代码

#include "stdafx.h"

#include

BYTE *__cdecl unknown_libname_467(BYTE *a1, BYTE *a2)

{

BYTE *result; // eax@1

char v3; // cl@1

result = a1;

v3 = *a1;

*a1 = *a2;

*a2 = v3;

return result;

}

int __cdecl MakeKeyTable(int a1, signed int a2, int a3)

{

signed int v3; // eax@1

int v4; // ebp@1

int result; // eax@3

int v6; // esi@4

BYTE *v7; // ebx@4

bool v8; // zf@5

signed int v9; // [sp+4h] [bp-8h]@4

unsigned __int8 v10; // [sp+18h] [bp+Ch]@4

v3 = 0;

v4 = a3;

do

{

*(BYTE *)(v3 + a3) = v3;

++v3;

} while (v3 < 256);

result = a2;

*(BYTE *)(a3 + 256) = 0;

*(BYTE *)(a3 + 257) = 0;

if (a2 > 0)

{

v10 = 0;

v6 = 0;

v7 = (BYTE *)v4;

v9 = 256;

do

{

v6 = (unsigned __int8)(*(BYTE *)(v10 + a1) + v6 + *v7);

unknown_libname_467(v7++, (BYTE *)(v6 + v4));

result = v9 - 1;

v8 = v9-- == 1;

v10 = (v10 + 1) % a2;

} while (!v8);

}

return result;

}

unsigned __int8 __cdecl Decrypt(int a1, int a2, int a3)

{

int v3; // esi@1

int v4; // ebx@1

unsigned __int8 result; // al@1

unsigned __int8 v6; // cl@1

unsigned __int8 v7; // di@2

unsigned __int8 v8; // bp@2

BYTE *v9; // ST20_4@3

BYTE *v10; // ST1C_4@3

unsigned __int8 v11; // [sp+8h] [bp-Ch]@3

unsigned __int8 v12; // [sp+20h] [bp+Ch]@1

unsigned __int8 v13; // [sp+20h] [bp+Ch]@3

v3 = a3;

v4 = 0;

result = *(BYTE *)(a3 + 256);

v6 = *(BYTE *)(a3 + 257);

v12 = *(BYTE *)(a3 + 256);

if (a2 <= 0)

{

*(BYTE *)(v3 + 256) = result;

*(BYTE *)(v3 + 257) = v6;

}

else

{

v7 = v12;

v8 = v6;

do

{

v13 = v7 + 1;

v7 = v13;

v9 = (BYTE *)(v13 + v3);

v11 = v8 + *v9;

v8 = v11;

v10 = (BYTE *)(v3 + v11);

unknown_libname_467(v9, v10);

*(BYTE *)(v4++ + a1) ^= *(BYTE *)(((*v9 + *v10) & 0xFF) + v3);

} while (v4 < a2);

result = v11;

*(BYTE *)(v3 + 256) = v13;

*(BYTE *)(v3 + 257) = v11;

}

return result;

}

int main()

{

//加密文件

HANDLE hEntyrptFile = CreateFile(L"D:\\1.XiaoBa1", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

DWORD dwFileSize = GetFileSize(hEntyrptFile, NULL);

PBYTE pFileBuffer = new BYTE[dwFileSize];

ZeroMemory(pFileBuffer,dwFileSize);

DWORD dwRead = 0;

ReadFile(hEntyrptFile, pFileBuffer, dwFileSize, &dwRead, NULL);

//CPU序列号

char cpuid[] = "0FABFBFF000306A9";

//序列号长度

int length = 0x10;

BYTE KeyTable[257] = { 0 };

MakeKeyTable((int)cpuid, length, (int)KeyTable);

Decrypt((int)pFileBuffer, dwFileSize, (int)KeyTable);

HANDLE hDecryptFile = CreateFile(L"D:\\1.zip",GENERIC_WRITE|GENERIC_READ,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

WriteFile(hDecryptFile, pFileBuffer, dwFileSize, &dwRead, NULL);

CloseHandle(hEntyrptFile);

CloseHandle(hDecryptFile);

delete pFileBuffer;

system("pause");

return 0;

}

本文由看雪论坛 Vamcy 原创,转载请注明来自看雪社区

相关文章
|
存储 监控
蠕虫分析
简单看下报告的概要信息,有 Ramnit 标签。Ramnit 蠕虫是一种通过可移动驱动器传播的蠕虫。该蠕虫还可以作为后门,允许远程攻击者访问受感染的计算机,通常会寄生在用户的浏览器中,难以察觉,因此每天都有数以万计的用户受其困扰。
|
存储 监控 安全
勒索病毒最新变种.faust勒索病毒来袭,如何恢复受感染的数据?
在今天的数字时代,网络威胁不断进化,其中一种最令人担忧的威胁就是勒索病毒。本文将介绍.faust勒索病毒的工作原理,如何恢复被.faust勒索病毒加密的数据文件,以及如何预防这种威胁。
233 0
|
3月前
|
存储 安全 网络安全
警惕baxia勒索病毒,您需要知道的预防和恢复方法。
在数字时代,网络安全威胁日益严峻,.baxia勒索病毒以其隐蔽的传播方式和强大的加密能力,成为企业和个人数据安全的重大隐患。本文深入分析.baxia勒索病毒的工作原理、传播途径及其危害,并提出应对策略,帮助读者防范这一威胁。如遇数据加密问题,可添加技术服务号(sjhf91)获取专业数据恢复支持。
145 0
警惕baxia勒索病毒,您需要知道的预防和恢复方法。
|
安全 网络安全 数据安全/隐私保护
警惕Mallox勒索病毒的最新变种mallox,您需要知道的预防和恢复方法。
在这个数字时代,恶意软件不再是仅限于技术领域的威胁,而是每个人都可能面临的潜在风险。其中,.mallox勒索病毒崭露头角,它不仅能够以不可思议的方式加密您的数据,还能要求您支付赎金以获取解密密钥。本文将深入探讨.mallox勒索病毒,如何解锁被其加密的数据,以及我们应该如何未雨绸缪,以免受到未来威胁的影响
448 1
警惕Mallox勒索病毒的最新变种mallox,您需要知道的预防和恢复方法。
|
11月前
|
安全 网络安全 数据库
勒索病毒最新变种.mkp勒索病毒来袭,如何恢复受感染的数据?
随着网络技术的不断发展,勒索病毒已经成为数字时代的威胁之一,而MKP勒索病毒正是其中之一。本文将深入介绍MKP勒索病毒的特点,讨论恢复被加密数据的方法,并提供预防措施,以帮助用户和组织更好地保护自己的数据安全。
|
安全 网络安全 区块链
警惕.faust勒索病毒的最新变种.faust,您需要知道的预防和恢复方法。
在数字化的时代,数据被视为黄金。然而,这个黄金宝库也吸引了数字强盗,.faust勒索病毒便是其中之一。本文将深入探讨.faust勒索病毒的独特特点、如何挣脱其数字锁链,以及如何建立一道坚不可摧的数据防线。
281 1
|
存储 安全 网络安全
警惕.Elbie勒索病毒,您需要知道的预防和恢复方法。
近年来,网络安全威胁不断增加,其中勒索软件作为一种具有破坏性的恶意软件类型,给个人用户和企业带来了严重的数据安全问题。.Elbie勒索病毒(Elbie Ransomware)是其中的一种变种,它能够对计算机中的数据文件进行加密,并以获取赎金为目的。本文91数据恢复将深入探讨.Elbie勒索病毒的特点、传播途径,并提供一些可能的数据恢复方法
404 0
|
安全 API Windows
恶意病毒逆向分析实验1
恶意病毒逆向分析
|
存储 监控 安全
​【收藏】感染勒索病毒处置办法
​【收藏】感染勒索病毒处置办法
237 0
|
安全 Windows
WannaCry 2.0勒索病毒变种是什么?怎么防?
WannaCry 2.0勒索病毒变种是什么?怎么防?在全球范围内爆发的WannaCry 勒索病毒出现了变种:WannaCry 2.0,不能通过注册某个域名来关闭变种勒索病毒的传播,该变种传播速度可能会更快。下面是云市场为企业准备的WannaCry 2.0病毒防护方法。
10815 0