首页
社区
课程
招聘
[原创]从0分析一款经典的感染型远控木马
发表于: 2017-5-20 19:27 20548

[原创]从0分析一款经典的感染型远控木马

2017-5-20 19:27
20548

          终于毕业考试完了 经过节奏紧张的培训,一直没有好好分析一个病毒或者一个完整的软件,用了4天时间,分析了一款经典的感染型远控木马,期间因为调试服务,调试DLL花费了不少时间 稍后整理完也会首发看雪,在咱们看雪已经潜水1年多了 之前一直觉得没什么有营养的东西可以和大家分享,希望这篇文章能给想分析病毒入门的童鞋带来帮助,水平有限,有不足的地方欢迎指点.

还有个同学跟我一起分析了 我没做流程图 此流程图由年轻帅气可爱的 老朱同学赞助:

流程图_start:

   病毒首先使用RegOpenKeyExW函数读取注册表中【HKEY_LOCAL_MACHINE\system\\CurrentControlset\\services\\Ghijkl Nopqrstu Wxy】

个键项如果键项不存在,则创建病毒的系统服务,流程图大体如下:






老朱同学的流程图 _end

1.1 样本信息

病毒名

3601.exe

样本大小

72KB

分析时间

2017-5-16

MD5:

96043b8dcc7a977b16a2892c4b38d87f

加壳情况:

UPX(3.07)

 

1.2 测试环境及工具

测试平台

虚拟机WIN7

使用工具

OLLYDEBUG+IDA6.8

 

LordPe

 

火绒剑

 

1.3 目标概述

病毒母体

3601.exe

96043b8dcc7a977b16a2892c4b38d87f

 

释放的文件

vmnfmc.exe

8a1716b566d20b77c20647d0f760b01c

随机字母组成

释放的DLL

Hra33.dll

 

资源文件 主要存放2个资源 服务名和病毒EXE

 

2.具体行为分析

2.1 主要行为

病毒母体

通过创建系统服务 释放文件(随机名称.exe)到系统目录,删除自身.释放的目标EXE服务的方式开机自启动.

释放的病毒

开启多线程进行 通过局域网共享病毒 连接服务器 进行病毒的自我更新 远程指令 等操作

释放的DLL

Hra33.dll 资源文件 主要存放2个资源 服务名和病毒EXE 具有感染文件的功能

远程服务器

Sbcq.f3322.org:9898     www.520123.xyz:9999  www.520520520.org:9426



2.1.1 恶意程序对用户造成的危害

将病毒程序通过弱密码感染到局域网主机 at 计划任务

从服务器下载任意EXE程序并运行

从服务器获得任意URL在本地打开

Vmnfmc.exe 释放 C:\WINDOWS\system32\hra33.dll并载入 创建三个线程

遍历到的是EXE文件则拷贝病毒模块文件lpk.dll到该EXE文件的文件目录下进行DLL劫持

如果上面对用户电脑的文件遍历 遍历到的是RAR或者ZIP格式的压缩包文件 则对压缩包里面的EXE文件进行DLL劫持 拷贝病毒模块文件lpk.dll到压缩包里的EXE文件目录下

如果当前运行的病毒模块不是病毒文件lpkdll则动态加载系统的lpk.dll并进行lpk.dll文件的初始化 dll直接转发的方式劫持系统文件lpk.dll做准备

 

2.2 恶意代码分析

Step 1. 将目标程序载入PEID 查看是USP的壳 利用ESP定律 
 

脱壳成功

Step 1.载入IDA分析 Main函数 为方便阅读 以下均是伪代码

       WSAStartup(0x202u, &WSAData);

if (Check_Server())                         // 判断是否有注册表服务是否存在

{

v7 = 0;

v8 = 0;

ServiceStartTable.lpServiceName = "Ghijkl Nopqrstu Wxy";

ServiceStartTable.lpServiceProc = (LPSERVICE_MAIN_FUNCTIONA)sub_40561A;

StartServiceCtrlDispatcherA(&ServiceStartTable);

}

else                                          // 母体病毒进入 开始初始化

{

Init_virs(

(int)"Ghijkl   Nopqrstu Wxy",

(int)"Ghijkl   Nopqrstu Wxyabcde Ghij",

(int)"Ghijklmn   Pqrstuvwx Abcdefg Ijklmnop Rst");

if (ReName)

{

DeleteSelf();

ExitProcess(0);

}

}

第一次打开病毒文件  会进入Init_virs

先载入各种操作服务和注册表的函数

GetModuleFileNameA(0u, &Filename, 0x104u);

GetWindowsDirectoryA(&Buffer, 0x104u);

Bufflen = strlen(&Buffer);

if (strncmp(&Buffer,   &Filename, Bufflen)) //判断是否需要重新生成一个病毒 名称是随机的

{

charA =   Get_Randchar(26u) + 'a';

charB =   Get_Randchar(26u) + 'a';

charC =   Get_Randchar(26u) + 'a';

charD =   Get_Randchar(26u) + 'a';

charE =   Get_Randchar(26u) + 'a';

charF =   Get_Randchar(26u);

wsprintfA(&strExeName, "%c%c%c%c%c%c.exe", charF + 'a',   charE, charD, charC, charB, charA);

mbscat(&Buffer, L"\\");

mbscat(&Buffer, &strExeName);

((void(__stdcall *)(CHAR *, CHAR *,   _DWORD))CopyFileA)(&Filename, &Buffer, 0);

memset(&Filename, 0, 0x104u);

mbscpy(&Filename,   &Buffer);

ReName = 1;

}

载入服务 修改服务描述 , 修改服务配置 , 开启服务等操作

if (ReName)

{

DeleteSelf();

ExitProcess(0);

}

DeleteSelf()函数实现细节

GetModuleFileNameA(0, &Filename,   0x104u);     // 获得当前EXE路径

GetShortPathNameA(&Filename,   &Filename, 0x104u);// 获得文件名

GetEnvironmentVariableA("COMSPEC", &Buffer, 0x104u);// 获取CMD的路径

((void(__stdcall *)(char *, const char *))lstrcatA)(&Shellcommand, "/c del ");

((void(__stdcall *)(char *, CHAR *))lstrcatA)(&Shellcommand, &Filename);

((void(__stdcall *)(char *, const char *))lstrcatA)(&Shellcommand, " > nul");// /c   del C:\xxxx\3601_U~1.EXE > nul

v19 = &v26;

v20 = &Buffer;

v16 = '<';

v18 = 0;

v26 = 'O';

v27 = 'p';

v28 = 'e';

v29 = 'n';

v30 = 0;

v21 =   &Shellcommand;

v22 = 0;

v23 = 0;

v17 = 64;

if (ShellExecuteEx(&v16))                   // 运行删除自身的指令

{

SetPriorityClass(hProcess, 64u);            // 设置线程优先级

hProcessa = GetCurrentProcess();

SetPriorityClass(hProcessa, 256u);

v2 = GetCurrentThread();

SetThreadPriority(v2, 15);

SHChangeNotify(SHCNE_DELETE, SHCNF_PATHA, &Filename, 0);// 删除当前进程的EXE程序

result = 1;

}

 

 这也就完成了 释放新病毒 删除自身的操作

刚刚分析的是病毒第一次运行的操作,现在进入病毒第二次运行的操作

ServiceStartTable.lpServiceName = "Ghijkl Nopqrstu Wxy";

ServiceStartTable.lpServiceProc = (LPSERVICE_MAIN_FUNCTIONA)sub_40561A;

StartServiceCtrlDispatcherA(&ServiceStartTable)

进入回到函数

先设置服务状态 后面加载当前函数需要使用的函数

木马程序主体框架结构:

if (CreatemutexA(0, 0, "Ghijkl   Nopqrstu Wxy")&& SetServiceStatus() == 183) // 创建互斥体  存在的话 服务退出

{

exit(0);

}

EnumResource_start();                         // 释放DLL资源到C:\WINDOWS\system32\hra33.dll

wsprintfA(&pFileName, "hra%u.dll", '!');

Insert_Result(&pFileName);                    // 打开hra33.dll  拷贝2个资源到到hra33.DLL 一个是服务名 一个是EXE自身

Load_hra33();                                 // 加载hra33.dll    具有DLL劫持功能 具体实现 EXE同目录创建一个LPK.DLL

CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Shared_exe_LAN, 0, 0, 0);// 通过密码库 正确的话 就将木马程序 共享局域网

Sleep(500u);

WSAStartup(0x202u, &WSAData);

上传的附件:
收藏
免费 5
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  lipss   +1.00 2017/05/24
最新回复 (20)
雪    币: 365
活跃值: (126)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
2
大牛好厉害
2017-5-20 19:42
0
雪    币: 1404
活跃值: (4263)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
3
支持老宋
2017-5-20 19:42
0
雪    币: 236
活跃值: (67)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
共同学习  共同进步
2017-5-20 19:43
0
雪    币: 4634
活跃值: (936)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
5
嘻嘻,前排围观加精贴!
2017-5-20 19:57
0
雪    币: 236
活跃值: (67)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
lipss 嘻嘻,前排围观加精贴!
O(∩_∩)O谢谢
2017-5-20 20:02
0
雪    币: 1535
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
嘻嘻,前排围观加精贴!
2017-5-20 21:29
0
雪    币: 6857
活跃值: (4037)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢分享
2017-5-20 23:06
0
雪    币: 2575
活跃值: (487)
能力值: ( LV2,RANK:85 )
在线值:
发帖
回帖
粉丝
9
黑手鱼 支持老宋[em_63]
你们认识?
2017-5-20 23:25
0
雪    币: 1404
活跃值: (4263)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
10
wyfe 你们认识?
同一个班的肯定啦
2017-5-21 11:36
0
雪    币: 236
活跃值: (67)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
11
  第一次写这么长的分析  大神们    有什么建议么
2017-5-21 12:26
0
雪    币: 1404
活跃值: (4263)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
12

睡觉别打呼噜

2017-5-24 22:14
0
雪    币: 4663
活跃值: (4087)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我喜欢这排版的方式
2017-5-25 17:29
0
雪    币: 236
活跃值: (67)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
木志本柯 我喜欢这排版的方式
O(∩_∩)O谢谢支持
2017-5-25 21:25
0
雪    币: 169
活跃值: (132)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15

您好,新手求教。为何我的IDA分析出来的结果不一样?我的IDA是在看学在下的6.8版本

  v9 = ((int (__stdcall *)(_DWORD, const char *))((char *)&byte_401060 + 108))("ADVAPI32.dll", "StartServiceA");

  v99 = (void (__stdcall *)(int, _DWORD, _DWORD))((int (__stdcall *)(_DWORD))((char *)&byte_401060 + 116))(v9);

  v10 = ((int (__stdcall *)(_DWORD, const char *))((char *)&byte_401060 + 108))("ADVAPI32.dll", "RegOpenKeyA");

  v87 = (void (__stdcall *)(signed int, char *, int *))((int (__stdcall *)(_DWORD))((char *)&byte_401060 + 116))(v10);

  v11 = ((int (__stdcall *)(_DWORD, const char *))((char *)&byte_401060 + 108))("ADVAPI32.dll", "UnlockServiceDatabase");

  v88 = (void (__stdcall *)(int))((int (__stdcall *)(_DWORD))((char *)&byte_401060 + 116))(v11);

  v12 = ((int (__stdcall *)(_DWORD, const char *))((char *)&byte_401060 + 108))("ADVAPI32.dll", "ChangeServiceConfig2A");

  v91 = (void (__stdcall *)(int, signed int, const char **))((int (__stdcall *)(_DWORD))((char *)&byte_401060 + 116))(v12);

  v13 = ((int (__stdcall *)(_DWORD, const char *))((char *)&byte_401060 + 108))("ADVAPI32.dll", "CreateServiceA");

  v104 = (int (__stdcall *)(int, int, int, signed int, signed int, signed int, signed int, char *, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))((int (__stdcall *)(_DWORD))((char *)&byte_401060 + 116))(v13);

  v14 = ((int (__stdcall *)(_DWORD, const char *))((char *)&byte_401060 + 108))("ADVAPI32.dll", "LockServiceDatabase");

  v100 = (int (__stdcall *)(int))((int (__stdcall *)(_DWORD))((char *)&byte_401060 + 116))(v14);

  ((void (__stdcall *)(_DWORD, char *, signed int))((char *)&byte_401060 + 104))(0, &Str2, 260);

  ((void (__stdcall *)(char *, signed int))((char *)&byte_401060 + 56))(&Str, 260);


上传的附件:
2017-7-17 22:59
0
雪    币: 236
活跃值: (67)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
不好意思  刚刚工作  比较忙  很少看论坛  你指的是哪里不一样呢  我也是ida6.8  你确定是一个函数里面吗  这个好久没看  已经忘了    ,应该是某些设置的问题导致的吧
2017-12-6 13:45
0
雪    币: 46
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
看了大佬分析,这远控无疑就是大灰狼8.02  添加了内网传播    全盘感染  这种毒一旦中上  所有exe    rar都感染  x60的系统急救箱好用点
2017-12-31 11:52
0
雪    币: 9
活跃值: (175)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
18
好好研究了
2018-1-1 10:13
0
雪    币: 3903
活跃值: (3554)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
19
大佬,方便加个微信交流交流吗
2021-3-26 21:06
0
雪    币: 383
活跃值: (1418)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
学习了
2021-10-14 15:32
0
游客
登录 | 注册 方可回帖
返回
//