恶意代码分析实战20-2

本次实验我们将会分析lab20-03文件。先来看看要求解答的问题
Q1.你可以在这个程序中得到什么有意思的字符串?
Q2.导入函数表告诉你关于这个程序的什么信息?
Q3.在0x4036F0处,存在一个以字符串Config error作为输入的函数调用,其后跟着一些指令,然后是一个对CxxThrowException的调用。除这个字符串外,这个函数还用到其他参数了吗?这个函数返回了什么?从这个函数被使用的上下文中,你可以得到哪些信息?
Q4.在0x4025C8处的switch表中的6个项都做了什么?
Q5.这个程序的目的是什么?

载入IDA,打开string窗口
这里有趣的东西有很多,从这些字符串中可以猜测其功能。比如:
在这里插入图片描述

看到了http get,post命令及内容
在这里插入图片描述

建立socket,与远程机器交互,发送信息和查看响应
在这里插入图片描述

上传文件,下载文件,创建进程等
在这里插入图片描述

搜集主机信息

仅仅通过这些字符串,我们大概就能猜出,这个程序是一个后门程序,使用HTTP GET和POST命令来构建C&C,支持上传文件,下载文件,创建新进程,以及调查受害者主机等功能。
Q1.你可以在这个程序中得到什么有意思的字符串?
A1.有几个看起来像是错误消息的字符串(Error sending Http post, Error sending Http get,Error reading response,等等)告诉我们,这个程序将会使用HTTP GET和POST命令

再查看imports窗口
在这里插入图片描述

这些WS2_32导入函数说明这个程序会在网络中通信
在这里插入图片描述

CreateProcess说明这个程序可能会启动另一个进程
Q2.导入函数表告诉你关于这个程序的什么信息?
A2.几个WS2_32中的导入函数告诉我们,这个程序会在网络上进行通信。CreateProcess 导入函数表明,这个程序可能会启动另一个进程。

切换到View-A
在这里插入图片描述

main中调用了0x403be0,跟入
在这里插入图片描述

在403c08通过new操作符创建一个新对象,并在寄存器eax中返回了一个指向新对象的指针。之后将对象指针移入ecx寄存器
在403c22函数调用时被用做this指针,config.dat作为该函数的参数
说明sub_401ee0是前面创建对象所属类的一个成员函数。
跟入sub_401ee0
在这里插入图片描述

在401ef7将保存指针的ecx值赋给esi
在401efe通过new操作符创建另一个新对象
之后调用该对象的一个函数sub_403180
在这里插入图片描述

调用CreateFile,FileName参数值为config.dat。我们猜测这个函数是从磁盘读取配置文件,如果该文件可以被打开则执行jnz loc_4031d5,往右走.如果没有打开成功,则往左走,将Config error字符串做为参数传递给sub_4036f0
sub_4036f0也使用ecx寄存器作为this指针,使用this指针的对象引用存储在栈上的var_AC变量里。
之后var_AC赋给eax,在4031d0看到,该对象被传递给了CxxThreadException函数
所以我们知道,sub_4036f0是异常对象的一个成员函数,我们推测这个函数在使用Config error初始化一个异常
这样一种模式—一个带着错误字符串参数的函数调用后是一个CxxThrowException,表明这个函数在初始化一个异常,这个模式在接下来的分析中如果出现,我们就可以很快进行分析了
Q3.在0x4036F0处,存在一个以字符串Config error作为输入的函数调用,其后跟着一些指令,然后是一个对CxxThrowException的调用。除这个字符串外,这个函数还用到其他参数了吗?这个函数返回了什么?从这个函数被使用的上下文中,你可以得到哪些信息?
A3.在0x4036F0地址调用的函数除了一个字符串外,不带任何参数,但ECX寄存器中包含了对象的this指针。我们知道包含这一函数的对象是一个异常对象,因为这个对象在后面被用于CxxThrowException函数的一个参数。通过上下文环境我们可以得知0x4036F0地址的函数初始化了一个异常对象,而异常对象中存储了一个字符串来描述到底引发了何种异常。
如果config.dat打开成功,走右边
在这里插入图片描述

会通过ReadFile从config.dat中读取数据,然后存储在创建的对象中

回到上一层函数,继续分析
在这里插入图片描述

eax赋给了esi
eax中是指向第二次创建的对象的指针
也就是说第二次创建的对象的指针被保存在第一次创建的对象中
之后是一系列硬编码的url路径,以及两个硬编码的整数
之后的mov eax,esi返回了一个指向第一次创建的对象的指针。这个对象似乎存储了程序所有全局数据。
我们基本知道sub_401ee0做的工作:从一个文件加载配置信息,然后初始化一个对象,并存储程序的全局数据。

返回上层函数
在这里插入图片描述

在进入循环之前,调用了usb_401f80,跟入
在这里插入图片描述

跟入sub_403d50
在这里插入图片描述

可见,这是用于建立socket连接的
返回上层函数,继续分析
在这里插入图片描述

跟入sub_402ff0
在这里插入图片描述

该函数用于获取主机信息
返回上层,跟入sub_404ed0
在这里插入图片描述

跟入sub_404ef0
在这里插入图片描述

从字符串可见这是进行了http post请求
返回sub_401f80
在这里插入图片描述

跟入sub_404b10
在这里插入图片描述

从字符串来看该函数是用于检测响应
跟入sub_4015c0
在这里插入图片描述

这个函数是用于检查参数编码的
所以我们大概知道sub_401f80的作用了:向远程主机发送信息,并检查响应,如果符合,则进入循环
注意这个循环的最后jmp是无条件跳转,而且循环中没有计数器,意味着这是一个无限循环
在循环中调用了loc_402410和sleep
跟入loc_402140
在这里插入图片描述

调用了sub_403d50,这个函数之前分析过,是用于建立socket连接的
继续往下
在这里插入图片描述

跟入sub_404cf0
在这里插入图片描述

这是用于发送http get请求的
在这里插入图片描述

之后看到两个代码块,当响应不符合特定格式标准时它们会引发异常
在这里插入图片描述

之后看到了拥有6个选项的switch语句
用于决定switch的值存储在esi+4,该值被赋给eax
0FFFFFF9F转换是-61h
之后就是将eax寄存器值减去0x61
如果结果不小于5,则不进行任何switch跳转
0x61+5=0x66
这样就可以确保值处于0x61到0x66即ascii的a到f
也即是说,为a到f之间任一,才会实现switch跳转

双击off_4025c8
在这里插入图片描述

可以看到6个可能的选择位置
双击loc_402561看看第一处
在这里插入图片描述

调用delete运算符,然后立即返回
接着分析第二处
在这里插入图片描述

调用了su_4025e0,跟入
在这里插入图片描述

其将字符串转为数字,调用sleep函数后返回
接着分析第三处
在这里插入图片描述

跟入sub_402f80
在这里插入图片描述

跟入sub_402ef0
在这里插入图片描述

调用了CreateProcess创建进程
分析第四处
在这里插入图片描述

跟入sub_402ba0
在这里插入图片描述

跟入sub_402a20
在这里插入图片描述

调用CreateFile,WriteFile,将从C&C服务器获取到的http相应写到磁盘上
分析第五处
在这里插入图片描述

跟入sub_402c70
在这里插入图片描述

跟入sub_4027e0
在这里插入图片描述

通过http post命令,将从文件读取的数据上传到远程服务器
分析第六处
在这里插入图片描述

跟入sub_402d30
在这里插入图片描述
在这里插入图片描述

从其关键的函数调用可知,这是用于获取受害者主机信息
在这里插入图片描述

之后调用sub_404b10将结果发给C&C服务器
总结一下,这个程序会读取配置文件,从而确定C&C服务器,发送控制信号至远程C&C服务器,并根据服务器端不同的响应,实现了几个不同的后门功能。
Q4.在0x4025C8处的switch表中的6个项都做了什么?
A4. Switch 表的6个条目实现了6种不同的后门命令: NOP、休眠、执行一个程序、下载文件、上传一个文件,以及调查受害主机
Q5.这个程序的目的是什么?
A5.该程序实现了一个后门,它使用HTTP作为命令通道,并具备启动程序、下载或上传文件,以及收集受害主机信息的能力。

参考:
1.《恶意代码分析实战》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值