一款简单的反向shell恶意样本分析

本文分析了一款简单的反向shell恶意样本,涉及静态和动态分析。样本在满足特定条件时启动一个shell,通过解密获取通信URL,利用gethostbyname获取主机信息,创建进程进行远程交互。该样本要求文件名特定,主要用于实现远程控制。

一款简单的反向shell恶意样本分析

样本来自《恶意软件分析实战》第九章的的实验二。

静态分析

基本信息

查看样本信息,发现程序没有加壳,使用VC++基编写

在这里插入图片描述
编译时间2011/041/30

在这里插入图片描述

接着查看字符串,没有发现有用的信息,如下

在这里插入图片描述

静态分析

使用ida分析来到入口函数,发现初始化了一堆参数

在这里插入图片描述

接着调用GetModuleFileNameA函数获取样本执行的路径,并判断当前样本的名称是否为ocl.exe,如果不是则退出

在这里插入图片描述

如果相同则创建socket链接,否则退出。这里进入创建socket链接

在这里插入图片描述

在调用gethostbyname函数前,会调用sub_401089函数解密出要获取的name。其中ebp=var_1B0的参数是在初始化的时候就给定了一个字符串,如下

在这里插入图片描述

整理后得到1qaz2wsx3edc,参数ebp+var_1F0的值是一个经过加密的数组

在这里插入图片描述

这里将数组导出备用,导出方式为

在这里插入图片描述

这里导出为C数组即可,如下

在这里插入图片描述
经过分析函数sub_401089可知

  • 获取key=1qaz2wsx3edc的长度 slen,
  • 循环32次,每次获取一个key[index%slen]^(index+data[i])

如下

在这里插入图片描述

解密后的字符串为

www.practicalmalwareanalysis.com

接着调用gethostbyname获取主机信息并调用函数sub_401000创建一个进程,其中进程的输入输入控制是连接的socket对象,创建的进程就相当于一个shell,负责和远程进行交互,如下

在这里插入图片描述

创建进程完成后,开始循环等待,每隔0x7530运行一次。

在这里插入图片描述

动态分析

程序运行后,首先判断运行的程序名称是否为ocl.exe如下

在这里插入图片描述

这里需要过掉这个判断,运行到je

00401240 | 74 0A              | je lab09-02.40124C           

ZF=0 -->ZF=1之后来到调用解密函数位置对应的参数分别是

在这里插入图片描述
需要解密的数组如下

在这里插入图片描述

解密后的数据

在这里插入图片描述

之后程序会创建一个进程,这个进程负责和远程进行通信。

程序首先初始化了key,判断程序是否为ocl.exe如果是则运行,如果不是则退出。这里选择path掉这个校验,创建一个socket,之后解密出gethostbyname的参数name获取对应的name的host信息,之后创建一个进程,这个进程的输入和输入都是通过创建的socket来通信,这个程序运行之后每隔0x7530运行一次。

总结

这个样本运行要求修改样本名称为ocl.exe才能运行,并且程序是一个反向shell控制程序,通过运行时解密出url并通过gethostbyname获取通信信息。通过设置CreateProcess函数的StartupInfo中的input output error为sockcet对象来实现接收远程的输入。

IOCs

URL

www[.]practicalmalwareanalysis.com

sha256

F153DFACEC09DD69809C3BBF68270A38EE3701F44220C7BF181C14A68C138133
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值