实战|记一次2022某地HVV中的木马逆向分析

news2024/11/27 12:35:57

声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。

前言

事情是这样的,国庆前期某地HVV,所以接到了客户通知他们收到了钓鱼邮件想要溯源

310879d47aa27b76ab481817e7d0a96f.png

直接下载文件逆向分析一波。钓鱼邮件,图标什么的做的还是挺逼真的,还真的挺容易中招的,但是这里的bug也明显,丹尼斯没有客户端,百度一下能够辨别这是钓鱼的。

逆向分析

查壳工具DIE看是否加壳

b56f202304ec0dd95f1992f9f018a60c.png

当然其他查壳工具也可以exeinfope等,看到的东西不一样

c4524dd6de2fd78f63110d6662b6d8fa.png

可以看到是64位的应用,无壳,IDA静态分析

da9010b72d76b79b57580512ed8af052.png

直接进入主函数,直接F5逆向main函数c代码

2bb588789552a85769778f4a5a9fc01c.png

主函数中使用的函数比较少

int __cdecl main(int argc, const char **argv, const char **envp)
{
  HRSRC ResourceW; // rbx
  HGLOBAL Resource; // rbp
  signed int v5; // eax
  size_t v6; // rsi
  size_t v7; // rcx
  void *v8; // rdi

  ResourceW = FindResourceW(0i64, (LPCWSTR)0x66, L"DATA");
  Resource = LoadResource(0i64, ResourceW);
  v5 = SizeofResource(0i64, ResourceW);
  v6 = v5;
  v7 = (unsigned int)(v5 + 1);
  if ( v5 == -1 )
    v7 = -1i64;
  v8 = malloc(v7);
  memset(v8, 0, (int)v6 + 1);
  memcpy(v8, Resource, v6);
  sub_140001070(v8);
  return 0;
}

简单来看就是先查找资源,DATA应该为加密的shellcode,加载资源赋

Resource,计算资源空间大小,malloc分配空间大小,memset 将申请的内存初始化为0,memcpy函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,跟进sub_140001070

f573cd2e863ad210bf6b7c427bc826c2.png

可以看到反汇编之后在第52行创建进程,在56行分配虚拟内存,60行写入内存,61行创建线程,这里创建的线程即为恶意进程。这里使用动态调试x96dbg验证我们的分析另外,需要分析一下外联的地址以及注入的进程是什么,64位的应用使用x64dbg,依次下断点

简单计算一下地址,IDA的起始地址为00000001400015C4

07798dce4620c67e9ad2f55389823916.png

FindResourcew地址为00000001400015C4

e89e20c5b459a68af1462ba36e29f22d.png

在x64dbg中找到起始地址00007FF638B915C4

b288004b04d0f4acb7910c1fe795fe46.png

根据偏移量跳转下断点

cdbc84f60686260347f9c24f8f560621.png

2d0674d26d9b04d43737eab6245befac.png

F7按步调试

25e6481452fe4869590b0662ee0d8bb5.png

loadResource函数中追踪内存

cb48e4d27ad9ed8e99230ff202dc392a.png

这里加载的是DATA的内容,即为加密的shellcode,我们直接用Resouce hacker直接查看一下恶意进程dennis.exe的DATA内容

db498ccf98686987b768782067e6aab5.png

说明我们的分析没有问题,继续向下调试

dc61ef6e8e07cdd6cc78beab0b84b85c.png

因为这个应用比较小,所以代码量也不大,f5反编译之后可以直接找到函数下断点,这里不需要计算偏移量了,计算方法跟上面差不多。

429091dd58b8585096527e0b3789e6c1.png

调试走到这里,可以发现走的是循环

137318a25ccdf2a10174642fd42ddccb.png

可以明显的看到有xor异或指令,这里对shellcode即DATA的内容做异或,异或的对象为byte ptr指向的地址,内存数据为key,那么key的内容为

26a61dee2e78fafafdbc1876ff5b5797.png

因为是按字节异或所以这里异或的内存应该为78,整个循环异或的key应该为12345678,shellcode加密的时候应该用的key为12345678加密的,所以这里解密使用key去解密,跳出循环RIP一下,到断点CreateProcessW

e7435741b0a9afd043d6f8eec85d978c.png

可以清晰的看到注入的进程为C:\\windwos\\system32\\svchost.exe,向下调试

c902593477e855c25ee3e2c77b918a9c.png

申请虚拟空间内存,然后向下为写入内存

3fd615cdf0556181cd9dfad41ae1869d.png

解密完成后写入内存,所以在这里是可以看到外联的ip地址或者说是域名的,这里使用的是ip,查询之后发现是TX云的服务器。

bb126eb6e1460fa48946da58f24c2059.png

在向下就是创建进程起服务svchost.exe

小结

钓鱼使用的服务器ip地址是TX云怕是报警之后应该可以溯源到本人的真实身份了吧,毕竟现在国内运营商都需要实名,如果用的国内域名也都是实名的不管是否有CDN,不过这种级别的HVV也没必要。第一次逆向分析,多亏了大佬指点,步履维艰,如有错误欢迎指出。

原创稿件征集

征集原创技术文章中,欢迎投递

投稿邮箱:edu@antvsion.com

文章类型:黑客极客技术、信息安全热点安全研究分析等安全相关

通过审核并发布能收获200-800元不等的稿酬。

更多详情,点我查看!

f1f88dedca5b8ccebd35bd8dff42a207.gif

靶场实操,戳“阅读原文“

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

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

相关文章

电子模块|光照强度传感器模块 GY-302及其驱动(arduino、STC51、STM32)

电子模块|光照强度传感器模块 GY-302及其驱动(arduino、STC51、STM32)实物照片模块简介模块特点原理图驱动程序arduinoSTC51STM32实物照片 模块简介 BH1750是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强…

【Linux】文件操作、文件描述符和重定向

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉重新谈论文…

【数据结构】5.1 树和二叉树的定义

前言 数形结构的关系是 1 对 n 的,树的每个元素后面都可以有多个后继,但是只能有 1 个前趋。 树形结构(非线性结构) 结点之间有分支具有层次关系 5.1.1 数的定义 树(Tree)是 n (n > 0&…

java中javaSE与javaEE的区别

javaSE是什么? 怎么说吧,可以理解为javaSE是java的基石,如果将java程序想象成一座高楼大厦,那么javaSE就是地基。 官方的解释: Java SE(Java Platform,Standard Edition) Java SE 以…

实验室设计基本原则SICOLAB

实验室设计基本原则SICOLAB实验室设计、实验室建设施工SICOLAB实验室布局必须符合实验流程的规律,从样品接收、样品暂存、试剂和耗材储存、前处理和准备、样品分析测试、清洗到废物回收和处理,都必须有一个清晰的流程。要区分人流和物流,以及…

SQL DELETE 语句

DELETE 语句用于删除表中的记录。 SQL DELETE 语句 DELETE 语句用于删除表中的行。 SQL DELETE 语法 DELETE FROM table_name WHERE condition; 参数说明: table_name:要删除的表名称。condition:删除条件,用于指定哪些数据要…

小程序开发经验分享(4)-框架的选择

3个小程序开发框架 小程序开发公认的3个小程序开发框架: 原生、wepy、mpvue。3者个有利弊: 原生框架:微信的亲儿子,可直接在微信开发者工具中开发,方便调试,结构直接对应微信文档,框架无缝升级,最快支持最新版本的开发基础库。缺点是原生开发提供的开发方式比较朴素,…

2023年网络安全比赛--网络安全事件响应中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.黑客通过网络攻入本地服务器,通过特殊手段在系统中建立了多个异常进程,找出启动异常进程的脚本,并将其绝对路径作为Flag值提交; 2.黑客通过网络攻入本地服务器,通过特殊手段在系统…

2022年12月国产数据库大事记-墨天轮

本文为墨天轮技术社区整理的2022年12月国产数据库大事件和重要产品发布消息。 目录 12月国产数据库大事记(时间线)产品/版本发布兼容认证排行榜新增数据库厂商活动相关资料 12月国产数据库大事记(时间线) 12月2日,…

linux环境tomcat发布系统

目录 1、上传需要发布的war 包 2、查看当前java线程 3、杀死需要启动的服务的java线程 3、修改上传的war包名称,删除原来的代码包 4、重新启动程序 5、查看启动日志 1、上传需要发布的war 包 通过XFTP上传war 包到 服务器 tomcat -->webapps 目录下。 注…

测试开发 | 相比 Selenium,Web 自动化测试框架 Playwright 有哪些强大的优势?

Playwright 是由微软的研发团队所开发的一款 Web 自动化测试框架,这个框架具有多平台、跨语言的特点。除了基本的自动化测试能力之外,同时它还具备非常强大的录制功能、追踪功能。以下是 Playwright 与 Selenium 的对比。 由此可见,Playwrigh…

Nginx编译安装vts监控模块

目录 1、环境准备 2、编译安装Nginx源码 2.1、安装依赖 2.2、编译安装Nginx 2.3验证Nginx安装 3、Nginx添加配置 3.11、Http模块下面添加 3.1.2、添加status访问页面 4、启动Nginx 4.3、访问前端页面 1、环境准备 参考Github vts模块参考Github nginx-1.20.2.tar.…

《Kotlin核心编程》笔记:val 和 var 字符串

Kotin重要特性:类型推导:定义变量不再需要显示声明类型,由编译器自动推导出变量的类型 如 val a "hello” val b 5 val c 10L表达式函数: fun sum(x: Int, y: Int) x y // 省略了{},Kotlin支持这种用单行表达式与等号…

Git——git分支操作

1 什么是分支 在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独 分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时 候,不会影响主线分支的运行。对于初…

ArcGIS基础实验操作100例--实验52导出点要素的坐标值

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验52 导出点要素的坐标值 目录 一、实验背景 二、实验数据 三、实验步骤 (…

flutter:如何实现局部导航管理?

引言 今天,小编给大家分享如何在 flutter 中实现 ‘局部导航’。开始之前我们先来统一一下关于 局部导航 的概念。 局部导航是什么? 我们在 flutter 中使用 navigator 来管理 app 的页面堆栈,主要包括 push、pop 这两种操作。而当我们UI设…

gitee实现项目托管

一、下载git官网链接:Git - Downloads安装参考:https://blog.csdn.net/weixin_44950987/article/details/102619708二、登录gitee(码云),添加SSH公钥2.1、生成SSH公钥过程2.2、打开刚刚下载的git 然后跟着步骤来:2.3、…

C程序设计教程(02)—— 概述部分练习题

C程序设计教程(02)—— 概述部分练习题 一、填空题 1、结构化程序设计采用顺序结构、(分支结构或选择结构)和循环结构等三种基本结构编写程序。 2、程序由(一个或多个函数)组成,其中必须有且…

2.ISAAC 环境配置

ISAAC 环境配置 本文档介绍了如何开始使用 Isaac SDK 和 Isaac Sim 进行开发。 完成本文档中的步骤后,您应该准备好开始使用 Isaac SDK 开发机器人应用程序。 预安装 Isaac 目前仅支持 Ubuntu 18.04 LTS 从您的工作站进行开发和模拟。 请确保在您的工作站上安装最…

机器学习记录

概念辨析: 人工智能包含机器学习,机器学习包含深度学习 机器学习 机器学习约等于:looking for Function 深度学习:Function就是一个类神经网络 如果输出是一个数值就就叫回归 如果输出是几种类别就是分类 自监督学习为机器学习…