恶意代码分析实战 17 C++代码分析

news2024/10/7 20:25:44

17.1 Lab20-01

问题

  1. 在0x401040处的函数采用了什么参数?

vmware_yYKAnctdxE.png
首先,以①处的一个对new操作符的调用开始,这表明它正在创建一个对象。一个对象的引用会在EAX寄存器中返回最终存储在②处的var_8变量和③处的var_4变量中。var_4变量在④处被移到了ECX寄存器中,这预示着它将被作为函数调用的this指针传递进去。指向URL http://www.praticalmalwareanalysis.com/的一个指针,随后被存储在对象的开头位置,紧接着调用了sub_401040函数。
vmware_0GIecuXjbA.png
在上面的代码中,我们看到ECX中的this指针在①处被访问并存储在var_4变量中。代码的其余部分是参数被压栈,并调用URLDownloadToFileA函数的过程。为了获取将要使用的URL参数值,this指针在②处被读取,随后在③处访问了存储在对象中的第一个数据元素,并将其压入④处的栈中。
回想一下,在main函数中,对象中存储的第一个元素是URL字符串htp:/mwpracticalmalwareanabysiscom/cp p.hml,最后,main函数返回,程序执行完毕。
在0x401040地址处的函数并不带任何参数,但它在ECX中传递了一个对象索引,含义为this指针。

  1. 哪个URL被用来调用URLDownloadToFile?

对URLDownloadToFile函数的调用使用http://wwwpracticalmalwareanalysis.com/cpp.html作为URL参数值。

  1. 这个程序做了什么事情?

这个程序从远程服务器下载文件,并把它存储到本地系统的C:\tempdownload.exe中。

17.2 Lab20-02

问题

  1. 在这个程序中,你可以从有趣的字符串中了解到什么?

使用strings程序检查一下文件。
vmware_YM4dzYOvnD.png
可以看到两个可疑的字符串,这意味着这个程序可能是FTP客户端软件。

  1. 导入函数表告诉你关于这个程序的什么信息?

使用Dependency Walker查看程序。
vmware_bjv9c6AFo4.png
vmware_KXVdZlcB9V.png
这一程序导入了函数FindFirstFile和FindNextFile,这表明这个程序很可能会搜索受害主机的文件系统。而导入了函数Internetopen、Internetconnect、FtpsetcurrentDirectory与FtpPutFile,这告诉我们这一恶意代码会上传受害主机的文件到一个远程FTP服务器。

  1. 在0x4011D9处创建对象的目的是什么?它有什么虚函数吗?

vmware_lpcCBqJQCf.png
首先调用了WAStartup,调用了网络函数。
然后使用gethosthome函数获取主机名,最后将一个字符串压栈,然后调用了sub_401000.
vmware_Ahjcv9UCXG.png
这个蓝色的线说明该程序有循环操作,然后我们可以在循环的开始发现调用了
vmware_ncULRzqXXw.png
在结束调用了
vmware_aUE1aNPcCN.png
结合压栈的字符串,我们可以推测,程序进行了遍历文件的操作。
在循环体中,我们也看到了很多字符串操作函数(strcat、strlen、strncmp等等),仔细分析将会发现程序到底在搜索什么。其中一个strncmp函数调用将操纵字符串与.doc进行比较,如果文件名以.doc后结尾,下图代码将会被执行。
vmware_pWFOunfFSu.png
我们知道off_496DC处是一个虚函数表,因为在通过new操作符创建对象之后它马上被写入对象中,如果我们仔细查看off_4969DC的偏移位置,可以发现它保存了一个指向sub_401449地址的函数指针。我们将这一函数标识为docobject_Func1,在这个函数被调用时再来分析它。
在0x004011D9地址创建的对象是一个.doc文件。这个对象在偏移0x00401440地址处有一个虚函数,它将把文件上传至远程FTP服务器

  1. 哪个函数可能被在0x401349处的calll[edx]指令调用?

分析代码可知,这段代码先判断是不是doc文件,在判断是不是pdf文件,最后都会到如下代码处。
vmware_m8oOvzQMZm.png
可能调用的就是处理doc、pdf或者什么也不做的函数。
vmware_ibPIyXymSc.png
vmware_3nZffoLdOC.png
vmware_mvekeUatEy.png
在0x00401349处的虚函数调用将调用在0x00401380、0x00401440或0x00401370处的一个虚拟函数。

  1. 如何简易地搭建这个恶意代码所预料的服务器,不用连接到互联网,就能完整地分析这个恶意代码呢?

首先,安转apateDNS和MINIftp,然后安装Microsoft .NET Runtime >= 2.0。

https://www.microsoft.com/zh-CN/download/confirmation.aspx?id=16614

启动MINIftp。
vmware_ReDjDBXfH0.png
打开ApateDNS设置返回到本地。
vmware_2qCdAtd1fw.png
在C盘根目录下,放一些doc和pdf文件,然后建立doc和pdf文件夹。
vmware_Hp9XKp3MrZ.png
运行恶意代码。
vmware_zH1qOnJA1H.png
vmware_DPJWGLB5Y0.png
这一恶意代码会使用高层API函数连接到一个远程的FTP服务器,我们可以下载并建立一个本地FTP服务器,并将DNS请求重定向至这一服务器,以充分分析该恶意代码

  1. 这个程序的目的是什么?

这个程序会搜索受害主机的硬盘驱动器,并上传所有.doc和.pdr后缓的文件到远程FTP服务器上。

  1. 在这个程序中实现虚函数调用的目的是什么?

实现虚拟函数调用的目的是让代码对不同文件类型执行不同的上传函数。

17.3 Lab20-03

打开图形化界面的步骤。

vmware_pyB8gBs4yn.png
问题

  1. 你可以在这个程序中得到什么有意思的字符串?

vmware_51uCxjoizQ.png
几个看起来像是错误消息的字符串(Error sending Http post,Error sending Http get Errorr sending response,等等)告诉我们,这个程序将会使用HTTP GET和POST命令。我们也看到HTML路径(/srv.html,/put.html等),这暗示着这个恶意代码尝试打开一些文件。

  1. 导入函数表告诉你关于这个程序的什么信息?

vmware_EIe4dOcFyi.png
几个wS2_32中的导入函数告诉我们,这个程序会在网络上进行通信。Createprocess导入函表明,这个程序可能会启动另一个进程。

  1. 在0x4036F0处,存在一个以字符串config error作为输入的函数调用,其后跟着一些指令,然后是一个对cxxThrowException的调用。除这个字符串外,这个函数还用到其他参数了吗?这个函数返回了什么?从这个函数被使用的上下文中,你可以得到哪些信息?

vmware_BwT2dmhTOD.png
在0x4036F0地址调用的函数除了一个字符串外,不带任何参数,但ECX寄存器中包含了对象的this指针。我们知道包含这一函数的对象是一个异常对象,因为这个对象在后面被用于CxxThrowException函数的一个参数。通过上下文环境我们可以得知0x4036F0地址的函数初始化了一个异常对象,而异常对象中存储了一个字符串来描述到底引发了何种异常。

  1. 在0x4025C8处的switch表中的6个项都做了什么?

vmware_mNZDWWLGwS.png

  • case_1调用delete运算符,然后立即返回而实际上不做任何事情。我们将这个选择重命名为case_doNothing

vmware_Cvvl98DPJE.png

  • case_2调用atoi函数,将一个字符串转换为数字,调用sleep函数后便返回。我们将它重命名为case_sleep

vmware_4zJ5oLlKct.png

  • case_3做了一次字符串解析,然后调用了createprocess函数。我们将它重命名为case ExecuteCommand

vmware_wkawGpDyps.png

  • case_4调用了createFile函数,并将从命令和控制服务器获取到的HTTP响应写到了磁盘上,我们将它重命名为casedownloadFile。

vmware_1ELkciJPCl.png

  • case_5也调用CreateFile函数,但它使用HTTPPOST命令, 将从文件读取的数据上传至远程服务器。我们将其重命名为case_uploadFile。

vmware_vQSU7fLste.png

  • case_6调用了GetComputerName、GetUserName、GetVersionEx和GetDefaultLCID函数, 这些函数起对受害者主机进行调查,然后将结果发送回命令和控制服务器。

vmware_YMEyYGLA9D.png
Switch表的6个条目实现了6种不同的后门命令:NOOP、睡觉、执行一个程序、下载文件、上传一个文件,以及调查受害主机。

  1. 这个程序的目的是什么?

该程序实现了一个后门,它使用HTTP作为命令通道,并具备启动程序、下载或上传文件,以及收集受害主机信息的能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytorch深度学习基础(十)——常用线性CNN模型的结构与训练

线性CNN模型的结构与训练引入包LeNet模型结构模型构建AlexNet模型结构模型构建VGG模型结构模型构建加载数据集累加器精度训练引入包 import torch from torch import nn from torchvision import datasets from torchvision import transforms from torch.utils.data import D…

基于蜣螂算法的极限学习机(ELM)分类算法-附代码

基于蜣螂算法的极限学习机(ELM)分类算法 文章目录基于蜣螂算法的极限学习机(ELM)分类算法1.极限学习机原理概述2.ELM学习算法3.分类问题4.基于蜣螂算法优化的ELM5.测试结果6.参考文献7.Matlab代码摘要:本文利用蜣螂算法对极限学习机进行优化,并用于分类问…

【华为上机真题】连续字母长度

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

C语言--指针初阶

目录什么是指针?指针变量指针类型指针类型的意义在数组中举例野指针概念野指针成因如何规避野指针指针运算指针-整数指针关系运算指针-指针应用(求字符串长度)结语什么是指针? 在计算机科学中,指针(Pointer)是编程语言…

直接在Notepad++中运行GO

1.Windows上安装Go语言开发包参考链接:http://c.biancheng.net/view/3992.html1.1.下载Go语言开发包可以在Go语言官网 (https://golang.google.cn/dl/) 下载Windows 系统下的Go语言开发包,如下图所示。这里我们下载的是64 位的开发…

深度学习:轻量级神经网络MobileNet 从v1 到v2

深度学习:轻量级神经网络MoblieNet 从v1 到 v2MobileNet V1前言深度可分离卷积传统卷积Depth Wise ConvPoint Wise Conv性能对比MobileNet V2前言主要改进Inverted Residuals BlockResidual BlockExpansion LayerReLU6Linear Activation Function小结实验MobileNet …

大年初二、初三—— 牛客网刷题经验分享~

2023年大年初二、初三 —— 牛客网刷题经验分享~😎大年初初二、初三 —— 牛客网刷题经验分享~😎)前言🙌牛客网——基础语法【循环输出图形篇】🙌BC98 线段图案 🙌BC99 正方形图案 🙌BC100 直角三角形图案 …

计算机毕业设计选题推荐之Springboot校园篮球足球竞赛预约平台-Vue

,本系统分为用户和管理员两个角色,其中用户可以在线注册登陆,查看平台公告,查看篮球比赛介绍,在线预约参加篮球比赛。管理员可以对用户信息,比赛项目,比赛分类,平台公告信息等进行管…

Linux中如何给普通用户提权

引言: 北京时间2023/1/26/11:00 ,看到这个日期,我第一时间想到的是还有十几天就要开学啦!开学我是向往的,但是我并不怎么向往开学的考试,比如什么毛概和什么信息技术,可能是我深知自己在这些课…

实现自己的数据库一

一 前言从上篇原创文章到现在又是新的一年,今天是2023年的大年初三,先在这里祝各位亲爱的老铁们新年快乐,身体健康,在新的一年里更帅气、更漂亮,都能完成自己的小目标。一直以来,我对数据存储还是比较感兴趣…

卓有成效的用例设计方法

持续坚持原创输出,点击蓝字关注我吧用例设计作为测试工程师的立身之本,是衡量测试工程师综合素质的重要参考,时间是测试工作中重要的测试资源,通过设计高质量的测试用例可以有效地提升测试效率。本文旨在介绍测试工作中常用的五种…

恶意代码分析实战 18 64位

18.1 Lab21-01 当你不带任何参数运行程序时会发生什么? 当你运行这个程序却没带任何参数,它会立即退出。 根据你使用的IDAPro的版本,main函数可能没有被自动识别,你如何识别对main函数的调用? main函数有三个参数入…

NodeJS 中 Express 之中间件

NodeJS 中 Express 之中间件参考描述中间件next()一个简单的中间件函数使用全局中间件局部中间件共享注意事项位置next()分类错误级中间件内置中间件express.urlencoded()express.json()第三方中间件参考 项目描述哔哩哔哩黑马程序员搜索引擎Bing 描述 项目描述Edge109.0.151…

【web前端】盒子模型

border 边框 content 内容 padding内边距 margin外边距 1.边框 border 边框粗细 用px作为单位 border-style : solid 实线的 dashed虚线的 dotted 点的 边框的符合写法: 那三个没有先后顺序 边框可以分开写 表格的细线边框 border-collapse …

【编程入门】开源记事本(微信小程序版)

背景 前面已输出多个系列: 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记,将更为简化,去掉了网络调用&#xff0…

20230126英语学习

Your Dog’s Behavior Is a Product of Their Genes 狗狗做什么,基因来决定 这篇好难,字基本都认识,但它不认识我~ “Identification of the genes behind dog behavior has historically been challenging,” says first author Emily Dut…

【计算机网络(考研版)】第一站:计算机网络概述(一)

目录 一、计算机网络的概念 1.计算机网络的定义 2.计算机网络的组成 3.计算机网络的功能 4.计算机网络的分类 二、计算机网络的性能指标 1.速率 2.带宽 3.时延 4.时延带宽积 5.往返时间 6.利用率 三、计算机网络的体系结构 1.体系结构 2.协议 3.服务 4.接口&a…

活动星投票优秀支书网络评选微信的投票方式线上免费投票

“优秀支书”网络评选投票_多人投票流程顺序_视频投票图文投票_微信比赛投票小程序近些年来,第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放,更多人选择微信投票小程序平台,因为…

最详细、最仔细、最清晰的几道python习题及答案(建议收藏哦)

名字:阿玥的小东东 学习:python。c 主页:没了 今天阿玥带大家来看看更详细的python的练习题 目录 1. 在python中, list, tuple, dict, set有什么区别, 主要应用在什么样的场景? 2. 静态函数, 类函数, 成员函数、属性函数的区别? 2.1静态…

Unix\Linux多线程复健(二)线程同步

线程同步 并非让线程并行,而是有先后的顺序执行,当有一个线程对内存操作时,其他线程不可以对这个内存地址操作 线程之间的分工合作 线程的优势之一:能够通过全局变量共享信息 临界区:访问某一共享资源的代码片段&#…