【安卓安全】ARM平台代码保护之虚拟化
简介:代码的虚拟化即不直接通过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平台代码保护之虚拟化的更多相关文章
- ARM平台的虚拟化介绍
本篇博文主要介绍虚拟化的基本思想以及在arm平台如何做虚拟化,arm提供的硬件feature等等. 虚拟化技术简介 虚拟化技术 虚拟化是一个概念,单从这个概念的角度来看,只要是用某一种物品去模拟另一种 ...
- ARM平台指令虚拟化初探
0x00:什么是代码虚拟化? 虚拟机保护是这几年比较流行的软件保护技术.这个词源于俄罗斯的著名软件保护软件“VmProtect”,以此为开端引起了软件保护壳领域的革命,各大软件保护壳都将虚拟机保护这一 ...
- 安卓5.0宣告了ARM平台全面进入64位时代
安卓5.0宣告了ARM平台全面进入64位时代 2014年10月份,安卓5.0正式版发布了,安卓5.0支持64位CPU,安卓5.0全面启用ART运行模式,在程序安装的时候,进行预编译,新的运行环境能够使 ...
- 一文了解安卓APP逆向分析与保护机制
"知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...
- 大型.NET商业软件代码保护技术 技术与实践相结合保护辛苦创造的劳动成果
列举工作以来遇到的各种类型的软件所采用的代码保护技术,只讲原理不涉及技术细节实现,以避免产生法律问题.有些朋友说直接把代码放在Github开源下载,开源可以促进技术交流与进步,然而值钱的代码都积压在硬 ...
- QtCreator动态编译jsoncpp完美支持x86和arm平台
如果是做嵌入式开发. 在Qt下支持JSon最好的办法,可能不是采用qjson这个库.QJson这个库的实例只提供了x86环境下的编译方法. Installing QJson-------------- ...
- [转载]Eziriz .NET Reactor 4.7.0.0 官方原版+破解补丁(强大的代码保护和软件防盗版工具)
Eziriz .NET Reactor 是一个强大的代码保护和软件防盗版工具,完全由.NET框架编写..NET Reactor支持NET平台的软件许可系统,并支持NET程序集所有语言.当.Net编译器 ...
- 移植mysql到嵌入式ARM平台
移植MySQL到嵌入式ARM平台 MySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档: http://blog.chinaunix.net/space.p ...
- 小试.NET代码保护软件(代码混淆、加密)
有着微软人性化的开发工具VISUAL STUDIO和MSDN详尽的帮助,.NET 的开发效率的确高. 但是由于.NET同JAVA一样都采用中间语言.虚拟机/SDK等诸多特质,而且高等语言的类库编码规范 ...
随机推荐
- DICOM图像像素值(灰度值)转换为CT值
CT值的单位是Hounsfield,简称为Hu,范围是-1024-3071.用于衡量人体组织对X射线的吸收率,设定水的吸收率为0Hu. 在DICOM图像读取的过程中,我们会发现图像的像素值有可能不是这 ...
- 第六百零七八天 how can I 坚持
昨天去跟着谈了个项目,涨了些见识吧,关注下客户关注的,多考虑些,昨天谈完就下班,陪着sy去了趟西单换电池,苹果的售后也真是挺垃圾的. 今天本来是要搭搭环境的,结果代码没搞来,明天去客户那边搞代码,感觉 ...
- C#的自定义滚动条
VS工具箱自带的滚动条,不能设置颜色. 在网上找资源,找到一个控制TextBox的垂直滚动条,链接为http://www.cnblogs.com/2seek/p/4455079.html 在这个的基础 ...
- ASP.NET页面回车键触发Button按钮事件问题
首先了解一下Button.UseSubmitBehavior属性. 获取或设置一个布尔值,该值指示 Button 控件使用客户端浏览器的提交机制还是 ASP.NET 回发机制. 如果该控件使用了客户端 ...
- 线程+IO流
第十八天知识点总结 线程的停止: 1.停止一个线程,一般是通过一个变量来控制. 2.如果需要停止一个处于一个等待状态的线程,那么需要配合interrupt方法来完成 守护线程(后台线程):在一个进程中 ...
- Web应用程序项目XX已配置为使用IIS
今天在看开源项目Umbraco是,出现一个项目加载不了,并报如下错误: Web应用程序项目Umbraco.Cms.Web.UI已配置为使用IIS.若要访问本地IIS网站,必须安装下列IIS组件..,如 ...
- IDL中的HRESULT值
IDL中的HRESULT值
- VC++ 判断文件或文件夹是否存在的快捷方法 _access
_access函数 int _access( const char *path, int mode ); int _waccess( const wchar_t *path, int mode ); ...
- jquery 原理
/* * my-jquery-1.0 *//* * 网上也有很多实现的版本,不过这是我在我自己的理解下写的,加上注释,希望可以解释清楚.*//* * 整个jquery包含在一个匿名函数中,专业点叫闭包 ...
- 56992 vuser_init.c(12): Error: Socket descriptor not found.
Loadrunner 运行场景时提示" vuser_init.c(12): Error: Socket descriptor not found. Hint: the problem mi ...