记一次2022某地HVV中的逆向分析

news2024/11/23 23:42:49

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

前言

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

image-20230104172700286

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

逆向分析

查壳工具DIE看是否加壳

image-20230103141604176

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

image-20230103142926987

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

image-20230103154754832

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

image-20230103154954253

【----帮助网安学习,以下所有学习资料免费领!加weix:yj009991,备注“ csdn ”获取!】
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

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

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

image-20230103173426982

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

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

image-20230104105921636

FindResourcew地址为00000001400015C4

image-20230104110146017

在x64dbg中找到起始地址00007FF638B915C4

image-20230104110245628

根据偏移量跳转下断点

image-20230104110537142

image-20230103180338368

F7按步调试

image-20230104113546489

loadResource函数中追踪内存

image-20230104113636171

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

image-20230103175035753

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

image-20230104132427466

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

image-20230104134458824

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

image-20230104161509292

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

image-20230104162423546

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

image-20230104163015456

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

image-20230104163319151

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

image-20230104163411764

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

image-20230104163924966

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

小结

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

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

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

相关文章

云视频会议系统私有化实践

点击上方“LiveVideoStack”关注我们▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息编者按:云视频会议系统支持多服务器动态集群部署,并提供多台高性能服务器,大大提升了会议稳定性、安全性、可用性。视频会议为用户大幅提高沟…

(Java高级教程)第三章Java网络编程-第一节2:网络编程必备网络知识2之网络协议分层

文章目录一:生活中的协议分层(1)生活中的分层1——汉堡包(2)生活中的分层2——打电话二:网络分层(1)OSI七层模型(2)TCP/IP分层模型三:OSI参考模型…

前端基础(六)_流程控制语句(if、if-else、if-else嵌套、switch)

流程控制语句主要分为 : 顺序结构:即按顺序执行代码 ;条件选择结构 ( 分支语句 ):包括 if-else 以及 switch;循环结构:包括 for循环,while,do-while,for-in 等;其他语句: break 和continue。 一、流程控制…

Java学习(23)Java一维数组概述

什么是数组 数组是相同类型的数据按顺序组成的一种引用数据类型。 数据类型分为基本数据类型和引用数据类型,引用数据类型分为类、接口、数组。要学习的内容 一维数组的声明、创建、初始化、元素的引用、长度。数组声明 语法格式: 数据类型[] 数组名; 数…

卡尔曼滤波原理公式详细推导过程[包括引出]

卡尔曼滤波在很多项目中都有用到,但是对于原理却很少有详细分析,而只是直接应用,在看完b站up主DR_CAN视频推导后自行推导一遍和查看其他资料后进行总结,将从最初的递归算法,利用数据融合,协方差矩阵&#x…

[vp] 2021 山东省赛 CDGHM

目录前言G. Grade Point Average ( 难度有先后)M. Matrix ProblemH. Adventurers GuildD.Dyson BoxC. Cat Virus前言 打满 2个小时30分钟 基本都在做题 体验非常好 传送门 : https://codeforces.com/gym/103118 G. Grade Point Average ( 难度有先后) 题意 : 让你求sum/ns…

UG/NX二开Siemens官方实例解析 4.4 EX_Curve_ProjCurves(创建投影曲线)

前言 本系列文章主要讲解NXOpen UF API(简称ufun函数)的使用,之前看教学视频大都建议用ufun进行开发,这里西门子官方还专门给了一套系列文章来讲,说明官方也是特别推崇ufun。 本人从事二开也有一段时间了,我…

干货 | 测试人职场晋升“潜规则”:15 年经验资深测试经理的职场忠告

大家好,我是云胖虎,有近 15 年工作经验,在测试专业上擅长的方向是自动化测试,测试工具平台开发和探索测试相关的一些领域,也拿到过项目管理和敏捷教练的认证,目前是在某知名金融银行企业担任技术经理。今天…

dataworks调度问题

文章目录名词解释月调度关于空跑名词解释 业务日期 定时日期 - 1 自定义参数示例: 月调度 调度详情: 重要 使用补数据功能对月调度任务执行补数据操作时,请注意补数据选择的为业务日期 ,业务日期定时调度日期-1。 例如&#xf…

初始C++(一)

文章目录前言cout的用法cin的用法endl的用法一.命名空间1.:: (域作用限定符)2.命名空间定义3.命名空间的使用4.命名空间的一些其它使用5.全局展开6.部分展开二.缺省参数2.1全缺省2.2半缺省前言 既然这篇文章叫初始C,看我文章的应该和我一样,基本是个小白…

React-Router6路由相关二(路由传参、编程式路由导航、路由相关hooks)(八)

系列文章目录 第一章:React基础知识(React基本使用、JSX语法、React模块化与组件化)(一) 第二章:React基础知识(组件实例三大核心属性state、props、refs)(二&#xff0…

ffmpeg vs2017录制vp9格式的桌面视频

ffmpeg本身不支持vp8,vp9;若要支持,则需要自己事先编译好vpx库,然后在ffmpeg中显式支持vpx库。 windows下采用mingw编译器编译vpx;本人采取的是MSYS2,并且本人编译vpx和ffmpeg时,编译的都是静态库&#xf…

【云原生】在Ubuntu18/20上部署Kubernetes/k8s集群详细教程——亲测可用!!网上其他教程均有问题!

在Ubuntu18/20上部署Kubernetes/k8s详细教程一、设置Docker二、安装Kubernetes第 1 步:添加Kubernetes签名密钥第 2 步:添加软件存储库第 3 步:Kubernetes 安装工具三、部署 Kubernetes步骤 1:准备 Kubernetes 部署步骤 2&#xf…

怎么找回笔记本的数据?笔记本数据恢复,6个教程

“我不小心删除了笔记本电脑里面的重要数据,请问被误删的数据还可以恢复吗?如果可以恢复,我应该怎么恢复笔记本里面的数据?” 很多人在使用笔记本电脑的时候,经常误删一些数据,有时是工作文档,…

我是如何将同事的代码改成DDD风格的

DDD是领域驱动设计的简写。前段时间听群友说行业里少有DDD的代码案例,进而对DDD没有一个感性的认识。我想这是行业里普遍存在的现象吧。所以,就有了写此文的想法。文章标题说的是“同事的代码”,其实只是为了让此文更具传播,没别的…

组件的生命周期、vue2中使用axios、插槽

目录 一、组件的生命周期 1、什么是组件的生命周期 2、生命周期函数 3、生命周期的阶段划分 4、钩子函数 5、keep-alive组件 6、生命周期函数: 二、vue2中使用axios 1、axios:是一个基于Promise的网络请求库。既可以在node.js(服务器…

【MySQL】1. 了解数据库以及MySQL安装

了解数据库和SQL什么是数据库为什么使用数据库MySQL下载,安装,配置客户端连接MySQL方法一方法二SQLSQL分类SQL的基本规则命名规则最后大家好, 我是路不停_。 上学期学校学习了MySQL之后,课后也没有做很多总结,加上课时紧凑,后续考试也是考前草草备考了一下. 最近读了本MySQL必知…

C 程序设计教程(03)—— C 语言的数据类型(一):基本数据类型

C 程序设计教程(03)—— C 语言的数据类型(一):基本数据类型 一、数据类型简介 C 语言提供了丰富的数据类型,每一个常量和变量必须属于某一种数据类型。C 语言中的数据类型如下: &#xff08…

基础数学(八)——期末考试复习

文章目录考试要求考试内容简单复习插值拟合和回归数值积分直接法迭代法非线性方程求根微分方程数值解去年考题第一题,插值(12分)第二题,回归和拟合第三题,数值积分第四题,线性方程组求解第五题,…

MGRE实验配置(华为)

华为ENSP的MGRE实验: 建立好拓扑图 之后就是对各个路由器的配置: R2配置: int s3/0/0 link-protocol hdlc 更改接口为hdlc认证 ip address 12.1.1.2 24 int lo0 ip add 2.2.2.2 24 int s3/0/1 [r2-Serial3/0/1]ip address 23.1.1.2 24 [r2-Se…