软件虚拟机保护分析资料整理

awesome-vmp

关于软件虚拟化保护(如VMProtect)的资料。

工具篇介绍了VM保护的现有分析工具,并进行了简单的试用分析。

文章篇介绍了VM保护相关的分析文章,包括对虚拟机的分析,及一些反混淆方法。

本项目发在了github上, https://github.com/lmy375/awesome-vmp
如果有其他好用的工具或者优秀的文章可以留言链接或者直接在github上提交 pull request,优秀的资源需要分享才能最大发挥其价值。

工具篇

FKVMP

  • 针对目标:VMProtect 1.x 2.x (大概到 VMProtect 2.09)
  • 类型:OllyDbg 插件
  • 开发者:Nooby
  • 功能:Handler 识别、还原 PCODE 等

FKVMP 是比较古老的一款 Ollydbg 插件,但在当时非常有名。

使用方法简单,在虚拟机入口处(push/call 或 jmp)右键 FKVMP -> start 即可。

下图是对如下代码

mov ebx, 0deadbeefh
mov eax, 0beefdeadh

使用 VMProtect 1.60 保护后, 使用 FKVMP 分析的结果(结果打印在 OD 的日志窗口中)。

可以所有Handler已经为指令都已经识别出来,初始化压栈的寄存器顺序也会打印出来。

本工具(可能是第1次完成)字节码的还原的实现(其实可以认为是虚拟机指令的反汇编)使对 VMProtect 的人工分析成为可能。

缺点是只支持单一的基本块,每次分析到 SetEIP 指令(实际就是跳转指令)就会停止,需要人工操作,去分析下一基本块。

VMP分析插件

  • 针对目标:VMProtect 1.x 2.x (大概到 VMProtect 2.09)
  • 类型:Ollydbg / Immunity Debugger 插件
  • 开发者:zdhysd
  • 功能:Handler 识别、虚拟字节码调试、表达式化简
  • 链接:https://bbs.pediy.com/thread-154621.htm
  • 最后更新时间:v1.4 2013/01/30

可以认为是 FKVMP 的超级加强版,在同类工具之中功能最为强大的工具。

首先该工具支持了跨基本块的分析,可以一次性将全部虚拟机字节码提取出来。除此外,还有许多亮点功能:

  • 虚拟指令级别的调试。可以像调试汇编一样调试虚拟机指令,可以单步运行一条虚拟指令,并查看虚拟寄存器、虚拟栈的信息。
  • 表达式转化及化简。本功能会在虚拟指令级别进行数据流和控制流的分析,进行字节码的收缩。 VMProtect 是栈机结构,同时有 NOR 逻辑的混淆膨胀,字节码的收缩还原一直是研究的重点,本工具可以完成字节码收缩过程,输出收缩后的表达式。唯一不同是没有转化成原始的 x86 代码。但在分析上,已经可以提供极为有力的参考。
  • 支持字节码的 Patch。由于加密的存在,字节码 Patch 一直是十分痛苦的过程,本工具可以像 Patch 普通指令一样 Patch 虚拟指令。
  • 支持自定义模板。模板包括 Handler 识别模板和表达式化简模板。该工具提供了模板文件及模板修改工具。理论上,可以通过对模板文件的修改使及兼容所有版本的 VMProtect 1.x 2.x。( 3.x 因为虚拟机结构变化不能支持)。

下图是工具使用截图。该工具以插件的形式,实现了一个与原生OD非常相似的VMP调试界面,寄存器、栈的内容可以实时查看。

使用方法简单,在虚拟机入口处(push/call 或 jmp)右键 VMP分析插件 -> 分析虚拟程序 完成分析。然后可以打开插件的虚拟指令窗口、调试窗口查看字节码并进行调试分析。

VMSweeper

  • 针对目标:VMProtect 2.x 、Code Virtualizer
  • 类型:Ollydbg 插件
  • 开发者:Vamit
  • 功能:VMProtect 保护下的 x86 代码还原
  • 最后更新时间:v1.5 2014

可以完成 VMP 保护代码还原的工具。 完全的代码还原是十分困难的,因此该工具稳定性不高,经常出现异常。但是某些简单样本的测试,确实有不错的还原效果。

使用方法:

  1. 使用纯净版 OD 加载插件,避免插件间冲突。
  2. Plugins -> VMPSweeper -> Analyze all VM reference
  3. 弹出窗口选要分析的 VM, 右键 Decode VM。
  4. 此时会自动在虚拟机入口点断下,F1 快捷键,VMSweeper会开始进行分析。
  5. 分析完成后,会弹出提示框重新运行进程。重新运行后, Plugins -> VMPSweeper -> Continue decode VM。继续分析。
  6. 如果分析没有产生任何异常,VMPSweeper 会把还原后的代码 Patch 到原本的虚拟机入口处。
  7. 但上述过程经常出错,可以在 OD 根目录下查找 VMS_xxx 文件夹,查看日志文件,*.log 文件中保存着还原的过程输出。

如下是log文件截取。

...

++++++++++++++++++++++++++++++++++++
  Section a12 final
++++++++++++++++++++++++++++++++++++

004100BC: push ebp
004100C2: rvm_38 = esp
004100C9: push esi
004100D5: push edi
004100F6: [rvm_38 + 0xFFFFFFFC] = 0
00410111: eax = [rvm_38 + 0xFFFFFFFC]
00410131: rvm_34 = [rvm_38 + 8]
00410167: eax = [eax * 4 + rvm_34]
00410186: rvm_10 = [rvm_38 + 0xFFFFFFFC]
004101A6: edi = [rvm_38 + 8]
004101EC: rvm_08 = [rvm_10 * 4 + edi + 4 + eax]
0041021C: eax = [rvm_38 + 0xFFFFFFFC]
0041023C: rvm_10 = [rvm_38 + 0x0000000C]
00410278: [eax * 4 + rvm_10] = rvm_08
00410292: rvm_34 = [rvm_38 + 0xFFFFFFFC]
0041029C: eax = rvm_34 + 1
004102D4: [rvm_38 + 0xFFFFFFFC] = eax
004102EF: edx = [rvm_38 + 0xFFFFFFFC]
0041030F: eax = [rvm_38 + 8]
0041032F: rvm_18 = [rvm_38 + 0xFFFFFFFC]
0041034F: eax = [rvm_38 + 8]
00410385: rvm_3C = [edx * 4 + eax]
00410466: edi = and ~and ~rvm_3C, [rvm_18 * 4 + rvm_24 + ~4], ~and rvm_3C, [rvm_18 * 4 + rvm_24 + 4]

...

这是还原出来的 x86 代码。其中 rvm 是寄存器未推断出结果导致的。完美还原的代码会形成 完整的 x86 指令。

该工具是少见的可以将 VMProtect 保护代码进行完整还原的工具,缺点是稳定性太差,对于稍复杂的程序,还原过程很大可能会出现异常报错。

根据工具的说明,似乎是应该支持 Code Virtualizer的。测试成功还原 Code Virtualizer 1.3.8 版本未成功。

Oreans UnVirtualizer

  • 针对目标:Oreans系列 Code Virtualizer / ThemIDA / WinLicense
  • 类型:Ollydbg 插件
  • 开发者:Deathway
  • 功能:Oreans 保护下的 x86 代码还原
  • 最后更新时间:v1.8 2014/02/04

可以支持 Oreans 系列保护工具早期版本的 x86 还原。但对新版本的 FISH/TIGER 等系列虚拟机效果不佳。

使用:在虚拟机入口,右键分析,如果还原成功会弹出还原代码的文本文件。

如下是对 Code Virtualizer v1.3.8 代码还原的结果示意。 如果还原成功则与原代码基本一致(对CISC体系效果较好)。

...

@Label_00409223
        00409252        MOV DWORD PTR [EBP+0xfffffffc],0x0
        00409263        MOV EAX,DWORD PTR [EBP+0xfffffffc]
        00409281        MOV DWORD PTR [EBP+0xfffffff8],EAX
        00409291        JMP 0x4c

@Label_00409297
        00409297        MOV ECX,DWORD PTR [EBP+0xfffffff8]
        004092AC        ADD ECX,0x1
        004092C3        MOV DWORD PTR [EBP+0xfffffff8],ECX

@Label_004092E2
        004092E2        MOV EDX,DWORD PTR [EBP+0xfffffff8]
        004092F2        CMP EDX,DWORD PTR [EBP+0xc]
        0040930A        JNB 0x7b2
        0040930F        MOV EAX,DWORD PTR [EBP+0xfffffff8]

...

VMAttack

从官方 demo 上看,应该只支持去混淆的 VMProtect demo 版。

2016 IDA插件大赛第2名

相关论文:Kalysch A, Götzfried J, Müller T. VMAttack: Deobfuscating Virtualization-Based Packed Binaries[C]// The, International Conference. 2017:1-10.

VirtualDeobfuscator

2013 年 Blackhat视频:  https://www.youtube.com/watch?v=hoda99l5y_g

其他

VMP 1.7 完整还原
http://bbs.pediy.com/thread-155215.htm

VMP Handler 分析插件 https://github.com/OoWoodOne/VMP_ODPlugin

Zeus--VMProtect分析及自动脱壳插件 by ximo http://www.52pojie.cn/thread-129047-1-1.html

VMP调试器
https://github.com/uvbs/VMPDBG2

CV 反编译
https://github.com/pakt/decv

Code Deobfuscator
https://forum.tuts4you.com/topic/37952-code-deobfuscator/
https://github.com/Pigrecos/CodeDeobfuscator

(这些工具我没有具体试用,不敢妄做评价,有兴趣的同学可以试用下并留言使用效果及说明)

文章篇

会议PPT

学术文章

  • Xie, H., Zhang, Y., Li, J., & Gu, D. (2017). Nightingale: Translating Embedded VM Code in x86 Binary Executables. Information Security.

  • Yadegari, B. and S. Debray (2015). Symbolic Execution of Obfuscated Code. ACM Sigsac Conference on Computer and Communications Security: 732-744.
  • Yadegari, B. and B. Johannesmeyer, et al. (2015). A Generic Approach to Automatic Deobfuscation of Executable Code. IEEE Symposium on Security and Privacy.
  • Kinder, J. (2012). "Towards Static Analysis of Virtualization-Obfuscated Binaries." Proc.working Conf.reverse Engineering: 61-70.
  • Coogan, K. and G. Lu, et al. (2011). Deobfuscation of virtualization-obfuscated software: a semantics-based approach. ACM Conference on Computer and Communications Security, CCS 2011, Chicago, Illinois, Usa, October.
  • Rolles, R. (2009). Unpacking virtualization obfuscators.
  • Sharif, M. and A. Lanzi, et al. (2009). Automatic Reverse Engineering of Malware Emulators. IEEE Symposium on Security and Privacy.

其他

点评

原文地址:https://www.cnblogs.com/Sendige/p/12040820.html

时间: 2024-11-02 19:26:27

软件虚拟机保护分析资料整理的相关文章

开源项目管理软件产品对比分析资料整理

目录 商业协作和项目管理平台 TeamLab(GPL v3) 基于Web的项目计划管理系统 NavalPlan(AGPL) 项目管理工具 DotProject(GPL) 项目管理系统 Collabtive(Open Source (GPL)) 项目管理和缺陷跟踪工具 Redmine(GPL licence) 通过对比选择最佳开源的基于Web的项目管理工具(仅供参考) 30 款最好的免费项目管理软件 商业协作和项目管理平台 TeamLab(GPL v3) TeamLab 是一个免费开源的商业协作和

虚拟机保护技术浅谈

转载于看雪论坛 对加密与解密的内容进行了一些总结.重新归纳整理,加入了自己的理解:希望对新手有所帮助. <加密与解密>第三版  第471页虚拟机保护技术  虚拟机概览     所谓虚拟机保护技术,是指将代码翻译为机器和人都无法识别的一串伪代码字节流:在具体执行时再对这些伪代码进行一一翻译解释,逐步还原为原始代码并执行.     这段用于翻译伪代码并负责具体执行的子程序就叫作虚拟机VM(好似一个抽象的CPU).它以一个函数的形式存在,函数的参数就是字节码的内存地址.     将虚拟机应用到商业中

软件加密保护方案

许多软件开发商认为软件加密即是保护软件不被复制就行了,在做加密的时候,终究加密开发者很少或从来没有对怎么加密进行计划,然后致使这样做出来的加密方案存在必定的弊端或缺乏,以下几点供咱们参阅. 1.开发环境开发环境在很大程度上会影响你对加密办法的挑选.开发环境一方面包含你用来开发的言语环境,另一方面也包含了软件运转的体系环境.假如是在 Windows 渠道上面运转的软件,可以挑选的加密办法会对比多,但假如是在 Linux 或其它操作体系下,可供挑选的加密办法就会少得多.关于那些需求织造跨渠道应用商品

使用VMware Workstation虚拟机保护数据

使用VMware Workstation虚拟机保护数据 虚拟化实践者之一2016/4/2610:53:13王老师,workstation虚拟机能不能实现,使用一定期限后,自动销毁或不能用啊王春海2016/4/2610:54:59你详细的描述一下你的要求虚拟化实践者之一2016/4/2611:04:46其实就是想对一个文件夹的内容保密,不想让别人拷走王春海2016/4/2611:05:01bitlocker虚拟化实践者之一2016/4/2611:05:19我们领导的意思,看能不能通过虚拟机来实现这

怎么使用Mac缓存清理软件来保护用户隐私

现在的生活中,我们会使用各种聊天工具QQ.微信是我们最常用的,如果我们没有对这些聊天信息进行清理,这些文件会一直保留下来,很多时候为了保证自己的信息安全性,防止这些信息占用过多的空间我们会将这些信息进行清理,每个人的清理方式各有不同. 小编为大家带来了一款能够彻底清除一切信息浏览记录的工具,让我们的mac更加纯净. 你可以在这里免费下载:http://wm.makeding.com/iclk/?zoneid=12989 图1:清理隐私 Cleanmymac3清理软件是现在mac用户使用最多的工具

Java虚拟机相关知识整理

1.java的内存区域 线程共享 (1)堆:是java虚拟机所管理的内存中最大一块,用于存放对象实例,所有对象实例和数组都在堆上分配 基于垃圾收集器分为新生代和老年代,并可以进一步划分为Eden,survivor,默认比例为8:1 Eden.From survivor.To survivor三个部分 依据是否开启线程私有的分配缓冲区(TLAB) 也存在OutOfMemoryError异常 (2)方法区:类信息,常量,静态变量等编译器编译之后的代码等数据 会产生内存OutOfMemoryError

Microsoft Azure Site Recovery (2) 配置虚拟机保护

继上一篇配置完成VMM保护后,登陆到Azure恢复服务,打开保管库受保护的项,可以看到我们VMM服务器中的云已经映射到了保管库,下面打开其中一个云,准备进行保护配置. 打开SilverCloud云后,选择配置保护设置. 目标选择为Microsoft Azure,然后选择相对应的订阅和存储账户.复制频率可选择30秒.5分钟和15分钟 接下来登陆到VMM服务器,打开需要保护的虚拟机的硬件配置并启用Hyper-V Recovery Manager保护. 继续回到Recovery服务,选择映射网络. 把

租房软件隐私保护如同虚设

导读 多位中介公司人员确认,他们确实能从安居客网站后台获得用户个人号码信息. 近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询.可电话刚挂不久,中介公司方面就掌握了赵先生的真实电话号码,个人信息疑似遭到泄露.多位中介公司人员确认,他们确实能从安居客网站后台获得用户个人号码信息. 公开资料显示,安居客房产网品牌创立于2007年,总部设在上海,是一家网上找房信息服务平台.目前

协议形式化分析资料整理

1.接近尾声把协议形式化分析的资料整理一遍 形式化分析工具 Scyther 软件资料以及 tool manual 在官网上可查  https://people.cispa.io/cas.cremers/scyther/\ scyther 形式化分析的协议 发布在作者 GitHub  https://github.com/cascremers/scyther 另外 使用所有形式化分析工具(proverif,maudenpa,CryptoVerif,ProVerif,Tamarin,cryptove