实战|记一次2022某地HVV中的木马逆向分析
创始人
2024-05-07 03:59:37
0

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

前言

事情是这样的,国庆前期某地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; // rbxHGLOBAL Resource; // rbpsigned int v5; // eaxsize_t v6; // rsisize_t v7; // rcxvoid *v8; // rdiResourceW = 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

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

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...