简介:代码的虚拟化即不直接通过CPU而是通过虚拟机来执行虚拟指令。代码虚拟化能有效防止逆向分析,可大大地增加了代码分析的难度和所需要的时间,若配合混淆等手段,对于动静态分析有着较强的防御能力。

背景:现在由于手机APP安全性缺乏导致用户敏感数据泄露的例子越来越多,APP开发者应该从开发阶段到运营阶段都关注APP安全防护问题,无论是漏洞还是病毒等等。今日分享一个与App安全相关的技术之一   —— 代码保护之虚拟化。

1.1什么是代码虚拟化?

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

1.2为何将代码虚拟化?

  为了避免App资源被窃取、网络协议被破解、游戏被外挂摧毁等情况出现,越来越多的开发者不得不投入更多的时间和精力来考虑代码安全问题。但在移动平台上,攻和防却是不对等的,攻击者往往比防御者拥有更高级别的权限。随着技术材料的普及,使得移动平台的逆向分析变得容易,也有众多安全高手推出了很多加壳产品,虽说加壳以后对抗静态分析会有不错的效果,可是运行后会在内存里暴露原本的代码,从而使得攻击者抓住窗口期dump内存,再进行必要的修复,即可在IDA里面进行阅读分析。 将代码虚拟化后,可防止上述情况的发生,即使被dump,IDA也无法阅读被虚拟化的代码,因为程序运行时并不

会将虚拟指令集还原为原生指令集。所以攻击者只能转而去分析逻辑复杂性极高的虚拟机。这样大大地增加了代码分析的难度和所需要的时间,若配合混淆等手段,相信绝大部分攻击者会望而却步。

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

1.3如何将代码虚拟化?

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

1.4如何使用相关的加固产品?

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

【安卓安全】ARM平台代码保护之虚拟化的更多相关文章

  1. ARM平台的虚拟化介绍

    本篇博文主要介绍虚拟化的基本思想以及在arm平台如何做虚拟化,arm提供的硬件feature等等. 虚拟化技术简介 虚拟化技术 虚拟化是一个概念,单从这个概念的角度来看,只要是用某一种物品去模拟另一种 ...

  2. ARM平台指令虚拟化初探

    0x00:什么是代码虚拟化? 虚拟机保护是这几年比较流行的软件保护技术.这个词源于俄罗斯的著名软件保护软件“VmProtect”,以此为开端引起了软件保护壳领域的革命,各大软件保护壳都将虚拟机保护这一 ...

  3. 安卓5.0宣告了ARM平台全面进入64位时代

    安卓5.0宣告了ARM平台全面进入64位时代 2014年10月份,安卓5.0正式版发布了,安卓5.0支持64位CPU,安卓5.0全面启用ART运行模式,在程序安装的时候,进行预编译,新的运行环境能够使 ...

  4. 一文了解安卓APP逆向分析与保护机制

    "知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...

  5. 大型.NET商业软件代码保护技术 技术与实践相结合保护辛苦创造的劳动成果

    列举工作以来遇到的各种类型的软件所采用的代码保护技术,只讲原理不涉及技术细节实现,以避免产生法律问题.有些朋友说直接把代码放在Github开源下载,开源可以促进技术交流与进步,然而值钱的代码都积压在硬 ...

  6. QtCreator动态编译jsoncpp完美支持x86和arm平台

    如果是做嵌入式开发. 在Qt下支持JSon最好的办法,可能不是采用qjson这个库.QJson这个库的实例只提供了x86环境下的编译方法. Installing QJson-------------- ...

  7. [转载]Eziriz .NET Reactor 4.7.0.0 官方原版+破解补丁(强大的代码保护和软件防盗版工具)

    Eziriz .NET Reactor 是一个强大的代码保护和软件防盗版工具,完全由.NET框架编写..NET Reactor支持NET平台的软件许可系统,并支持NET程序集所有语言.当.Net编译器 ...

  8. 移植mysql到嵌入式ARM平台

    移植MySQL到嵌入式ARM平台  MySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档: http://blog.chinaunix.net/space.p ...

  9. 小试.NET代码保护软件(代码混淆、加密)

    有着微软人性化的开发工具VISUAL STUDIO和MSDN详尽的帮助,.NET 的开发效率的确高. 但是由于.NET同JAVA一样都采用中间语言.虚拟机/SDK等诸多特质,而且高等语言的类库编码规范 ...

随机推荐

  1. PHP审计小记

    /* 在漏洞时代看了一篇文章,说到一个通用函数如何绕过.那么我就来看看这套程序 */ foreach($_REQUEST as $_k=>$_v) { if( strlen($_k)>0 ...

  2. information_schema系列五(表,触发器,视图,存储过程和函数)

    这个系列的文章主要是为了能够让自己了解MySQL5.7的一些系统表,统一做一下备注和使用,也希望分享出来让大家能够有一点点的受益. 1:TABLES TABLES这张表毫无疑问了,就是记录的数据库中表 ...

  3. 旋转机械中Pitch Change的经验

    针对CFX (Compound File EXplorer)中rotor-stator interface 网格的处理,Pitch Change方法提供了四种交接算法(intersection alg ...

  4. zTree开发下拉树

    最近,因为工作需要一个树形下拉框的组件,经过查资料一般有两种的实现方法.其一,就是使用zTree实现:其二,就是使用easyUI实现.因为公司的前端不是使用easyUI设计的,故这里我选择了zTree ...

  5. Android_demo之生成二维码

    今天我们来学习一个自动生成二维码 的写法.我们经常能见到各种二维码,比如公众号的二维码,网址的,加好友的,支付的二维码等等.其实每一个二维码只是利用图片的形式展示出来的,实际是一些字符串.而这个字符串 ...

  6. npm isArray源码

    module exports的是一个函数. !! val是为了将val转化成布尔值. var isArray = Array.isArray; /** * toString */ var str = ...

  7. docker 数据卷 权限

    1,在运行容器的时候,给容器加特权: 示例:docker run -i -t --privileged=true -v /home/docs:/src waterchestnut/nodejs:0.1 ...

  8. Python第二模块(文件和函数)

    1. 集合操作    集合的特点:无序,不重复的数据组合 集合的作用: 去重,将列表变为集合,就会自动去重 关系测试,测试两组数据之间的交集.差集.并集关系 常用操作: #创建集合 s = {1,2, ...

  9. Cannot find or open the PDB file问题的解决

    'testcv.exe' (Win32): Loaded 'D:\Documents\Visual Studio 2013\Projects\testcv\x64\Debug\testcv.exe'. ...

  10. jQuery HTML 操作

    jQuery 包含很多供改变和操作 HTML 的强大函数. 改变 HTML 内容 语法 $(selector).html(content) html() 函数改变所匹配的 HTML 元素的内容(inn ...