一个恶意下载器的逆向分析

news2025/1/20 7:21:13

Die查壳, 发现没有加壳, 是使用VC++编写的64位程序
在这里插入图片描述
丢入VT用杀毒引擎和沙箱扫, 爆红基本可以确定其属于恶意软件:
在这里插入图片描述
查看其PE节区发现其包含了资源节, 内部可能藏有隐藏模块
在这里插入图片描述

查看一下这个程序导入的dll中发现了如下特别的地方
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

并且其还使用了LoadLibrary和GetProcAddress这两个API, 很可能有动态获取API的函数地址来达到规避杀软查杀的目的。
查看网络方面:
在这里插入图片描述
查看一下其下载或释放的一些可疑文件:
在这里插入图片描述

将其通过沙箱分析, 发现其释放了如下:

  • 一个可执行文件
  • 一个脚本文件
  • 一个文本文件
  • 一个压缩zip文件
  • 一个快捷方式
  • 通过HTTP方式与外界4个可能的IP进行通信
    在这里插入图片描述
    沙箱分析其执行行为得出:
  • 执行了bat批处理文件, 很可能是cba.bat
  • 执行了vbs脚本, 很可能是dx.vbs
  • 并且发现一个定时器可能会定时执行脚本
    在这里插入图片描述
    沙箱分析其持久化行为得出:
  • 设置注册表Run键实现自启动
  • 将exe放入Startup目录实现自启动
    在这里插入图片描述
    沙箱分析其提权行为得出:
  • 存在可能的注入行为, 因为其在探测explorer.exe
    在这里插入图片描述
    沙箱分析其对抗行为得出:
  • 可能存在的加壳行为, 查壳工具未查出
  • 利用taskkill命令这个dos命令来杀死进程
  • 可能有键盘记录的行为
  • 利用HTTP协议从服务器上下载文件到本地
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    看一些主要的释放文件:
    在这里插入图片描述
    沙箱分析出来的进程树如下:
    在这里插入图片描述
    可以确定该程序一定有下载行为, 但在导入dll中并没有找到相对应的库比如: wininet.dll或者ws2_32.dll之类的,猜测其可能是动态加载了, 由于该软件主要通过HTTP来下载, 而该方式最快捷的方式属于URLDownloadToFile, 在动态调试中查找该函数字符串, 果然找到并进而确定其地址
    在这里插入图片描述
    确定地址后转到该处查看, 果然发现了利用HTTP协议进行下载, 其加载了urlmon.dll并获取URLDownloadToFile
    在这里插入图片描述
    获取该处后不断对调用栈进行回溯, 发现了主要的函数, 并将其命名为MalwareMainFunc, 下面对MalwareMainFunc进行分析
    在这里插入图片描述
    其首先获取了系统临时目录:
    在这里插入图片描述
    接着拼搭好并遍历临时文件目录下的文件
    在这里插入图片描述
    其计算了临时目录下的文件数并与5做对比, 如果临时文件数小于5则会跳过退出过程。具体原因未知
    在这里插入图片描述
    调用GetTickCount记录系统启动时间, 经对比如果小于1小时则退出过程, 如果超过1小时则进入主要功能函数DownloadInItMain。
    在这里插入图片描述
    DownloadInItMain在栈上存放了一段乱码:
    在这里插入图片描述
    并在内部使用解密算法对其进行解密:
    在这里插入图片描述
    解密完后是如下字符串:
    在这里插入图片描述
    利用上面生成的解密内容生成一串字符串
    在这里插入图片描述
    调用CreateDirectory生成一个将该字符串作为目录名的目录
    在这里插入图片描述
    可以看到在C:\Users\Public\Pictures目录下创建了一个目录
    在这里插入图片描述
    目录的名称是随机的
    在这里插入图片描述
    接着在栈上又放了一些字符串
    在这里插入图片描述
    接着对这段字符串进行了加密, 生成的字符串有点像Base64加密:
    在这里插入图片描述
    接着将另一端字符串解密成url的格式字符串
    在这里插入图片描述
    接着利用base64解密一段加密字符串:
    在这里插入图片描述
    总之上面的目的就是为了进行将一些重要敏感的字符串进行解密获取, 最终获取了如下url
    在这里插入图片描述
    接着拼搭处2.cnd的绝对路径
    在这里插入图片描述
    接着利用URLDownloadToFile从http://45.204.83.138:99/index.php?id=@g中下载了配置文件2.cnd到新创建的目录下
    在这里插入图片描述
    由于服务器问题, 所以发现下载失败了
    在这里插入图片描述
    接着会调用Read2_cndConfigFileWrapper函数来读取2.cnd配置文件
    在这里插入图片描述
    看一下Read2_cndConfigFileWrapper内部, 其在创建的目录中尝试打开并访问2.cnd文件并挪动文件指针, 但由于该文件不存在所以失败
    在这里插入图片描述
    在这里插入图片描述
    这里继续分析内部代码可以发现代码不断尝试读取2.cnd
    在这里插入图片描述
    其中ReadOpers中包含了大量SetFilePointer和ReadFile操作, 不断进行读取。可以判断出2.cnd是一个配置文件
    在这里插入图片描述
    第一次读取失败后还会再次读取
    在这里插入图片描述
    接着拼搭出一个如下图所示的exe绝对文件路径
    在这里插入图片描述
    接着用Speedld.exe对后面的名字ugkCyYjV.exe进行替换, 这里发现Speedld.exe并没有通过URLDownloadToFile下载,构造Speedld.exe的绝对路径:
    在这里插入图片描述
    在这里插入图片描述

利用MoveFileEx来把Speedld.exe该名称重命名上一步拼成的名字
在这里插入图片描述
发现改名失败, 因为不存在该文件
在这里插入图片描述
接着再次尝试改名:
在这里插入图片描述
如果这里调用MoveFileEx失败改名失败则会进入无限循环不断改名, 直到改名成功为止, 改名成功后会调用ShellExecute将该进程打开,并以隐藏方式执行。
在这里插入图片描述
在这里插入图片描述
最后其通过调用TerminateProcess将自身进程结束
在这里插入图片描述
(完)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用aardio写一个基于pyocd的单片机下载器

1 新建工程 最开始本来是打算调用pyocd 的python api的,但是一个是内嵌包一直安装出问题,一个是考虑到本地pack不想重复安装和管理,于是就转做pyocd的前端了,也就是直接调用pyocd,根据返回数据解析,然后执…

NumPy之矩阵、向量、线性代数等的操作

NumPy之矩阵、向量、线性代数 NumPy矩阵和向量矩阵向量创建向量创建矩阵访问元素转置矩阵矩阵加减乘除矩阵向量乘法矩阵求逆矩阵的迹向量点积向量范数 NumPy线性代数计算矩阵乘积计算矩阵的逆解线性方程组 NumPy矩阵和向量 矩阵 在NumPy中,矩阵可以看作是一个二维数…

【Django】Django ORM Cookbook--20230427

英文版http://books.agiliq.com/projects/django-orm-cookbook/en/latest/ 中文版https://django-orm-cookbook-zh-cn.readthedocs.io/zh_CN/latest/query.html 查询和筛选 1. 如何查看Django ORM查询集的原生SQL? >>> queryset Event.objects.all() &…

JVM内存模型和结构

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一个虚构出来的计算机,有着自己完善的硬件架构,如处理器、堆栈等。 为什么需要JVM? Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使…

QT笔记——第三方开源库停靠窗口类似QDockWidget

我们想要一个类似于Visual Studio 2019的dockwidget 停靠窗口 一个开源库:类似于Visual Studio 2019 dockwidget 的开源库 下载,解压下来 使用vs qt 插件打开src文件夹下的 src.pro 生成如下: 我们来运行它的例子: 使用vs qt …

【Vue工程】001-Vite 创建 Vue-TypeScript 项目

【Vue工程】001-Vite 创建 Vue-TypeScript 项目 文章目录 【Vue工程】001-Vite 创建 Vue-TypeScript 项目一、环境二、创建项目1、pnpm 创建 Vite 项目2、设置项目名3、选择vue4、选择 TypeScript5、创建完成6、安装与启动7、访问 http://localhost:5173/8、默认生成的项目结构…

LeetCode0718.最长重复子数组 Go语言AC笔记

时间复杂度:O(n),空间复杂度:O(n) 解题思路 动态规划思想。令dp[i][j]表示两数组以nums1[i]和nums2[j]为起始元素的公共前缀最大长度,所以如果nums1[i]和nums2[j]元素相同,那么dp[i][j]dp[i1][j1],否则dp[…

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCVSharp合并偏振相机4个角度的图像并显示(C#)

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCVSharp合并偏振相机4个角度的图像并显示(C#) Baumer工业相机Baumer工业相机偏振相机的技术背景代码案例分享1:引用合适的类文件2:回调函数里联合BGAPI SDK和OpenCVSharp合并偏…

Leetcode刷题日志2.0

目录 前言: 1.数字的补数 2.最大连续 1 的个数 3.下一个更大元素 I 4.斐波那契数 5.提莫攻击 6.557. 反转字符串中的单词 III 前言: 今天就分享一下最近刷到的leetcode习题吧 ,编程语言:Python3。废话不多说&#xff0…

【备战蓝桥杯国赛-国赛真题】2022

思路 题目的一是就是从1~2022这2022个数中挑选十个数,使其的总和为2022,如果做过背包问题,那么思路就很好出来了,每个数无非就是选与不选,每个数有他们的权值,权值就等于它们本身的值,抽象成背…

java调用百度的接口获取起始位置的距离

需求:校验收货地址是否超出配送范围 重要: 做该需求的思路就是通过卖家和卖家具体的地址信息,来获取到二者的经纬度, 此时可以使用百度的 "地理编码服务",即可获取对应的经纬度 第二步,就是通过二者的经纬度,按照百度接口的要求,发送,即可获取到包含二者距离的JSON串…

循环语句for

for循环 循环和遍历的概念 循环(Loop)和遍历(Traversal)是两个在计算机编程中经常使用的概念。 循环是一种重复执行一段代码的结构。通过循环,可以在满足一定条件的情况下,多次执行相同的代码。循环语句…

mysql8.0最新版本超详细安装教程

mysql8.0最新版本超详细安装教程 第一步: 百度搜索MySQL 第二步:进入MySQL官方网站后点击DOWNLOADS 第三步:下拉页面找到图中标识 并点击 第四步:点击图中标识 第五步:点击下载第一个 第六步:点击图中标识 第七步:在D盘创建mysql文件夹 第八步:将下载好的mysq压缩包放入到新建…

深度学习:Opencv的blobFromImage是如何工作的

文章目录 1 OpenCV中blobFromImage函数简介2 blobFromImage是如何工作的2.1 介绍2.2 blobFromImage 的工作流程2.3 blobFromImage 和 blobFromImages1 OpenCV中blobFromImage函数简介 如果训练模型时图像的尺寸 与实际使用的图像尺寸不一致,需要对图像尺寸进行变换; blobFr…

第一次使用服务器部署项目

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

HCIA-RS实验-STP和RSTP(2)

接上一篇文章;其他的不多说,新建一个新的配置设备;如果接上一个实验的配置的话,建议先把所有配置删除后再执行;新的拓扑也与上一个实验一致; 目录 创建新配置 配置RSTP 查看stp版本 配置边缘端口 …

如何防止重复下单

一、问题背景 最简单的:DB 事务。如创建订单时,同时往订单表、订单商品表插数据,这些 Insert 须在同一事务执行。 Order 服务调用 Pay 服务,刚好网络超时,然后 Order 服务开始重试机制,于是 Pay 服务对同…

算法基础第一章

算法基础 第一章:基础算法1、排序2、二分查找3、大数据量的加法和减法(高精度加减法)3.1、加法3.2、减法 4、前缀和4.1、一维前缀和4.2、二维前缀和 5、差分5.1、一维差分5.2、二维差分 6、双指针7、位运算7.1、lowbit的应用 8、离散化9、区间…

基于c与数据库实现的电子词典

1.搭建客户端与服务器,客户端使用多线程方式,主线程跑发送信息给服务器功能,分支线程跑循环接收服务器信息功能 客户端代码: //TCP客户端的搭建 int tcp_kehuduan() {//创建字节流套接字cfd socket(AF_INET,SOCK_STREAM,0);if(c…

【TCP服务器的演变过程】C++使用libevent库开发服务器程序

C使用libevent库开发服务器程序 一、引言二、libevent简介三、Libevent库的封装层级3.1、reactor对象封装struct event_base3.2、事件对象struct event3.3、struct bufferevent对象3.4、evconnlistener对象3.5、事件循环3.6、事件处理 四、完整示例代码小结 一、引言 手把手教…