一种新型恶意软件混淆技术的逆向分析

常见的逆向工程工具往往都是针对基本假设而开发的,例如:二进制文件通常符合编译器生成的标准模式、指令不会跳转到其他指令、一些情况下符号是可用的等等。逆向工程师可能都知道,如果这些假设不符合实际,那么逆向的工作量将会大大增加。这将造成逆向工具出现问题,甚至完全不可用。本文主要讲述了这样的一个场景,并提出了一个效率较高的解决方案。

这个二进制文件所使用技术的与众不同之处,在于它应用的规模。通常,这种技术用于模糊字符串,也不会超过几十个字节。然而,这个二进制文件使用该技术构建两个嵌入式的可执行文件,总共大约16KB的数据,因此,大约有16000字节的内容使用了这种技术,如上图所示,每一部分都由7个字节的指令实现。上图所示的函数中,包含大约118KB的代码,这占据了整个二进制文件的25%以上。即使没有使用这种技术,该函数也会很大,因为它除了上面的指令之外,还有大约7KB的变异代码。

第二,每次写入栈变量时,都有一个赋值语句:

借助IDA的帮助,我们可以成功对这个函数进行处理。使用IDA来分析这一函数并没有出现明显的速度差异。但是,如果使用Hex-Rays来处理,将会出现明显的问题。其实,这并不能说明Hex-Rays的性能较差,毕竟这个函数有118KB之大,Hex-Rays将会进行比IDA更多的处理。首先,我必须修改Hex-Rays反编译选项,从而可以反编译这一函数:

1、在对特定二进制文件进行逆向工程时,我经常多次使用File->Producefile->Create.cfile…菜单命令。该函数会在遇到每个命令时出现短暂的中断。

2、某些插件,例如Referee,最好与上述提到的命令一起使用。

3、当以交互方式(例如通过重命名变量或添加注释)在此函数上使用反编译器时,UI会变得非常缓慢,且可能会无响应。

4、随机查看指定函数的交叉引用,或者来自特定函数的交叉引用的过程将非常缓慢。对于反编译错误的函数,我们必须要等待反编译器完成。

基于上述原因,我们决定采用更加有效的方案:

1、通过相应的112KB编译代码,提取写入栈中的两个.bin文件;

2、将这些.bin文件修补到数据库之中;

3、使用一个补丁,调用memcpy()替换112KB的指令;

4、修补函数的代码,分支出超过112KB的栈写入。

我要做的第一件事,就是将栈写入的Hex-Rays反编译结果复制粘贴到自己的文本文件中。然后,我们迅速地进行一些健全性检查,以确保所有写入操作能够按顺序进行,我使用了一些正则表达式的搜索和替换操作,并且采用了手动编辑,来将数据清理成我可以在Python中使用的格式。

接下来,我还写了几行Python代码,将数据保存为二进制文件:

在这一位置,我使用IDA的Edit->PatchProgram->Assemble…命令,将一个较小的补丁写入相应的函数:

经过一些调整,并且使用十六进制编辑其结果后,我的补丁被成功安装:

然后,我使用两行IDC脚本,将二进制文件作为数据,加载到正确的位置:

之后,导航栏显示,大约31%的文本部分已经转换为数据。

通过本文中的案例,可以看出,如果我们足够了解所使用的工具,就能找出导致问题的原因,从而可以进一步解决这一问题。始终保持好奇心,并积极进行实验,并且不要只想到次优的逆向工程方案而不再去积极探索是否有更加简单的解决方案。

THE END
1.有哪些经典的人工智能算法?算法流程图和伪代码 为了使大家更好地理解,这边给出作者算法的流程图和伪代码,非常清晰!如果实在看不https://www.zhihu.com/question/38648973/answer/3600888761
2.KNN算法的伪代码51CTO博客已为您找到关于KNN算法的伪代码的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及KNN算法的伪代码问答内容。更多KNN算法的伪代码相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。https://blog.51cto.com/topic/c7b29299701394b.html
3.1.c语言:用伪代码表示算法卷积神经网络(Convolutional Neural Network,CNN)是深度学习中的一个核心技术,通过对输入数据进行卷积操作,提取特征,从而实现分类或回归等任务。本文将围绕卷积神经网络,探讨如何使用伪代码表示算法。 卷积神经网络的伪代码表示 卷积神经网络(CNN)主要包括以下几个部分:输入层、卷积层、池化层、全连接层和输出层。下面我们https://developer.aliyun.com/article/1457673
4.基于网络社区发现的标签传播聚类算法2.5 算法伪代码 根据以上定义, 本文算法分为4个步骤: 首先对数据集进行网络化; 之后, 利用节点相似度对节点标签进行预处理, 以提高后续标签传播的稳定性; 在标签传播阶段, 用节点影响力辅助标签选择, 进一步降低标签传播的随机性; 最后, 通过对社区的内聚度进行判断, 对内聚度较小的社区进行合并优化, 以提高https://c-s-a.org.cn/html/2020/12/7712.html
5.算法用模拟退火(SA,SimulatedAnnealing)算法解决旅行商问题2.4 模拟退火算法伪代码 相信通过上面的讲解,大家已经对模拟退火算法认识得差不多了。下面我们来看看它的伪代码是怎么实现的。 03 使用模拟退火算法解决旅行商问题 旅行商问题属于所谓的NP完全问题。精确的解决TSP只能通过穷举所有的路径组合,其时间复杂度是O(N!) 。而使用模拟退火算法则可以较快速算法一条近似的最https://cloud.tencent.com/developer/article/1424760
6.什么是伪代码?如何编写伪代码?C#伪代码是一种用于描述算法或程序逻辑的近似代码表示形式,它并不是一种特定的编程语言,而是一种高级描述工具。伪代码使用类似于编程语言的结构和语法,但更加简洁和易于理解。它的目的是帮助程序员和其他相关人员理解算法或程序的逻辑流程,而不用拘泥于具体的编程语言细节。 https://download.csdn.net/blog/column/12416302/133873748
7.伪代码是什么?如何写一个伪代码?野牛程序员伪代码是一种近似于编程语言的描述工具,用于描述算法或程序的逻辑结构,而不依赖于具体的编程语言语法。它的目的是帮助程序员以一种简洁易懂的方式表达算法的思想,而不必关注具体的语法细节。 编写伪代码的主要目标是清晰地传达算法的思路,使其他人能够理解你的算法设计。以下是一些编写伪代码的基本准则: http://yncoders.com/show/1179
8.科学网—模拟退火算法求最优解(转载)补充:模拟退火算法与初始值无关,算法求得的解与初始解状态S(是算法迭代的起点)无关;模拟退火算法具有渐近收敛性,已在理论上被证明是一种以概率l 收敛于全局最优解的全局优化算法;模拟退火算法具有并行性。 三、模拟退火算法的代码实现 1)伪代码: while(T > T_min) https://blog.sciencenet.cn/blog-1813407-893984.html
9.MapReduce求解物流配送单源最短路径研究AET(5)如果每次Reduce后,结果收敛,则停止计算;如果未收敛,则继续发给下一轮的Map过程,多次迭代计算直到color值全部为2,得到最终的最短路径,算法结束。 MapReduce算法流程如图1所示。 1.3 MapReduce算法伪代码 (1)MapReduce的第一次迭代伪代码,Map部分为: http://www.chinaaet.com/article/218820
10.ID3决策树以及Python实现详细过程python二、决策树学习算法伪代码: 决策树的生成是一个递归的过程,在决策树基本算法中,有三种情形会导致递归返回: 当前结点包含的样本全属于同一类别,无需划分;当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;当前结点包含的样本集合为空,不能划分; https://www.jb51.net/python/311079kt3.htm
11.TCP是怎样工作的PDF下载Java知识分享网本书理论与实践相结合,在详细讲解TCP原理后,还引领读者搭建模拟环境,使用Wireshark和ns-3等工具模拟TCP的运行机制,观察拥塞控制算法的执行,并辅以伪代码,帮助读者全面理解TCP技术。 资料目录: 第1章 TCP入门 确保传输可靠性 1 1.1 通信与协议 OSI参考模型、TCP/IP和RFC 2 OSI参考模型 2 TCP/IP 10 分层模型下http://www.java1234.com/a/javabook/javabase/2024/0329/25034.html
12.伪代码伪代码是不用于机器解释的程序代码,仅用于说明范例或算法。它主要类似于混合了自然语言和数学符号的高级编程语言。使用伪代码,可以独立于底层技术来描述程序流程。因此,它通常比真正的程序代码更紧凑、更容易理解。另一方面,它比自然语言的描述更正式,因此更清晰,也更https://vibaike.com/371954/
13.面向DTN感染路由协议的缓存管理算法表1MPBBM算法参数表 MPBBM算法在替换消息时,依据每条消息的MPBBM值进行降序排序,该算法认为优先级高的消息为活跃消息,而优先级低的消息为非活跃消息,因此排序的结果为活跃度依次降低的消息队列。表 2为MPBBM算法优先替换非活跃消息的算法伪代码。 表2MPBBM算法伪代码 https://www.juestc.uestc.edu.cn/fileDZKJDX_ZKB/journal/article/dzkjdxxbzrkxb/2015/3/HTML/201544403.htm