首页
论坛
专栏
课程

[翻译]手把手静态分析FinSpy VM:第三部分,去虚拟化

2018-3-19 10:25 1889

[翻译]手把手静态分析FinSpy VM:第三部分,去虚拟化

2018-3-19 10:25
1889

原文:http://www.msreverseengineering.com/blog/2018/2/21/finspy-vm-unpacking-tutorial-part-3-devirtualization

1. 概述

这是我关于静态分析FinSpy VM系列文章的第三部分也是最后一部分。第一部分对FinSpy的x86实现进行了反混淆处理 ,第二部分分析了VM,对特定样本的字节码格式编写了反汇编程序。现在我们的任务是重构虚拟化之前的x86代码。和以前一样,相关文件在这里

添加了去虚拟化代码并大部分分析过的IDB

去虚拟化程序

具有各种程度简化的FinSpy VM字节码反汇编结果

去虚拟化代码的二进制文件

由于FinSpy VM是一种强度低效果差的保护,分析并不是很困难。我们分析的样本的字节码程序中超过一半的VM指令已经包含原始x86机器码。事实证明,FinSpy只能真正实现少数x86指令的虚拟化,并且这种简单的模式匹配对于重构原始代码来说非常有效。这也许是我所知道的最简单的值得称之为虚拟化混淆器的软件保护——这对于实践更复杂的软件保护来说是很好的例子。      

第一部分一样,我试图用逐步分析的教程的风格来编写。我们从分析FinSpy VM字节码反汇编的基本原理开始,并展示所有步骤(以及我写的代码)。希望我已经设法展现了观察的过程、设计中考虑的问题、采取的包括错误的步骤在内的行动,最重要的是,分析过程反复试错的本质。

2.组织概览

这部分写得比预期更长,也更困难。事实上,把这个文档写成教程比起做这项工作要困难得多。我希望这一努力在教育价值方面有所回报。因为我个人不喜欢彼此之间没有很好的隔离的大段文档,所以我决定将去虚拟化过程和本文档分成许多阶段,每个阶段都在我自己的个人博客中。它们目前在线并可供阅读,链接就在下面。每个单独的部分链接到该阶段使用的代码和二进制文件。

简要介绍每个阶段的内容,附带各个部分的链接:

1.第3部分,第1阶段:分析和反混淆FinSpy VM字节码程序。在第二部分中,我们分析了FinSpy VM及其指令集,并最终为FinSpy VM程序编写了反汇编程序。这一阶段首先回忆FinSpy VM指令集。接下来,我们从分析FinSpy VM字节码程序的基本原理开始。首先,我们为我们的FinSpy VM反汇编程序添加一个有用的功能。接下来,我们分析第2组VM指令——在VM字节码程序用于混淆。我们确定几种模式,并编写代码来检测和简化FinSpy VM字节码程序中这些模式的实例。经过对反汇编程序的一个小调整之后,FinSpy VM字节码程序现在已准备好被去虚拟化为x86机器代码。

2.第3部分,第2阶段:初始去虚拟化。上一阶段将FinSpy VM字节码程序整理成方便去虚拟化的合适的形式。这一阶段首先讨论去虚拟化各个FinSpy VM指令的理论。接下来,我们编写一个工具来去虚拟化FinSpy VM字节码程序——该工具以FinSpy VM程序的反汇编为输入,并生成一个不再依赖于VM的x86机器代码blob。在产生输出之后,我们接着检查去虚拟化的初始结果以确定一些缺陷和剩余的任务,然后才能完成去虚拟化。这一阶段最后会检查去虚拟化输出结果来解决其中的一个问题。

3.第3部分,第3阶段:函数调用去虚拟化。前一阶段产生的去虚拟化代码在完全可用之前仍然存在一些需要修正的缺陷。事实证明,所有这些缺陷都与FinSpy VM如何处理函数调用和函数指针有关。我们讨论问题的根源,并确定解决问题需要做些什么。然后我们讨论一些我们可能用来解决问题的策略,包括一些涉及x86仿真的复杂策略。我们不会研究那么复杂。 

4.第3部分,第4阶段:第二次去虚拟化。上一阶段收集关于虚拟化函数的信息为第二次去虚拟化尝试做准备。此阶段将这些信息合并到去虚拟化过程中,然后重新检查去虚拟化代码是否存在缺陷。在修复剩下的一个主要问题和两个小问题之后,现在已经为样本提供了完整的去虚拟化的x86机器代码。用IDA加载去虚拟化代码,我们的去虚拟化之旅就完成了。 

在第四阶段完成之后,我接下来完整分析了去虚拟化的FinSpy dropper。我可能会发布一些我没有看到被广泛记录的技术,并且我可能会发布对dropper的完整分析。然而,写作还没有完成,也不属于这个关于去虚拟化的博客系列。

请享用。



[推荐]看雪企服平台,提供安全分析、定制项目开发、APP等级保护、渗透测试等安全服务!

最后于 2018-3-29 19:14 被houjingyi编辑 ,原因:
上一主题 下一主题
最新回复 (3)
Lnju 1 2018-3-19 18:12
2
0
mark    感谢分享
穆恩 3 2018-3-26 10:54
3
0
楼主辛苦,第3部分的具体几个小节也有译版了么
houjingyi 8 2018-3-26 14:01
4
0
穆恩 楼主辛苦,第3部分的具体几个小节也有译版了么
这个系列肯定是会翻译完的,不过需要一段时间
最后于 2018-3-26 14:01 被houjingyi编辑 ,原因:
游客
登录 | 注册 方可回帖
返回