专栏名称: FreeBuf
国内关注度最高的全球互联网安全新媒体
目录
相关文章推荐
安天集团  ·  安全行动,只为中国(三)—— ... ·  昨天  
计算机与网络安全  ·  非人工身份安全现状 ·  1 周前  
51好读  ›  专栏  ›  FreeBuf

对Amadey恶意软件中的字符串进行混淆

FreeBuf  · 公众号  · 互联网安全  · 2024-09-30 19:39

正文


前言


Sidekick 2.0 包含一组强大的功能,可帮助您完成各种任务。今天,我们将应用其中的几个功能来对名为 Amadey 的恶意软件样本中的字符串进行反混淆。


Amadey在其Malpedia条目中解释道,它是一个僵尸网络,它会定期将有关系统和已安装的 AV 软件的信息发送到其 C2 服务器,并轮询以接收来自它的命令。它的主要功能是可以为所有或特定目标的受恶意软件感染的计算机加载其他有效负载(称为“任务”)。这个特定的恶意软件样本采用了一种混淆技术,将二进制文件引用的字符串存储为加密字符串,然后在运行时解密。这使得分析师更难以逆向工程和了解恶意软件正在做什么,同时也阻止了防病毒软件识别它。


查找解密函数


首先,我们需要在二进制文件中查找解密加密字符串的函数。(注意:此示例二进制文件已删除通常可帮助我们完成此任务的任何符号信息。)由于此任务需要迭代二进制文件中的代码并分析其内容,因此 Analysis Workbench 的自动化和推理功能使其最适合此任务。


在分析工作台中,我们输入一个简单的任务描述“查找对字符串执行解密的函数”:



Sidekick 会自动生成执行该任务的脚本。您会注意到此脚本中的几件事:

  • Sidekick 选择创建一个LLMOperator来确定给定函数是否对字符串执行解密(第 2 行)。调用时,LLMOperator将使用大型语言模型来确定传递给它的函数(第 12 行)是否对字符串执行解密。

  • Sidekick 确定需要遍历二进制文件中所有定义的函数才能完成请求(第 7 行)。

  • Sidekick 选择通知我们其进展情况,以提供便利(第 9 行)

  • Sidekick 选择将其结果输出到名为“解密函数”的索引中(第 5、16 行)


由于索引条目中的“描述”元数据没有为我们提供任何其他信息,因此让我们要求 Sidekick 编码助手为我们提供解密例程的实际描述:



接下来,让我们运行脚本并看看输出Decryption Functions索引中得到了什么:



几秒钟之内,我们已经有了一些要查看的条目。该功能sub_401290看起来很有前途,让我们来看看:



是的。这就是我们要找的解密函数。


将解密函数转换为 Python


让我们看看是否可以将其转换为 Python,以便我们可以轻松地在 Analysis Workbench 脚本中运行它。由于 Sidekick Assistant 专注于较小的函数集,因此特别适合此类任务,因此让我们让 Assistant 为我们将其转换为 Python:



这很简单!


解密字符串


现在我们已经确定了解密函数并将其转换为 Python,让我们实际使用它来解密传递给它的所有字符串。由于我们要在二进制文件中搜索多个位置,在这些位置对数据调用自定义 Python 代码,并输出这些结果供我们查看,因此 Analysis Workbench 是完成这项工作的完美工具。所以让我们编写另一个脚本。


在分析工作台中,我们将通过点击汉堡菜单并选择来创建一个新的空脚本New Script。



我们将为脚本添加一个标题,粘贴我们的 Python 解密函数,给它一个新名字,并要求 Sidekick 编码助手使用给定的 Python 解密函数解密传递给该函数的所有字符串sub_401290。



让我们看看我们得到了什么。



运行更新后的脚本后,我们没有得到任何结果。发生这种情况的原因是传递给的字符串sub_401290在二进制文件中没有为其定义字符串变量,因此bv.get_string_at不会返回任何内容。Binary Ninja 没有为它们创建字符串变量的原因是它们是加密字符串。这在逆向工程工具中非常常见,因为它们在分析包含加密字符串的二进制文件时看起来不像真正的字符串。因此,我们需要通过直接从二进制文件中读取其字节来创建字符串。我们不必自己尝试这样做,只需让 Sidekick 为我们创建一个执行此操作的函数即可。同时,我们还让 Sidekick 更新脚本,以便在解密字符串时将调用指令和解密的字符串都输出到索引。



运行此脚本修订版后,我们收到此错误:



错误并不好玩,所以让我们让 Sidekick 来处理它(因为它可以访问输出控制台中的内容):



现在让我们运行它!



成功!


在 Code Insight Map 中查看解密的字符串


由于我们将解密的字符串输出到索引中,因此我们可以使用 Sidekick 的 Code Insight Map 查看引用这些解密字符串的函数之间的关系,并帮助我们了解二进制文件对这些字符串执行的操作。我们还运行High-Level Functions脚本(默认包含在 Analysis Workbench 中)来生成此二进制文件中高级函数的索引。



让我们向下滚动以查看更多内容:



现在我们已经解密了这个二进制文件中引用的字符串,我们可以很快了解这个恶意软件的一些功能 - 一个僵尸网络,它定期将有关系统和已安装的 AV 软件的信息发送到其 C2 服务器,并轮询以接收来自它的命令。


FreeBuf粉丝交流群招新啦!
在这里,拓宽网安边界
甲方安全建设干货;
乙方最新技术理念;
全球最新的网络安全资讯;
群内不定期开启各种抽奖活动;
FreeBuf盲盒、大象公仔......
扫码添加小蜜蜂微信回复「加群」,申请加入群聊