`
阅读更多
背景:现在由于手机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代码混淆等主流功能,对于动静态分析有着较强的防御能力。同时,应用安全加固服务完全基于二进制文件操作,无需移动应用开发者提供源代码,技术比较靠谱的第三方安全服务商可以建议开发者使用。
  • 大小: 76.9 KB
0
0
分享到:
评论
1 楼 YAQ-qq 2016-06-22  
欢迎留言交流

相关推荐

    ARM平台代码保护之虚拟化

    —— 代码保护之虚拟化。 我们知道程序的执行,是依靠CPU对于符合规范的指令集的解析处理。如果将原指令集通过自定义规范进行变形处理,生成新的指令集(称之为虚拟指令集),CPU将无法识别虚拟指令。此时若配合能够...

    基于PROTEUS的ARM虚拟开发技术

    而PROTEUS作为一款强大的电子电路仿真软件,为ARM开发提供了一个虚拟平台,使得开发者能够在实际硬件制造之前进行系统验证和调试,大大缩短了开发周期并降低了成本。本文将深入探讨如何利用PROTEUS与ARM进行虚拟开发...

    基于ARM虚拟化扩展的安全防护技术.pdf

    随着移动设备的普及,ARM处理器被广泛应用于智能手机、平板电脑等设备中,ARM虚拟化扩展技术也随之发展,为移动平台的安全防护提供了新的解决方案。本文将深入探讨ARM虚拟化扩展的相关概念、技术特点、与x86虚拟化的...

    ARM7开发源代码大全

    在ARM7架构中,启动代码通常会完成硬件初始化,设置内存管理单元(MMU)、中断控制器、时钟以及其他外设,并将控制权交给操作系统或应用程序。这部分源代码对于理解系统启动流程至关重要。 2. **CORE**: 这可能指的是...

    ARM开发详解全集

    在ARM平台上,理解内存管理机制至关重要,包括物理内存布局、虚拟地址映射以及内存保护单元(MMU)的工作原理。 8. **中断处理** 中断处理是实时系统中的关键部分,理解中断向量、中断服务例程(ISR)和中断...

    arm7入门开发源代码

    5. **内存管理单元(MMU)**:高端的ARM7处理器可能包含MMU,允许操作系统实现虚拟内存管理和保护。 对于初学者,学习ARM7开发通常涉及以下步骤: 1. **环境搭建**:首先需要安装交叉编译工具链,如GCC for ARM,...

    ARM嵌入式Linux系统开发详解源代码

    本篇将围绕“ARM嵌入式Linux系统开发详解源代码”这一主题,深入探讨相关知识点。 1. **ARM架构与指令集** - ARM架构:ARM(Advanced RISC Machines)是一种精简指令集计算机(RISC)架构,以其高效能、低功耗的...

    嵌入式开发教程之基于Proteus的ARM虚拟开发.pptx

    在本教程中,我们将探讨基于Proteus的ARM虚拟开发,这是一种无需实际硬件即可进行嵌入式系统学习和设计的强大工具。 首先,Proteus是一款由英国Labcenter electronics公司开发的电子设计自动化(EDA)软件,特别...

    基于Proteus的ARM虚拟开发

    基于Proteus的ARM虚拟开发,这一主题涵盖了现代电子技术和嵌入式系统设计的重要方面,尤其是在教育和研发领域。文章标题“基于Proteus的ARM虚拟开发”直指利用Proteus软件进行ARM处理器的仿真和开发过程,而描述部分...

    ARM开发详解 pdf

    - **MMU(内存管理单元)**:处理虚拟地址到物理地址的映射,实现内存保护和分页。 - **Cache**:提高数据访问速度,理解其工作原理和一致性问题。 8. **系统级设计** - **SoC(系统级芯片)**:包含CPU、外设、...

    ARM虚拟仿真平台的搭建

    ARM虚拟仿真平台的搭建是针对嵌入式系统开发的一种高效方法,尤其适合没有硬件仿真设备的学习者和开发者。这种平台利用软件工具,如Proteus和ADS,模拟真实的ARM硬件环境,从而在没有物理开发板的情况下进行设计和...

    ARM TrustZone的轻量级嵌入式虚拟化架构.pdf

    Xilinx ZC702是一款基于Zynq-7000 All Programmable SoC的开发板,集成了ARM Cortex-A9双核处理器,非常适合进行嵌入式系统和虚拟化技术的研究与开发。该平台提供了丰富的接口和资源,可以支持多种操作系统和应用,...

    ARM_ADS.rar_arm ads_arm 启动代码

    4. **内存初始化**:如果系统使用了MMU(Memory Management Unit),启动代码需要配置MMU的页表,以便正确映射物理和虚拟地址。 5. **外设初始化**:启动代码可能需要初始化一些关键的外设,如定时器、串口、GPIO等...

    基于Proteus的ARM虚拟开发技术

    **基于Proteus的ARM虚拟开发技术** 在嵌入式系统设计中,ARM处理器因其高效能、低功耗的特点,广泛应用于各种电子设备。而Proteus作为一款强大的电子电路仿真软件,为开发者提供了一个无需硬件即可进行原型验证和...

    matlab开发-robotarm

    这一步骤通常涉及模型的代码生成、配置目标平台以及处理硬件接口。 在开发过程中,用户可能会使用Simulink Design Verifier进行模型验证,以确保机器人手臂的运动符合预期,避免碰撞或其他安全问题。此外,他们可能...

    ARM基于LPC2124的温度控制系统Proteus仿真及源代码.zip

    总的来说,这个项目为学习嵌入式系统、ARM处理器以及模糊控制技术提供了一个实践平台,不仅能够帮助初学者巩固理论知识,还能提升动手能力,是进行课程设计或个人项目开发的宝贵资源。通过详细研究和实践,你将能够...

    ARM初始化文件详解

    在嵌入式系统开发中,ARM处理器的初始化文件扮演着至关重要的角色。它是系统启动过程中的核心部分,确保硬件正确配置,并为后续的系统加载和运行提供必要的环境。本文将深入探讨ARM初始化文件的结构、功能以及在实际...

    ARM应用处理器开发详解-基于Cortex-A8

    此外,Cortex-A8还集成了NEON媒体处理单元,用于加速多媒体和信号处理任务,以及虚拟化技术,使得在一个硬件平台上运行多个操作系统成为可能。 在开发过程中,熟悉ARM汇编语言和C/C++编程是基础。ARM汇编语言是底层...

Global site tag (gtag.js) - Google Analytics