Emotet分析

Emotet分析

编写启动器方便调试。

#include <iostream>
#include<windows.h>
 
typedef int(WINAPI* fnRunDLL)();
fnRunDLL My_RunDLL;
 
int main()
{
    HMODULE hModule = LoadLibraryA("C:\\Users\\xiao\\Desktop\\samples\\1.dll");
    My_RunDLL = (fnRunDLL)GetProcAddress(hModule, "Control_RunDLL");
    My_RunDLL();
    return 0;
}

样本经过控制流平坦化和大数运算混淆阻碍样本逻辑的分析
控制流平坦化:使得程序反编译为复杂的循环结构和选择结构
在这里插入图片描述
大数运算混淆:
在这里插入图片描述
样本没有导入函数,通过遍历内存加载的模块(peb)和其导出函数的名称,计算hash,和存储的hash对比,得到对应的API函数地址。
在这里插入图片描述
github下载ida脚本使得反编译更可读。
通过对MY_GetProcAddr函数下断,可以得到动态调用的所有函数的名称和地址。2410
在这里插入图片描述
MY_RtlAllocateHeap:
在这里插入图片描述
解密函数内调用MY_RtlAllocateHeap。对此解密函数下断可以得到解密出的内容。
在这里插入图片描述
解密出dll名称,加载dll
在这里插入图片描述
加载并初始化 CNG 提供程序,生成大小4000h的随机数后关闭算法提供程序。
在这里插入图片描述
在这里插入图片描述
将自身作为服务,
在这里插入图片描述
在这里插入图片描述
获取自1601年1月1日起,到现在的时间,如果时间与v9相差一周以上,则返回1 否则返回值为0。
在这里插入图片描述
时间相差一周以上:
遍历进程,获取PID,进而获取进程的完整路径,根据路径获取程序名
在这里插入图片描述
获取机器名,c根目录下磁盘驱动器信息,snprintf拼接
在这里插入图片描述
设置事件对象来通知等待线程发生事件,创建线程,线程函数sub_5BEC27检查当前目录下文件改动的情况。
sub_5BEC27
线程会通过ReadDirectoryChangesW 函数,检索描述指定目录中的更改的信息,更改包括重命名 删除 创建文件。F8无响应,nop掉此函数。
在这里插入图片描述

网络通信

Emotet在此版本中的网络流量保护和验证使用了椭圆曲线加密算法(ECC)
sub_9DD10C解密出ECC公钥ECK1 ECS1
解密逻辑:长度是第一个dword异或第二个dword ,长度经过处理。
以dword为单位,用第一块异或后面每一块。
在这里插入图片描述
ECK1
在这里插入图片描述
ECS1
在这里插入图片描述
可以提取出来base64编码后得到公钥。

C2配置是加密存储在DLL的数据节区中。在通讯的过程中会进行IP解密、加密流量和验证数据一系列操作,获取服务器的返回结果后就会根据结果继续执行流程。
加密的C2配置存储在.data段
在这里插入图片描述
sub_9DD10C解密c2配置模块,sprint出C2服务器地址。
c2配置解密后:格式ip 端口 01表示可用
在这里插入图片描述
在这里插入图片描述
按照后面的操作将每一个ip都过一遍,如下格式存放。
在这里插入图片描述
BCryptOpenAlgorithmProvider函数加载并初始化CNG提供程序,请求ECDH_P256算法

ECDH 是椭圆曲线的笛福赫尔曼算法的变种,它其实不单单是一种加密算法,而是一种密钥协商协议,也就是说 ECDH 定义了(在某种程度上)密钥怎么样在通信双方之间生成和交换,至于使用这些密钥怎么样来进行加密完全取决通信双方。
BCryptGenerateKeyPair 创建一个空的公钥/私钥对
BCryptFinalizeKeyPair 函数完成公钥/私钥对
在这里插入图片描述
导出创建的公钥对。把导出密钥的第三块之后部分复制。
在这里插入图片描述
导入之前解密的ECK1。
创建机密协议值。
在这里插入图片描述
BCryptOpenAlgorithmProvider函数加载并初始化CNG提供程序,请求AES算法
BCryptDeriveKey 从秘密协议值派生密钥。
BCryptImportKey 从密钥BLOB 导入对称密钥

导入之前解密的ECS1公钥。在这里插入图片描述
检索文件目录确认只有一个文件。(FindFirstFile 如果cmp 文件名不相同则退出并且删除文件)在这里插入图片描述
获取系统信息在这里插入图片描述
ProcessIdTooSessionId 检索与指定进程关联的远程桌面服务会话

请求AES256算法,创建哈希或MAC对象,在这里插入图片描述
执行单向hash或mac 计算 计算机名称和驱动器信息
在这里插入图片描述
调用BCryptEncrypt 加密数据。pbOutput为NULL,如果此参数为 NULL, BCryptEncrypt 函数将计算 在 pbInput 参数中传递的数据的密码文本所需的大小。
在这里插入图片描述
用BCryptEncrypt 加密数据。 大小60h
在这里插入图片描述
调用CryptBinaryToStringW将加密信息转为base64字符串,之后格式化输出为Cookie: %s=%s\r\n
在这里插入图片描述
网络通信模块:
利用cookie发送加密数据,在这里插入图片描述
循环发送数据包,不同的服务器会调用InternetReadFile下载数据。通过 VirtualAlloc 申请空间在执行。
在这里插入图片描述
在这里插入图片描述
调试过程中并未接收到数据。
对接收到的数据调用BCryptDecrypt解密数据,根据后面的流程,解密后也不是明文pe,还要进行操作

猜测创建线程对下载的数据解密之后执行。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/505043.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[ESP32]:基于esp-modbus实现serial从机

[ESP32]&#xff1a;基于esp-modbus实现serial从机 开发环境&#xff1a; esp idf 5.1esp-modbus 1.0.13 使用如下指令添加组件&#xff0c;或者访问esp-modbus idf.py add-dependency "espressif/esp-modbus^1.0.13"1.mb_register_area_descriptor_t 对于slave…

华为OD机试 - 芯片资源限制(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

【Linux】普通用户提升权限

概述 在Linux环境下&#xff0c;给普通用户提权的方式&#xff0c;su与sudo命令&#xff0c;su是将一个普通用户登录为root&#xff0c;而sudo则是将普通用户短暂提升权限 普通用户使用$ root使用# 使用su提升权限 如果我们使用su将用户提升为root&#xff0c;此时需要输入…

【AI+儿童绘本】从0到1制作儿童绘本故事操作思路

今天刷了会小H书&#xff0c;无意刷到一些 睡前儿童绘本故事&#xff0c; 下面一堆评论说 求软件什么的&#xff0c;博主只是引流没做任何回复。 这里写一篇文章科普下吧&#xff0c;免得有人被割韭菜。 制作儿童绘本&#xff0c; 大概这几个步骤。1、写生动有趣的故事&#x…

jmeter性能测试如何实现分布式部署

jmeter什么要做分布式部署&#xff1f; jmeter是运行在JVM虚拟机上的&#xff0c;当模拟大量并发时&#xff0c;对运行机器的性能/网络负载会很大。 此时就需要使用jmeter的分布式部署功能&#xff0c;实现多台被控机器同时并发访问被测系统。 原理图&#xff1a; 准备工作&…

【Spring】Spring框架中的一个核心接口ApplicationContext 简介,以及入口 Run() 的源码分析

一、简介 ApplicationContext 是Spring框架中的一个核心接口&#xff0c;它是Spring IoC容器的实现之一&#xff0c;用于管理和组织应用程序中的各种Bean&#xff0c;同时提供了一系列功能来支持依赖注入、AOP等特性。 简单来说&#xff0c;ApplicationContext 是一个大型的、…

算法学习——LeetCode力扣补充篇5 (52. N 皇后 II、649. Dota2 参议院、1221. 分割平衡字符串、5. 最长回文子串)

算法学习——LeetCode力扣补充篇5 52. N 皇后 II 52. N 皇后 II - 力扣&#xff08;LeetCode&#xff09; 描述 n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的…

Latex______自学以及安装使用教程(1)

你就按部就班的来&#xff0c;准没问题。 Step1&#xff1a;下载Tex live和Tex studio&#xff0c;安装教程参考自&#xff1a;LaTeX的安装教程&#xff08;Texlive 2020 TeX studio&#xff09; Step2: (非必要&#xff09;vscodeLatex&#xff0c;参考自:使用VSCode编写LaTe…

【C++第五课-C/C++内存管理】C/C++的内存分布、new/delete、new和delete的实现原理

目录 C/C的内存分布new/deletenew内置类型使用new自定义类型使用newnew失败 delete内置类型使用delete自定义类型使用delete new和delete的实现原理new[] 和delete[]的补充知识 定位new&#xff08;了解&#xff09;常见面试题 C/C的内存分布 频繁的new/delete堆容易产生内存碎…

JUC并发编程(七)

1、不可变对象 1.1、概念 不可变类是指一旦创建对象实例后&#xff0c;就不能修改该实例的状态。这意味着不可变类的对象是不可修改的&#xff0c;其内部状态在对象创建后不能被更改。不可变类通常具有以下特征&#xff1a; 实例状态不可改变&#xff1a;一旦不可变类的对象被…

Linux(CentOS7)安装软件方式(编译安装,yum,rpm)

目录 前言 安装方式 编译安装 下载 解压 安装 创建软链接 yum rpm 前言 在使用 CentOS 安装软件时&#xff0c;发现安装的方式有好几种&#xff0c;有官网下载 tar 包解压&#xff0c;然后自己编译安装的&#xff0c;也有直接通过 yum 命令一键安装的&#xff0c;还有…

物联网实战--入门篇之(五)嵌入式-IIC驱动(SHT30温湿度)

目录 一、IIC简介 二、IIC驱动解析 三、SHT30驱动 四、总结 一、IIC简介 不管是IIC还是串口&#xff0c;亦或SPI&#xff0c;它们的本质区别在于有各自的规则&#xff0c;就是时序图&#xff1b;它们的相同点就是只要你理解了时序图&#xff0c;你就可以用最普通的IO引脚模…

PetaLinux安装详解(Xilinx , linux, zynq, zynqMP)

1 概述 PetaLinux 工具提供在 Xilinx 处理系统上定制、构建和调配嵌入式 Linux 解决方案所需的所有组件。该解决方案旨在提升设计生产力&#xff0c;可与 Xilinx 硬件设计工具配合使用&#xff0c;以简化针对 Versal、Zynq™ UltraScale™ MPSoC、Zynq™ 7000 SoC、和 MicroBl…

Docker 哲学 - push 本机镜像 到 dockerhub

注意事项&#xff1a; 1、 登录 docker 账号 docker login 2、docker images 查看本地镜像 3、注意的是 push镜像时 镜像的tag 需要与 dockerhub的用户名保持一致 eg&#xff1a;本地镜像 express:1 直接 docker push express:1 无法成功 原因docker不能识别 push到哪里 …

【JavaEE初阶系列】——CAS

目录 &#x1f388;什么是 CAS &#x1f4dd;CAS 伪代码 &#x1f388;CAS 是怎么实现的 &#x1f388;CAS 有哪些应用 &#x1f6a9;实现原子类 &#x1f308;伪代码实现: &#x1f6a9;实现自旋锁 &#x1f308;自旋锁伪代码 &#x1f388;CAS 的 ABA 问题 &#…

详解MQTT(Message Queuing Telemetry Transport)通信机制

目录 概述 1 认识MQTT 1.1 MQTT的定义 1.2 MQTT实现原理 1.3 MQTT架构的几个概念 1.3.1 MQTT Broker 1.3.2 MQTT Client 1.3.3 发布消息 1.3.4 订阅消息 2 认识MQTT报文结构 2.1 MQTT消息体结构 2.1.1 认识主题&#xff08;Topic&#xff09; 2.1.2 认识QoS(Qualit…

判断一个数据能否同时被3和5整除

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int a 0;//提示用户printf("请输入一个整数\n");//获取用户输入数据&#xff1b;scanf("%d", &am…

WiFiSpoof for Mac wifi地址修改工具

WiFiSpoof for Mac&#xff0c;一款专为Mac用户打造的网络隐私守护神器&#xff0c;让您在畅游互联网的同时&#xff0c;轻松保护个人信息安全。 软件下载&#xff1a;WiFiSpoof for Mac下载 在这个信息爆炸的时代&#xff0c;网络安全问题日益凸显。WiFiSpoof通过伪装MAC地址&…

[图像处理] MFC载入图片并进行二值化处理和灰度处理及其效果显示

文章目录 工程效果重要代码完整代码参考 工程效果 载入图片&#xff0c;并在左侧显示原始图片、二值化图片和灰度图片。 双击左侧的图片控件&#xff0c;可以在右侧的大控件中&#xff0c;显示双击的图片。 初始画面&#xff1a; 载入图片&#xff1a; 双击左侧的第二个控件…

【uC/OS-III篇】uC/OS-III 移植到 STM32 简明教程

uC/OS-III 移植到 STM32 简明教程 一、uC/OS-III 介绍 二、获取UCOS-III源码 三、建立项目工程 四、解决工程编译报错 五、修改项目文件 下一篇博客&#xff1a; 【uC/OS-III篇】uC/OS-III 创建第一个任务&#xff08;For STM32&#xff09; 一、uC/OS-III 介绍 uC/OS-III…