Eternity Project 是一个恶意软件工具包,作为恶意软件即服务 (MaaS) 出售,除了核心功能外,它还提供自定义恶意软件功能,威胁参与者通过匿名 Tor 市场和 Telegram 频道作为“Eternity Group”分发他们的服务。工具包中的每个恶意软件项目都是单独定价的:
-
Eternity Stealer — 每年订阅 260 美元。
-
Eternity Miner — 每年订阅 90 美元。
-
Eternity Worm — 390 美元。
-
Eternity Ransomware — 490 美元。
-
Eternity Clipper— 110 美元。
-
Eternity DDoS Bot — (仍在开发中)。
我想提一下,这是一个详细的技术分析,所以会有点长😅,希望你对你有所帮助,如果你有任何笔记,请考虑与我联系或对文章发表评论,现在让我们开始分析永恒窃贼。
-
恶意软件开发(更新到了155节) 其它教程翻到最后
-
Eternity Stealer 恶意软件:
我从“Malware Bazaar”获得了恶意软件的样本,这是在网站上看到的第一个样本:
一般信息:
恶意软件示例是 .NET 32 位可执行文件,经过😡严重混淆,因此我们的任务会有点困难,在使用 de4dot 后,东西被清理了一点,但仍然充满了混淆,所以我不得不做更多的工作:
在整个代码中,有两个方法(DS 和 SSD)被反复调用来对字符串进行反混淆,当查看这些方法所属的类时,我们发现它有处理混淆和反混淆的方法,指向混淆和非混淆字符串的方法,以及其他方法:
分析混淆方法:
DS 方法:
-
采用两个字符串参数。
-
从第二个字符串参数中删除第一个和最后一个字符,然后从 base64 解码,结果将用作 AES 解密中的密钥。
-
解码 base64 中的第一个字符串参数,并在 AES 解密中将其用作 IV。
-
解密后,它返回 UTF8 字符串。
SSD方法:
-
采用字符串和长参数。
-
将字符串参数转换为 char 数组。
-
使用 for 循环将两个参数都转换为 int32,然后检查两个参数 Combined 是否介于 0 和 256 之间,如果是,它将从第二个参数中子第一个参数并将其转换为 char,然后将大写 char 转换为小写,将小写转换为大写。
-
反转 char 数组并将其作为字符串返回。
SSE方法::
此方法与“SSD”方法相反,这意味着它是一个混淆类:
主要方法:
main 方法首先使用方法 (DS,SSD) 解密和反混淆字符串,其结果是“quwqsgpmly”,此字符串将用于使用名为“PerformMutexCheck()”的方法创建(名称对象/互斥锁)。此方法将解密和反混淆字符串以获取 (“”) 双引号,然后使用“GetCommandLineArgs()”获取命令行参数并将其转换为小写,并使用双引号作为分隔符参数,命令行字符串在“string.加入()”。
然后它再次解密和反混淆字符串以获得“— debug”字符串并在“string.Contain()“来查看它是否是使用 debug string 执行的,如果失败,它将创建一个字符串值为”quwqsgpmly“的互斥锁,如果创建互斥锁失败,它将退出。
注意:防重复功能不是核心功能,它是根据买家的选择添加的。
然后它调用“PerformSelfDestruct()”方法,并再次执行与上一个方法相同的检查,以查看它是否是使用 (“ — debug”) 字符串执行的,如果不是,它将继续使用 (“AppDomain .CurrentDomain“) 类。
应用程序域是应用程序执行的隔离环境,它由 AppDomain 对象表示,它有助于为执行托管代码提供隔离、卸载和安全边界。
CurrentDomain 属性用于获取表示当前应用程序域或线程的 AppDomain 对象。通过获取当前域,它设置了三个事件,如果发生其中一个事件,它将调用“HandleSelfDestruct()”函数,这些事件是:
-
UnhandledException(在未捕获异常时发生)。
-
ProcessExit(在默认应用程序域的父进程退出时发生)。
-
DomainUnload(在即将卸载 AppDomain 时发生)。
(“HandleSelfDestruct”) 函数检查路径中是否存在文件,如果存在,它将启动一个带有参数的新进程:
-
chcp 65001 .
-
ping 127.0.0.1 .
-
DEL /F /S /Q /A ”{0}” “C:pathtofile.exe” .
-
CreateNoWindow.
-
UseShellExecute
chcp 用于将 Windows 控制台中的字符编码切换为 UTF-8。虽然 ping 在这里用作睡眠方法,这是我唯一的假设,但它将删除文件,以下是与“del”命令一起使用的参数的描述:
接下来,它设置“ServicePointManager”类的三个属性:
-
Expect100Continue:获取或设置一个布尔值,该值确定是否使用 100-Continue 行为。HTTP 信息状态响应代码指示一切正常,客户端应继续请求,如果请求已完成,则忽略它。这里的恶意软件通过获取 4 个字节的浮点数大小来给它“1”,然后从中获取 3 个字节,结果是 1,这意味着 true。
100 Continue
-
DefaultConnectionLimit:获取或设置“ServicePoint”对象允许的最大并发连接数。此属性的值为 9999,也可以通过获取浮点数的大小并向其添加 9995。
-
SecurityProtocol:获取或设置由“ServicePointManager”对象管理的“ServicePoint”对象使用的安全协议。安全类型协议是“Tls12”,其值为 3072,如 MS 文档中所述,相同的过程再次获取浮点数的大小,然后添加 3068。
注意:通过恶意软件,您将面临使用浮点数大小来设置整数值的技术。
之后,它开始将委托添加到委托。C# 中的委托包含对多个方法的引用,您可以在需要时调用它们。因此,您可以根据需要创建多个方法并将其附加到委托,在运行时,会触发一个事件并委托动态调用函数并显示结果。这里有 4 名代表:
-
HandleAccount。
-
HandleCookie。
-
HandleAutoFill。
-
HandleCreditCard。
HandleAccount delegate:
HandleAccount delegate能够获取或设置:
-
Hostname.
-
Username.
-
Password.
-
Application.
-
Profile.
HandleCookie delegate:
HandleCookie 委托能够获取或设置:
-
Name.
-
Path.
-
Value.
-
HostKey.
-
ExpiresUTC.
-
Application.
-
Profile.
HandleAutoFill 委托:
HandleAutoFill 委托能够获取或设置:
-
Name.
-
Value.
HandleCreditCard 委托:
HandleCreditCard 委托能够获取或设置:
-
Number.
-
Holder.
-
CardName.
-
ExpYear.
-
ExpMonth.
-
Application.
-
Profile.
之后,它调用一个名为“Create”的方法,该方法接受 2 个布尔参数,此方法的结果将存储在名为“array”的数组中。在我们进入该方法之前,我们可以从它下面的 if 语句中看到数组长度应该大于 10240,如屏幕截图所示:
创建方法:
在此方法开始时,它开始收集有关计算机的以下信息:
-
Executable Path.
-
Start Date.
-
Stub Version.
-
Stub Location.
-
Username.
-
ComputerName.
-
OSName.
-
UILang.
-
Hardware.
-
CPUName.
-
GPUName.
-
RAMAmount.
-
DiskSize.
-
Model.
-
Manufacturer.
-
ScreenResolution.
-
Geolocation.
之后,它使用在收集数据之前创建的内存流将其作为字节写入名为“Information.txt”的文件。
然后创建一个类型为 thread 的对象列表,并将 9 个线程添加到列表中,这些线程及其代表表示每个线程启动时要调用的方法:
以下是每个线程在不遵循线程之间的工作流程的情况下正在执行的操作,并且恶意软件编写者还为其提供了线程的名称:
Thread[0] (系统)
1- 枚举保管库凭据:
-
使用“vaultcli.dll”(相当于凭据管理器的命令行),从此 dll 调用的函数:
-
定义它是使用 VAULT_ITEM_WIN7 还是VAULT_ITEM_WIN8结构。
-
收集的数据是:
- Windows 安全提示。
- Windows Web 密码凭据
- “Windows 凭据选取器保护程序。
- Web 凭据。
- Windows 凭据。
- Windows 域证书凭据。
- Windows 域密码凭据。
- Windows 扩展凭据。
-
结果将写入名为“SystemVault.txt”的文件中。
2- 枚举“Credential Manger”凭据:
Credential Manger 是一个储物柜,Windows 在其中存储登录凭据、用户名、密码和地址。收集的信息将存储在名为“SystemCredman.txt”的文件中,它是:
- Windows 凭据。
- 基于证书的凭据。
- 通用凭据。
3- 枚举网络凭据:
-
执行命令 (“netsh wlan show profile |findstr All“) 列出系统上配置的配置文件。
-
如果上一步成功,则执行命令 (“netsh wlan show profile name=”)。
4- 截取屏幕截图并将其命名为“Screenshot.png”。
Thread[1] (游戏)
1- 枚举 Steam 文件:
-
通过打开注册表项“SoftwareValveSteam”获取Steam目录。
-
如果成功,它将检索与指定名称“UvgcoRcvj”关联的值。
-
从搜索模式为“ssfn*”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
Steam目录中每个文件数据与上一步中的规范将存储在“GamingSteam<file name>”文件中。
-
从搜索模式为“config*vdf”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
Steam目录中每个文件在上一步中都有规范,将存储在“GamingSteameqphki <file name>”文件中。
2- 枚举 Twitch 文件:
-
获取当前系统中搜索模式为“Twitch*”的目录数组,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
从每个目录中获取一个具有搜索模式“Electron9Cookies”的文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
每个具有上一步规范的文件都将存储在“Gaming<目录名称>Fmfduspo:<file name>”文件中。
3- 枚举 OBS 文件:
-
设置OBS目录“C:Users<user>AppDataRoamingobs-studiobasicprofiles”的路径。
-
从搜索模式为“*.*”的目录中获取文件列表,并使用值为 (1) 的搜索选项在搜索操作中包括当前目录及其所有子目录。此选项包括重新分析点,例如搜索中的挂载驱动器和符号链接。
-
每个符合上一步规范的文件都将存储在“GamingObsStudio<目录名称><文件名>”文件中。
-
设置OBS目录“C:Users<user>AppDataRoamingslobs-clientLocal Storageleveldb”的路径。
-
从搜索模式为“*.|??”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
每个具有上一步规范的文件都将存储在“GamingStreamlabsOBSLocal Storageleveldb<file name>”文件中。
线程[2] (FTP)
1-枚举FTP FileZilla文件:
-
在此路径“C:Users<user”中搜索这些文件“sitemanager.xml”“recentserver.xml”>AppDataRoamingFilezilla”。
-
这些文件中的数据将存储在“FTPFileZillaServers.txt”中。
2- 枚举FTP WinSCP凭据:
-
打开注册表子项“SoftwareMartin Prikry1WinSCP 2Sessions”以获取会话。
-
获取每个会话的“HostName”、“UserName”和“Password”的值。
-
解密每个会话的密码。
-
凭据将存储在“FTPWinSCPServers.txt”中。
3- 枚举 CoreFTP 凭据:
-
打开注册表子项“SoftwareFTPWareCoreFTPSites”以获取站点。
-
获取每个站点的“Host”、“Port”、“User”和“PW”的值。
-
使用密钥“hdfzpysvpzimorhk”解密密码。
-
凭据将存储在“FTPCoreFTPServers.txt”中。
4- 枚举 Snowflake 凭据:
-
从 Snowflake 路径“C:Users<user>snowflake-ssh”中获取文件“session-store.json”并解析它以获取主机、端口、用户名、密码和文件夹的值,Snowflake 中的密码以明文形式存储。
-
凭据将存储在“FTPSnowflakeServers.txt”中。
线程[3] (VPN)
1- 枚举 NordVPN 凭据:
-
获取 NordVPN 目录“C:Users<user>AppDataLocalNordVPN”的路径。
-
在所有目录中搜索“user.config”文件。
-
解密 base64 中的数据。
-
凭据将存储在“VPNNordVPNAccount.txt”文件中。
2- 枚举EarthVPN凭据:
-
打开注册表项“SoftwareEarthVPN”。
-
获取“SavePass”值。
-
凭据将存储在“VPNEarthVPNAccount.txt”文件中。
3-枚举WindscribeVPN凭据:
-
打开注册表项“SoftwareWindscribe”。
-
获取子项名称(Installer、Windscribe、Windscrib2)。
-
从“Windscribe”子项获取“userId”,“authHash”值。
-
从“Windscribe2”子项获取“userId”,“authHash”值。
-
凭据将存储在“VPNWindscribeVPNAccount.txt”文件中。
4- 枚举 AzireVPN 凭据:
-
获取 AzireVPN目录“C:Users<user>AppDataLocalAzireVPN”的路径。
-
搜索文件“token.txt”并从文件中读取数据。
-
凭据将存储在“VPNAzireVPNAccount.txt”文件中。
Thread[4](浏览器)
1- 枚举浏览器信息:
-
浏览器:
( Chrome - FireFox - Cyberfox - K-Meleon - Pale Moon - BlackHawk - Waterfox- IceCat - SeaMonkey - SlimBrowser - Thunderbird - PostboxApp(Email app)- 360Chrome - Avast Secure Browser - 7Star - Amigo - Brave-Browser- Citrio - CentBrowser - Chedot - Blisk - GhostBrowser - Chromodo- CoCoc - Comodo - Coowon - Elements Browser - Epic Privacy Browser- Chormium - Chrome SxS - Chrome Beta - Kinza - Iridium - Kometa- Atom - ChromePlus - Maxthon3 - Edge - Nichrome - Opera GX- Opera Stable - Orbitum - QIP Surf - UCBrowser - Xpom - Xvast- SuperBird - QQBrowser - Sputnik - Torch - Uran - Vivaldi - Yandex Browser -liebao - SalamWeb)
( Profiles - Passwords - Cookies - Credit Cards - Tokens - AutoFill - Bookmarks- Extension Files).
线程[5] (信使)
1- 枚举电报凭据:
-
获取电报进程名称。
-
获取 Telegram 目录“C:Users<user>AppDataRoamingTelegram Desktoptdata”,如果没有找到它,它将打开注册表项“SoftwareClassestdesktop.tgDefaultIcons1”并获取目录路径。
-
从搜索模式为“*s”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
获取所有目录的列表。
-
从搜索模式为“map?”的每个目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
找到的每个文件都将写入“MessengersTelegram<file name>”文件。
2- 枚举 Discord 凭据:
-
获取两组正则表达式:
-
使用 (Discord — Discord PTB — Discord Canary ) 创建数组列表
-
获取文件“C:Users<user>AppDataRoamingDiscordLocal State”,其中包含加密密钥,并将其从 base64 转换。
-
获取目录“C:Users<user>AppDataRoamingDiscordLocal Storageleveldb”。
-
从搜索模式为“*.l??”的目录中获取文件列表。
-
获取目录“C:Users<user>AppDataRoamingDiscord PTBLocal Storageleveldb”并执行上述相同步骤。
-
获取目录“C:Users<user>AppDataRoamingDiscord CanaryLocal Storageleveldb”并执行上述相同的步骤。
-
凭据将存储在“MessengersDiscordTokens.txt”文件中。
3- 枚举 Pidgin 凭据:
-
获取目录“C:Users<user>AppDataRoaming.purple”的路径。
-
获取文件“accounts.xml”。
-
凭据将存储在“MessengersPidginAccounts.txt”文件中。
4- 枚举 Outlook 凭据:
-
打开子项:
“SoftwareMicrosoftOffice15.0OutlookProfilesOutlook9375CFF0413111d3B88A00104B2A6676”.
- “SoftwareMicrosoftWindows NTCurrentVersionWindows Messaging Subsystem ProfilesOutlook9375CFF0413111d3B88A00104B2A6676”.
- “SoftwareMicrosoftWindows Messaging SubsystemProfiles9375CFF0413111d3B88A00104B2A6676”.
- “SoftwareMicrosoftOffice16.0OutlookProfilesOutlook9375CFF0413111d3B88A00104B2A6676”.
-
获取(“IMAP 密码”、“POP3 密码”、“HTTP 密码”、“SMTP 密码”)并解密密码。
-
凭据将存储在“MessengersOutlookAccounts.txt”文件中。
5- 枚举 FoxMail 凭据:
-
打开子项“SOFTWAREClassesFoxmail.url.mailtoShellopencommand”以获取 FoxMail 目录路径。
-
获取文件“C:FoxMail7.2Storage”以枚举凭据。
-
解密凭据。
-
凭据将存储在“MessengersFoxMailAccounts.txt”文件中。
6- 枚举 MailBird 凭据:
-
获取目录“C:Users<user>AppDataLocalMailbirdStore”的路径。
-
从目录中获取文件“Store.db”,该文件采用 SQLite 格式。
-
从文件中获取名为“OAuth2Credentials”的表以进行枚举。
-
凭据将存储在“MessengersMailBirdAccounts.txt”文件中。
7- 枚举 Viber 凭据:
-
获取目录“C:Users<user>AppDataRoamingViberPC”的路径。
-
枚举搜索模式为“*.db”的文件的目录和子方向。
-
这些文件将存储为“MessengersViber<目录名称><文件名>”。
8-枚举WhatsApp凭据:
-
获取目录“C:Users<user>AppDataRoamingWhatsAppLocal Storageleveldb”的路径。
-
枚举搜索模式为“*.|??”的文件的目录和子方向。
-
这些文件将存储为“MessengersWhatsAppLocal Storageleveldb<file name>”。
9- 枚举信号凭证:
-
获取目录“C:Users<user>AppDataRoamingSignal”的路径。
-
获取文件“config.json”
-
获取子目录“sql”。
-
配置文件将存储为“MessengersSignalconfig.json”。
-
数据库文件将存储为“MessengersSignalsqldb.sqlite”。
10- 枚举 RamBox 凭据:
-
获取目录“C:Users<user>AppDataRoamingrambox”的路径。
-
获取文件“config.json”。
-
获取子目录“Partitions”。
-
配置文件将存储为“MessengersRamboxconfig.json”。
-
对于每个分区目录,它都会得到“Cookies”文件
-
Cookie 文件将存储为“MessengersRambox<目录名称>Cookies”。
-
获取目录“C:Users<user>AppDataRoamingramboxPartitionsLocal Storageleveldb”的路径。
-
枚举搜索模式为“*.|??”的目录。
-
每个文件将存储为“MessengersRamboxPartitions<目录名称>Local Storageleveldb<file name>”。
Thread[6] (钱包)
1- 枚举币安凭证:
-
获取目录“C:Users<user>AppDataRoamingBinance”的路径。
-
从搜索模式为“*-stor*.json”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
搜索模式将获得“app-store.json”和“simple-storage.json”。
-
凭证将存储为“WalletsBinance<file name>”。
2- 枚举门罗币凭据:
-
打开注册表子项“SOFTWARE monero-projectmonero-core”。
-
从子项中获取钱包目录路径。
-
获取搜索模式为“*.*”的所有文件。
-
文件将存储为“WalletsMoneroCore<目录名称><文件名>”。
3- 枚举比特币凭证:
-
打开注册表子项“SOFTWARE BitcoinBitcoin-Qt”。
-
获取钱包目录路径。
-
获取搜索模式为“*wallet*dat”的文件。
-
文件将存储为“WalletsBitcoinCore<file name>”。
4- 枚举 Dash 凭据:
-
打开注册表子项“SOFTWAREDashDash-Qt”。
-
获取钱包目录路径。
-
获取搜索模式为“*wallet*dat”的文件。
-
文件将存储为“WalletsDashcoinCore<file name>”。
5- 枚举 Doge 凭据:
-
打开注册表子项“SOFTWAREDogecoinDogecoin-Qt”。
-
获取钱包目录路径。
-
获取搜索模式为“*wallet*dat”的文件。
-
文件将存储为“WalletsDogecoinCore<file name>”。
6- 枚举莱特币凭证:
-
打开注册表子项“SOFTWARELitecoinLitecoin-Qt”。
-
获取钱包目录路径。
-
获取搜索模式为“*wallet*dat”的文件。
-
文件将存储为“WalletsLitecoinCore<file name>”。
7- 枚举 Electrum 凭据:
-
搜索搜索模式为“*Electr*”的目录
-
在每个目录中搜索文件“@lkcfd”
-
如果找到该文件,它将获取“recently_open”元素的值。
-
每个文件将存储为“Wallets<目录名称><文件名>”。
8- 列举出埃及记凭据:
-
获取目录“C:Users<user>AppDataRoamingExodusexodus.wallet”的路径。
-
搜索文件“exodus.conf.json”。
-
文件将存储为“WalletsExodusexodus.walletexodus.conf.json”。
-
从搜索模式为“*.seco”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
每个文件将存储为“WalletsExodusexodus.wallet<file name>”。
9- 枚举原子凭据:
-
获取目录“C:Users<user>AppDataRoamingatomicLocal Storageleveldb”的路径。
-
从目录中获取搜索模式为“*.|??”的文件列表。
-
每个文件将存储为“WalletsAtomicLocal Storageleveldb<file name>”。
10- 枚举 TONWallet 凭据:
-
检查“SOFTWARETONWallet”注册表是否存在。
-
搜索“data”目录。
-
在其中查找“tonlib_log.txt”文件。
-
检查 TON Wallet 目录中是否存在 “db” 目录。
-
“db”目录中的文件将存储为“WalletTonWallet<file name>”。
-
检查 TON Wallet 目录中是否存在 “lib” 目录。
-
“lib”目录中的文件将存储为“WalletTonWallet<file name>”。
-
获取文件名“salt”。
-
该文件将存储为“WalletTonWalletsalt”。
11- 枚举 Jaxx 凭据:
-
获取目录“C:Users<user>AppDataRoamingcom.liberty.jaxxIndexedDBfile_0.indexeddb.leveldb”的路径。
-
获取目录中的所有文件并将其存储为“WalletsJaxxClassic<file name>”
12- 枚举 Coinomi 凭据:
-
获取目录“C:Users<user>AppDataLocalCoinomiCoinomiwallets”的路径。
-
从搜索模式为“*.wallet”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
目录中的每个文件都将存储为“WalletsCoinomi<file name>”。
13- 枚举代达罗斯凭据:
-
获取目录“C:Users<user>AppDataRoamingDaedalus Mainnetwallet”的路径。
-
从搜索模式为“*.sqlite”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
每个具有上一步规范的文件都将存储在“WalletsDaedalus<file name>”文件中。
14- 枚举 Zcash 凭证:
-
获取目录“C:Users<user>AppDataRoamingZcash”的路径。
-
从搜索模式为“*wallet*dat”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
每个符合上一步规范的文件都将存储在“WalletsZcash<file name>”文件中。
15- 枚举 Guarda 凭据:
-
获取目录“C:Users<user>AppDataRoamingGuardaLocal Storageleveldb”的路径。
-
从搜索模式为“*.|??”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
每个符合上一步规范的文件都将存储在“WalletsGuardaLocal Storageleveldb<file name>”文件中。
16- 枚举芥末凭据:
-
获取目录“C:Users<user>AppDataRoamingWalletWasabiClientWallets”的路径。
-
从搜索模式为“*.json”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
每个具有上一步规范的文件都将存储为“WalletsWasabi<file name>”文件。
线程 [7] (PasswordManagers)。
1- 枚举 BitWarden 凭据:
-
获取目录“C:Users<user>AppDataRoamingBitwarden”的路径。
-
从搜索模式为“data*.json”的目录中获取文件列表,并使用值为 (0) 的搜索选项在搜索操作中仅包含当前目录。
-
每个具有上一步规范的文件都将存储为“PasswordManagersBitWarden<file name>”文件。
2- 枚举KeePass凭证:
-
获取文件“C:Users<user”的路径>AppDataRoamingKeePassKeePass.config.xml“,该文件适用于”2.51.1“之前的版本。
-
加载 xml 文件并获取元素“ConnectionInfo”,该元素保存数据库文件“Database.kdbx”的路径。
-
将文件存储为“PasswordManagersKeePass2databases”。
-
get 元素 “KeyFilePath”,它保存密钥文件的路径。
-
将文件存储为“PasswordManagersKeePass2keys”。
-
获取文件“C:Users<user>AppDataLocalKeePassXCkeepassxc.ini”的路径。
-
初始化正则表达式字符串“LastDatabases=(.*?)n“来解析一些信息。
-
将数据存储为“PasswordManagersKeePassXC<filename>”。
3- 枚举NordPass凭证:
-
获取目录“C:Users<user>AppDataRoamingNordPass”的路径。
-
从搜索模式为“*.conf”的目录中获取文件列表。
-
每个具有上一步规范的文件都将存储为“PasswordManagersNordPass<file name>”文件。
4- 枚举 1Password 凭据:
-
获取目录“C:Users<user>AppDataLocal1Passworddata”的路径。
-
从搜索模式为“*.sqlite”的目录中获取文件列表。
-
每个具有上一步规范的文件都将存储为“PasswordManagers1Passworddata<file name>”。
5- 枚举 RoboForm 凭据:
-
获取目录“C:Users<user>AppDataLocalRoboFormProfiles”的路径。
-
从搜索模式为“*.rfo”的目录中获取文件列表。
-
每个具有上一步规范的文件都将存储为“PasswordManagersRoboForm<file name>”。
线程[8](抓取器)
Grabber 线程将创建一个 20 搜索模式:
- 扫描 - 电子 - 元掩码 - 钱包 - 短语 - 恢复 - 分泌 - 安全
- 代码 - 种子 - NFT - 备份 - 硬币 - 密钥 - 通行证 - 证书 - .txt - .kdbx
- .rdp - .pdf .
如果任何搜索模式与以下位置中的文件匹配:
-
桌面。
-
文件。
-
AppDataRoamingDropBox。
-
AppDataRoamingOneDrive。
它将被存储为:
“Grabber<驱动器名称>Users<user><path><file name>”
返回主要方法:
“Create”方法的结果将存储在一个名为“array”的数组变量中,保存此变量并将其扔到十六进制编辑器中,我确实发现它是zip文件。解压缩文件后,我们得到了收集到的所有信息。
之后,它创建名为“stringBuilder”的对象,洋葱域值为:“http://lightnogu5owjjllyo4tj2sfos6fchnmcidlgo6c7e6fz2hgryhfhoyd.onion/stealer/ 1866445032”,然后它开始将从受害者机器收集的信息附加到洋葱域,最终结果将是:
“http://lightnogu5owjjllyo4tj2sfos6fchnmcidlgo6c7e6fz2hgryhfhoyd.onion/stealer/ 1866445032?pwds=2&cards=0&wlts=5&files=658&username=<base64 username>&comp=<base64 machine name>&ip=<base64 ip>&country=<base64 country>&city=<base64 city >&tag=Default&domains=<base64 domains>&ad=<base64 Active Directory>”
之后,它初始化 Web 客户端以开始上传收集的数据
这是对 Eternity Stealer 恶意软件样本的分析,希望您发现它内容丰富且有益,接下来将是 Eternity 项目的另一个样本,感谢您的阅读。
其它教程
-
-
windows网络安全防火墙与虚拟网卡(更新完成)
-
-
windows文件过滤(更新完成)
-
-
USB过滤(更新完成)
-
-
游戏安全(更新中)
-
-
ios逆向
-
-
windbg
-
-
还有很多免费教程(限学员)
-
-
-
更多详细内容添加作者微信
-
-
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论