美文网首页移动安全Android开发经验谈
ARM平台代码保护之虚拟化

ARM平台代码保护之虚拟化

作者: 御安全_李大师 | 来源:发表于2016-06-06 15:45 被阅读84次

什么是代码虚拟化?

我们知道程序的执行,是依靠CPU对于符合规范的指令集的解析处理。如果将原指令集通过自定义规范进行变形处理,生成新的指令集(称之为虚拟指令集),CPU将无法识别虚拟指令。此时若配合能够解析虚拟指令集的解释器(称之为虚拟机),就可以达到不直接通过CPU而是通过虚拟机来执行虚拟指令。这个过程就叫做代码的虚拟化。

为何将代码虚拟化?

为了避免App资源被窃取、网络协议被破解、游戏被外挂摧毁等情况出现,越来越多的开发者不得不投入更多的时间和精力来考虑代码安全问题。但在移动平台上,攻和防却是不对等的,攻击者往往比防御者拥有更高级别的权限。

随着技术材料的普及,使得移动平台的逆向分析变得容易,也有众多安全高手推出了很多加壳产品,虽说加壳以后对抗静态分析会有不错的效果,可是运行后会在内存里暴露原本的代码,从而使得攻击者抓住窗口期dump内存,再进行必要的修复,即可在IDA里面进行阅读分析。 将代码虚拟化后,可防止上述情况的发生,即使被dump,IDA也无法阅读被虚拟化的代码,因为程序运行时并不会将虚拟指令集还原为原生指令集。所以攻击者只能转而去分析逻辑复杂性极高的虚拟机。这样大大地增加了代码分析的难度和所需要的时间,若配合混淆等手段,相信绝大部分攻击者会望而却步。

当然,为了相对的安全也会付出相对的损失。虚拟指令集的执行效率会比原生指令集稍低一些,所以被虚拟化保护的代码往往都是最关键最核心的部分。

如何将代码虚拟化?

基于上述理论,我们发现有最关键的两个部分是必需的,一是新的指令集,二是虚拟机。对于新的指令集,我们可以暂且将一些带有opcode的指令进行变形,生成的数据直接回填回原文件。将文件拖进IDA后会发现指令已经错乱,达到抵抗静态分析的目的。 此时若运行程序,会发生crash,因为还缺了虚拟机。为什么叫虚拟机?因为需要模拟出当前代码运行所需要的环境,包括寄存器、堆栈等。将所需的虚拟环境初始化后,解析执行虚拟指令,同时注意保护和恢复现场。

如何能使用相关加固产品?

御安全加固作为腾讯移动安全实验室在代码保护方向上的主打产品,已经实现了ARM平台的代码虚拟化保护功能,并综合了安卓加密压缩壳、安卓apk代码混淆等主流功能,对于动静态分析有着较强的防御能力。同时,本产品的应用安全加固服务完全基于二进制文件操作,无需开发者提供源代码。


来源:御安全技术博客

相关文章

  • ARM平台代码保护之虚拟化

    什么是代码虚拟化? 我们知道程序的执行,是依靠CPU对于符合规范的指令集的解析处理。如果将原指令集通过自定义规范进...

  • 几维安全虚拟化技术&源码虚拟化保护技术效果分析

    先简单给大家分析源码虚拟化保护技术的概述, 源码虚拟化保护是一款移动端的VM虚拟化加密软件[KiwiVM],基于C...

  • 读书笔记| (二)ARM9 嵌入式学习:代码 & 原理篇

    读书笔记| ARM9 嵌入式学习 1. 启动代码 1.1 功能:ARM处理器初始化 硬件初始化 程序代码的搬移 程...

  • 虚拟化技术

    虚拟化技术 分类 按虚拟对象 操作系统虚拟化 平台虚拟化 按方案 软件虚拟化 硬件虚拟化 虚拟机管理器 虚拟化技术...

  • 虚拟化笔记

    1.虚拟化:计算机资源的抽象和模拟 2.平台虚拟化实现方式 3.cpu虚拟化 4.内存虚拟化 5.IO虚拟化

  • 虚拟化技术入门

    虚拟化技术今天,虚拟化技术的各方面都有了进步,虚拟化也从纯软件逐深入到处理器级虚拟化,再到平台级虚拟化乃至输入/输...

  • Android 5.0-9.0特性(概要)

    5.0特性 Material Design设计风格 ART虚拟机,实现跨平台编译,ARM、X86、MIPS,放弃D...

  • Linux内核源代码的目录结构

    arch 包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、arm64、powerpc、...

  • 出书——万物虚拟

    idea虚拟银行,虚拟工作,虚拟物品,虚拟服务 1虚拟化=实体化 消费习惯转型教育 2虚拟平台 提供商,渠道商,分...

  • Android体系架构

    Android 是一种基于 Linux 的开放源代码软件栈,主要应用于ARM平台,但不仅限于ARM,通过编译控制,...

网友评论

    本文标题:ARM平台代码保护之虚拟化

    本文链接:https://www.haomeiwen.com/subject/mytddttx.html