恶意代码分析实战 --- 第九章 OllyDbg

本文详细分析了三个恶意代码样本,涉及服务安装、注册表操作、网络通信和反向 shell 功能。主要行为包括:创建服务、设置注册表、执行命令、建立网络连接、创建定时任务等。此外,还介绍了如何使用OllyDbg进行动态分析和修补代码,以及如何通过静态字符串和运行行为理解恶意代码的功能。课后习题涵盖了解密域名、触发后门功能和理解恶意代码执行流程。
摘要由CSDN通过智能技术生成

Lab 9-1

查看程序的导入了Service相关、注册表相关、文件操作相关、网络连接相关的API,还有ShellExecute函数可能是存在后门的命令执行。
在这里插入图片描述
在这里插入图片描述
字符串主要是cmd.exe和一个注册表SOFTWARE\Microsoft \XPS比较可疑
在这里插入图片描述

主流程分析

1.如果运行程序是否有参数。无参数查询注册表”SOFTWARE\Microsoft \XPS\Configure“.查询失败删除文件
2,查看最后一个参数是否为abcd,再根据参数-in -re -c -cc执行相应命令
在这里插入图片描述

打开注册表
LSTATUS RegOpenKeyExA(
  HKEY   hKey,//根键,下面其中之一:HKEY_CLASSES_ROOT HKEY_CURRENT_CONFIG 
              //HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS
  LPCSTR lpSubKey,//子健,大小不敏感
  DWORD  ulOptions,
  REGSAM samDesired,
  PHKEY  phkResult
);

功能分析

-in参数分析

1.如果还没创建ServiceName对应的服务就创建服务,如果创建了就修改服务
2.复制Lab09-01.exe到C:\WINDOWS\system32\Lab09-01.exe
3.将C:\WINDOWS\system32\Lab09-01.exe的创建时间、修改时间、访问时间设置为与kernel32.dll相同
4.设置注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \XPS\Configuration。内容可以通过动态调试得到,如下图。
通过分析可以知道,-in功能是安装服务,如果后面没有带名字就用程序名当作服务名。
在这里插入图片描述
动态调试获取注册表设置内容,也可以设置完之后用查看。
在这里插入图片描述

获取当前模块的全路径
DWORD GetModuleFileNameA(
  HMODULE hModule,//NULL表示当前执行文件
  LPSTR   lpFilename,//保存路径
  DWORD   nSize//路径长度
);
改变服务的配置
BOOL ChangeServiceConfigA(
  SC_HANDLE hService,//服务句柄
  DWORD     dwServiceType,//服务类型 SERVICE_NO_CHANGE=0xFFFFFFFF
  DWORD     dwStartType,//服务启动选项。0x02==SERVICE_AUTO_START
  DWORD     dwErrorControl,//报错等级
  LPCSTR    lpBinaryPathName,//服务可执行文件全路径,NULL表示没改变
  LPCSTR    lpLoadOrderGroup,
  LPDWORD   lpdwTagId,
  LPCSTR    lpDependencies,
  LPCSTR    lpServiceStartName,
  LPCSTR    lpPassword,
  LPCSTR    lpDisplayName//被使用的名字
);
将环境变量替换为字符串(%SYSTEMROOT%\system32\Lab09-01.exe ==》C:\WINDOWS\system32\Lab09-01.exe)
DWORD ExpandEnvironmentStringsA(
  LPCSTR lpSrc,
  LPSTR  lpDst,
  DWORD  nSize
);

-re参数分析

1.删除服务
2.删除C:\WINDOWS\system32\Lab09-01.exe
3.删除注册表项
通过分析可以知道re参数为卸载功能
在这里插入图片描述

-c参数分析

根据传入的参数2,3,4,5进行设置注册表参数,具体参数含义需要看后门利用如何使用
通过分析可以知道-c选项为配置参数功能
在这里插入图片描述

-cc参数分析

读取注册表中的内容并输出。
通过分析可知-cc选项为输出配置信息
在这里插入图片描述
在这里插入图片描述

后门功能

当然还有最重要的后门功能模块还没分析。后门功能在sub_402360()中
1.后门启动会先读取注册表中的配置文件
2.sub_401E60()连接配置中设置的网站http://www.practicalmalwareanalysis.com和端口80,读取命令,因为是练习病毒样本,所以并不会获取到命令,剩下命令可以靠猜,或者修改内存值来达到触发的目的
3.SLEEP:休眠。UPLOAD:下载网站文件到本地。DOWNLOAD:上传本地文件到服务器。CMD:执行cmd命令
在这里插入图片描述

课后习题

1.如何让这个恶意代码安装自身?
Lab09-01.exe -in abcd
2.这个恶意代码的命令行选项是什么?它要求的密码是什么?
-in -re -c -cc。密码是abcd
3.如何利用OllyDbg永久修补这个恶意代码,使其不需要指定的命令行密码?
方法1:修改jnz为jmp
在这里插入图片描述

方法2:修改密码检测函数为mov eax,1;retn
4.这个恶意代码基于系统的特征是什么?
文件:C:\WINDOWS\system32\Lab09-01.exe
注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \XPS\Configuration
5.这个恶意代码通过网络命令执行了哪些不同操作
SLEEP UPLOAD DOWNLOAD NOTHING
6.这个恶意代码是否有网络特征
http://www.practicalmalwareanalysis.com

Lab 9-2

导入表有CreateProcess和Sleep,还有网络连接API可能是后门程序。静态字符串没有有价值的字符串。直接运行,Process Monitor和process explorer,注册表监控软件都没显示有什么敏感操作
在这里插入图片描述
在这里插入图片描述

主流程分析

1.GetModuleFileName获取执行程序的名字与ocl.exe进行比较,不相同则无法执行
2.动态解密出攻击者的url(www.practicalmalwareanalysis.com)
3.连接目标的9999端口
4.sub_401000函数创建反向shell连接
在这里插入图片描述
在这里插入图片描述
后门配置
将cmd的标准输入输出错误流和socket绑定
在这里插入图片描述

初始化winsockDLL
int WSAStartup(
  WORD      wVersionRequired,
  LPWSADATA lpWSAData
);

创建绑定在特定传输服务上
SOCKET WSAAPI WSASocketA(
  int                 af,//协议族 2表示ipv4
  int                 type,//socket类型 1表示SOCK_STREAM
  int                 protocol,//协议类型 6表示TCP
  LPWSAPROTOCOL_INFOA lpProtocolInfo,
  GROUP               g,
  DWORD               dwFlags
);
sockaddr结构体
struct sockaddr {
        ushort  sa_family;
        char    sa_data[14];
};

struct sockaddr_in {
        short   sin_family;
        u_short sin_port;//端口
        struct  in_addr sin_addr;//ip地址
        char    sin_zero[8];
};
结构体:用于描述一个给定的主机
typedef struct hostent {
  char  *h_name;//域名
  char  **h_aliases;//别名???
  short h_addrtype;//地址类型 02
  short h_length;//每个地址的长度
  char  **h_addr_list;//ip地址数组
} HOSTENT, *PHOSTENT, *LPHOSTENT;

指定新进程的主窗口特征
typedef struct _STARTUPINFOA {
  DWORD  cb;
  LPSTR  lpReserved;
  LPSTR  lpDesktop;
  LPSTR  lpTitle;
  DWORD  dwX;
  DWORD  dwY;
  DWORD  dwXSize;
  DWORD  dwYSize;
  DWORD  dwXCountChars;
  DWORD  dwYCountChars;
  DWORD  dwFillAttribute;
  DWORD  dwFlags;
  WORD   wShowWindow;
  WORD   cbReserved2;
  LPBYTE lpReserved2;
  HANDLE hStdInput;
  HANDLE hStdOutput;
  HANDLE hStdError;
} STARTUPINFOA, *LPSTARTUPINFOA;

课后习题

1.在二进制文件中,你看到的静态字符串是什么?
找不到什么字符串
2.当你运行这个二进制文件是,会发生什么?
无法启动,需要修改程序名为ocl.exe
3.怎么让恶意代码的攻击载荷(payload)获得运行?
4.在地址0x401133处发生了什么?
5.传递给子例程0x401089的参数是什么?
“1qaz2wsx3edc”和解密密钥
6.恶意代码使用的域名是什么?
practticalmalwareanalysis.com
7.恶意代码使用什么编码函数来混淆域名?
“1qaz2wsx3edc”异或加密混淆域名
8.恶意代码在0x004016e处调用CreateProcessA函数的意义是什么?
创建和攻击者的反向连接

Lab 9-3

直接导入了DLL1、DLL2、Kernel32.dll。虽然没有直接导入DLL3但是字符串中有DLL3相关的字符串
在这里插入图片描述
在这里插入图片描述

主流程分析

  1. DLL1Print函数输出进程PID
  2. DLL2Print函数输出创建的临时文件句柄
  3. 向临时文件写入内容
  4. 加载DLL3,并调用DLL3Print输出CMD命令保存的地址
  5. DLL3GetStructure函数获取AT_INFO结构体
  6. NetScheduleJobAdd添加定时任务,为ping www.malwareanalysisbook.com
    在这里插入图片描述
    DLL1Print函数
    输出"DLL 1 mystery data %d\n"当前进程的PID
    在这里插入图片描述
    DLL2Print函数
    输出"DLL 2 mystery data %d\n",CreateFile函数的句柄返回值
    在这里插入图片描述
    DLL2ReturnJ函数
    返回CreateFile(“temp.txt”)的句柄
    DLL3Print函数
    输出"DLL 3 mystery data %d\n",WideCharStr为“ping www.malwareanalysisbook.com”转为WideChar之后的地址
    在这里插入图片描述
    在这里插入图片描述
    DLL3GetStructure函数
    得到AT_INFO结构体如下图
    在这里插入图片描述
添加一个未来执行的任务
NET_API_STATUS NET_API_FUNCTION NetScheduleJobAdd(
  LPCWSTR Servername,//指向一个DNS和NetBIOS字符串,如果是NULL表示本地
  LPBYTE  Buffer,//指向AT_NFO结构体,描述任务
  LPDWORD JobId//接收任务ID
);
结构体:描述任务
typedef struct _AT_INFO {
  DWORD_PTR JobTime;//指向任务运行的时间
  DWORD     DaysOfMonth;//每个Bit表示任务在一个月中的哪几天运行
  UCHAR     DaysOfWeek;//每个Bit表示任务在一个星期的那几天运行
  UCHAR     Flags;//属性
  LPWSTR    Command;//指向Unicode命令
} AT_INFO, *PAT_INFO, *LPAT_INFO;

总结

没啥好总结的,就是相关API和结构体的学习。
周末参加了美团CTF只做了一道100mazes,练习了idapython的使用。另外的matrix和inject看看能不能复现出来。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值