病毒木马查杀实战第006篇:熊猫烧香之逆向分析(中)

2023-10-24 15:50

本文主要是介绍病毒木马查杀实战第006篇:熊猫烧香之逆向分析(中),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

        上一篇文章讲解了“熊猫烧香”病毒样本的反汇编代码入口处的分析,虽然尚未研究到病毒的核心部分,但其实我们后续的分析与之前的思想是一致的。而越到核心部分,可能会遇到越来越多的API函数,结合所调用函数的参数进行分析,反而有助于我们更容易地理解病毒的行为。应当将分析出的每一个CALL函数,改为我们能够理解的名字,这往往也有助于对后续程序的理解。

 

病毒功能分析

        上一篇文章的最后,我留下了三个CALL没有分析,现在进入第一个CALL,即sub_408024的内部查看一下:


图1 sub_408024起始处

        程序先将0x84赋值给ecx,此即为循环次数。然后使用了两个push 0,每个push能够开辟8个字节(32位)空间,所以这里每次能够获取16个字节的空间,这样的空间一共申请ecx次。那么本段代码的功能在于空间的申请。接下来有:


图2 分析函数sub_40277C

        这段代码的最后出现了sub_40277C这个函数,我们跟进后可以看到这几句代码:


图3 跟进sub_40277C

        可见sub_40277C主要是调用GetMuduleFileNameA这个API函数,而这个函数的功能就是获取当前进程已加载模块的文件的完整路径,那么就可以将sub_40277C重命名为:GetFilePathAndName。获取成功后,结合OD,可以看到如下信息:


图4 获取当前进程的完整路径

        接下来有:


图5 分析sub_405684函数

        注意第一句代码中的[ebp+var_3B8]保存的就是图4中所获取的路径地址,这个地址值赋给了eax。然后进入sub_405684分析。这个函数中有一处循环结构,是我们重点关注的对象,利用OD动态分析:


图6 sub_405684中的循环结构

        仅仅进行静态分析,不容易明白这个循环的作用,但是结合OD单步执行,观察寄存器中的值,就很容易明白这段代码的功用:它利用之前获取的文件完整路径,从后向前以单字节为单位,不断循环搜索,直至遇到ASCII码值为0x5C或0x2F或0x3A,然后便跳出循环。而0x5C所表示的是字符“\”,可以知道这段程序要么是获取文件名,要么是获取不包含文件名的路径。进入最后一条语句的CALL分析,很快就能够发现:


图7 字符串拷贝

        可见,程序将去除了文件名的路径拷贝到了之前申请的空间中,于是可以将sub_405684重命名为:GetFilePath。接下来有:


图8 分析sub_403ED4函数

        这三句代码的第一句,是将上面所获取的不带文件名的路径的地址赋值给eax,然后将字符串“Desktop_.ini”的地址赋给edx。然后进入sub_403ED4进行分析:


图9 字符串连接代码

        上图中代码的最后一个CALL,在分析sub_405684(GetFilePath)时遇到过,其作用是将字符串复制到指定的位置。对于这段程序来说,就是将“Desktop_.ini”这段字符复制到之前的路径字符后面。那么可以得知,sub_403ED4的作用是字符串的连接,那么就将其重命名为:StringCat。继续分析:


图10 分析sub_4057A4函数

        第一句代码是将之前所处理完毕的路径字符串地址赋给eax,然后调用sub_4057A4函数,进入该函数可以发现:


图11 查找文件函数

        这里调用了FindFirstFileA这个函数,说明它是在查找当前目录下“Desktop_.ini”文件是否存在,那么sub_4057A4函数的作用就在于检测文件是否存在,可将其改名为:CheckFileExist。接下来有:


图12 设置文件属性

        由于有了之前的分析并进行了重命名,那么这一段代码的作用就很明显了,首先根据上一段代码的查找结果进行判定,即如果当前目录下Desktop_.ini文件存在,那么就将该文件的文件属性调整为NORMAL,接下来有:


图13 文件删除

        停止1毫秒后,将Desktop_.ini删除。图12中有一个未知函数sub_4040CC,进去查看,则有:


图14 分析sub_4040CC函数

        可见这个函数用于检测待删除的文件路径是否为空。那么就可以将sub_4040CC重命名为:CheckPath。当然,以上分析是建立在Desktop_.ini文件存在的前提下,如果文件不存在,那么程序就会直接跳到loc_408110处执行:


图15 分析sub_4078E0函数

        这里最后一句调用了sub_4078E0函数,跟进去发现这个函数较长,并且也调用了很多其它的函数,乍一看,似乎不知这个函数究竟是做了什么。既然如此,我们可以先不管其具体的实现细节,只看看该函数执行完后,我们寄存器等位置产生了什么变化,主要关注该函数执行前后,程序使用了哪些寄存器。利用OD可以很容易发现变化:


图16 sub_4078E0函数执行完后的变化(部分)

        由截图可以发现,在获取了当前文件的路径后,该函数利用了很大的一片区域来写入了大量看似无意义的字符。结合右边分析出的ASCII码,发现这些可以理解为是一个暴力破解字典,病毒编写者企图利用暴力破解的方式,来攻破计算机中的某些验证机制。当然截图中仅仅展示了一小部分变化,病毒还写入了很多其它信息,有兴趣的读者可以自行查看,这里不再赘述,这有助于我们获取病毒的行为信息。那么这里可以将sub_4078E0函数重命名为:WriteVirusInfoToMem。接下来有:


图17 分析sub_403C44函数

        这里第一句执行完后,eax的值为ebp+var_8的地址,通过OD可以知道,这个地址中保存的是0,可以理解为没有数据。之后有一个CALL,我们进入查看一下:


图18 进入sub_403C44函数内部 

        这里首先取出eax所保存的地址中的值,也就是0,并赋给edx,那么edx保存的也就是0值。之后的test运算,使得ZF变为1,满足跳转条件,那么本段函数也就结束了。如果说edx所保存的不是0值,那么接下来的语句就会把eax所保存的地址中的值设为0。这么看上去,这段函数似乎并没有实现什么特别清晰具体的功能,那么不妨将这个操作理解为某种标志的设置,将sub_403C44重命名为:SetZeroFlags。继续分析:


图19 分析sub_403ECC函数

        结合OD可以知道,第一句是获取文件在内存中的首地址,然后进入sub_403ECC查看:


图20 进入sub_403ECC查看

        这里需要特别强调的是,由于本病毒程序是使用Delphi编写的,那么字符串的首地址减去4后,所取出的4个字节的内容就是此字符串的长度。也就是说,这段代码中的[eax-4]就是eax所指向的文件长度。于是可以将sub_403ECC重命名为:GetFileLen。在获取文件长度后,程序会跳转到loc_408163处执行:


图21 分析loc_408163

        在获取了文件长度后,这段代码首先会验证文件长度是否为0,这里由于文件真实存在,所以接下来的跳转不成立。接下来,eax中保存的是文件起始地址,而ebx是文件的长度,于是可以知道,倒数第二句的对比,是验证文件的尾端数据是否为0,如果为0,则接下来的跳转不成立。经过OD的动态分析,这里文件尾端的值为0,所以不执行跳转,继续向下执行。

        接下来代码的分析,留给下一篇文章。

 

小结

        经过一整篇文章的讨论,我并没有将病毒的一个完整功能块分析完全,主要是我需要讲得细致些,带领大家弄清楚每一个CALL的功能。接下来的最后一篇文章也无法将整个病毒分析完全,但是我相信,只要各位读者勤于动手,并将我所讲的逆向分析的基本原理搞清楚,那么这个“熊猫烧香”就根本不在话下了。

这篇关于病毒木马查杀实战第006篇:熊猫烧香之逆向分析(中)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/276216

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

【软考】希尔排序算法分析

目录 1. c代码2. 运行截图3. 运行解析 1. c代码 #include <stdio.h>#include <stdlib.h> void shellSort(int data[], int n){// 划分的数组,例如8个数则为[4, 2, 1]int *delta;int k;// i控制delta的轮次int i;// 临时变量,换值int temp;in

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师,爱吃土豆。如有需要技术交流或者需要方案帮助、需求:以下为联系方式—V 方案1:通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通过IO+EXIT中断的方式进行霍尔传感器数据的读取。将IO口配置为上升沿+下降沿中断触发的方式。当霍尔传感器信号发生发生信号的变化就会触发中断在中断