随着移动应用和IoT设备的普及,大量的硬件抛弃了传统的x86架构,选择使用能耗低、性价比高的ARM芯片,ARM指令级渐渐成为主流,但随之而来的,是愈发严峻的安全问题。

早期的加壳产品主要利用压缩加密技术对文件进行整体性保护,但随着逆向技术的提升,整体性的文件保护方案已经被攻克,于是加壳产品引入虚拟机概念,可以实现函数级的代码控制流保护,加密的颗粒度更加细致,破解难度呈几何级增加。

压缩加密

技术原理类似桌面应用的「压缩壳」,将 SO 文件中的代码段压缩或加密,在入口函数中解密再执行。

这种保护方式可以防止直接使用反编译工具打开反编译,但在运行过程依旧可以直接被 Dump 出来再反编译。后来又出现了「自定义 Linker」等方式的保护方式,这样可以隐藏一些文件格式信息,但依旧解决不了函数被Dump后的反编译问题。

由此可见,文件级的整体保护方案无法应对高等级的安全挑战,加固技术需要进一步升级,针对指令进行保护。

基于LLVM的代码保护方案

由于在Android下实现原生的函数级代码控制流保护技术难度太大,所以大部分的产品,都采用了弯道超车的方案,基于开源的OLLVM「由瑞士西北应用科技大学安全实验室在2010年发起的一个项目」进行改造,以实现函数级的代码混淆,在相当长的一段时间内,基于LLVM的代码保护技术,成为函数级保护的主流方案。

虽然基于LLVM的代码保护方案可以在一定程度上起到防止反编译的效果,但依旧存在很多问题,需要由新的解决方案替代。

虽然使用OLLVM进行保护后,可以在一定程度上起到防止反编译的作用,但依旧存在很多问题。

可以被反编译

由于 OLLVM 是在编译过程中对 LLVM IR 进行了处理,IR 属于架构无关指令,在 LLVM 后端依然要生成平台相关的指令,所以最终只是变成了「更加复杂的 C/C++ 代码」而已。

边界清晰

通过「基本块」拆分,虽然函数中的逻辑块变得很分散,但它们依旧排列在一起,函数有明确的起始和结尾。

函数间引用关系可见

混淆对象受限于 IR 指令,无法精细的对 Native 指令进行操作,使得保护后的代码仍然可以被反编译工具用 「交叉引用」 搜索到,对函数间调用关系的保护效果差。

ARM-虚拟化保护技术

ARM-VM 技术借鉴了桌面应用中对 x86 指令的虚拟化保护思路,将其完整地适配到了 ARM 平台,该技术的实现完全独立,直接对编译生成的二进制文件进行保护。

基于ARM-VM 技术的保护过程无需配置编译器,由单独的工具完成。典型的工具如:Virbox Protector。

ARM-虚拟化保护方案优势

无法被反编译

通过指令切片,间接跳转等处理,生成的指令块无法被 IDA 分析,只能查看汇编指令。

无函数边界

通过链接器乱序再重定位,生成的指令块在可执行文件中的位置是随机的,函数保护后变成了无数个随机位置的指令碎片,无法知道函数的边界。

更精细的保护粒度

直接对 ARM 指令保护,可以更精细的控制指令和寄存器,灵活性高,能够达到更高的安全性上限。

适应性高

直接处理 ARM 指令,不受限于开发语言和语法标准,几乎可以保护任何编译为 ARM 架构的程序,如 golang 等。

支持工具推荐

支持ARM 虚拟化保护方案的工具:Virbox Protector

开发环境支持

Windows、Linux、macOS。

开发语言支持

C、C++、Objective-C、Swift、go、汇编语言等。

架构支持

X86、x64、ARM32、ARM64

申请试用

https://shell.virbox.com/apply.html

ARM Linux ELF加壳方案相关推荐

  1. linux srelf 加壳代码,浅谈被加壳ELF文件的DUMP修复

    前面的文章中,我已经介绍了如何调试被加壳的ELF,这里不在叙述,直接进入正题,以某加固为例,如何DUMP和修复被加壳的ELF,使其能调试加载 我们先来看看被加壳ELF的头和Program Header ...

  2. ionic 安卓apk签名_安卓 APP 三代加壳方案的研究报告

    安卓的加固方案是从 19 年底开始写的,到现在为止差不多快一年了,写这个目的还是学习怎么脱壳,前几个月再看雪看到有人直接分析壳来学习,不过我感觉从加壳写起也是一种浪漫.因为个人原因,在类指令抽取壳那里 ...

  3. linux so 加壳,AndroidLinker与SO加壳技术之下篇

    2.4 链接 链接过程由 soinfo_link_image 函数完成,主要可以分为四个主要步骤: 1. 定位 dynamic section, 由函数 phdr_table_get_dynamic_ ...

  4. UPX对Android上ELF加壳使用过程中的若干问题总结

    1. UPX中使用的压缩算法有三种,最早是UCL,然后加入了NRV,3.91版本又加入了LZMA.按照UPX源码中的文档来说,UCL压缩效率是相对较低的,但是好处是OpenSource的,NRV效率较 ...

  5. android 加壳 方案,android加壳思路

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 对java及dex代码保护的技术发展:第一代 dex文件加密,打包.在运作时通过一个自定义的类加载器进行解密. 第二代 ...

  6. 压缩加壳工具UPX编译及使用实例

    压缩加壳工具UPX编译及使用实例 压缩加壳工具UPX编译及使用实例 UPX介绍 UPX在debian下编译 UPX使用 压缩加壳工具UPX编译及使用实例 UPX介绍 UPX是一个著名的压缩壳,主要功能 ...

  7. APK加壳【2】内存加载dex实现详解

    来源 本文要实验的方案同样来源于CSDN大牛Jack_Jia的一篇翻译博文: Android4.0内存Dex数据动态加载技术 原文的地址是 http://2013.hackitoergosum.org ...

  8. 关于apk加壳之动态加载dex文件

    由于自己之前做了一个关于手机令牌的APK软件,在实现的过程中尽管使用了native so进行一定的逻辑算法保护,但是在自己逆向破解的过程中发现我的手机令牌关键数据能够"轻易地"暴露 ...

  9. Android APK加壳技术方案----代码实现

    本文章由Jack_Jia编写,转载请注明出处. 文章链接:http://blog.csdn.net/jiazhijun/article/details/8746917 作者:Jack_Jia    邮 ...

  10. 工具使用,Virbox用户工具(Linux),深思数盾,离线软锁加密,离线解绑,加壳软件,加壳工具,Virbox离线加密

    文章目录 1,安装Virbox用户工具(Linux) 1.1,查看系统位数 1.2,下载相应安装包 1.3,安装 2,在Virbox LM 开发者中心设置账号许可,用于软锁离线加密 2.1,产品管理 ...

最新文章

  1. 详析数字图像中高斯模糊理论及实现
  2. 【每周NLP论文推荐】从预训练模型掌握NLP的基本发展脉络
  3. python 基础 list和 tuple dict和set
  4. PHP -- Traits新特性
  5. 卷积神经网络CNN结构
  6. Java IO编程全解(六)——4种I/O的对比与选型
  7. 字符函数-(学习笔记)
  8. 高级口译 WordList1
  9. 38.JavaScript中异步与回调的基本概念,以及回调地狱现象
  10. 移动周报:七大无需编程的DIY开发工具
  11. [python]使用python实现Hadoop MapReduce程序:计算一组数据的均值和方差
  12. 微信和淘宝扫码登录背后的实现原理
  13. duilib学习------网易云信图片中间加文字
  14. 利用python爬取知乎评论_一个简单的python爬虫,爬取知乎
  15. 物联网之STM32开发四(中断系统)
  16. B2B,B2C和C2C
  17. 霍尔电机的霍尔信号(转向+速度)
  18. Meth | 关闭mac自带apache的启动
  19. 树—— 二叉树的遍历
  20. 智能物料运输小车设计与实现

热门文章

  1. Windows命令提示符窗口操作命令
  2. U盘数据损坏了不要慌,这两种方法可以轻松找回数据
  3. Kotlin中三元运算符
  4. 【暴强】200种好口碑便宜护肤品 - 生活至上,美容至尚!
  5. xp系统整个计算机非常慢,xp系统桌面右键菜单非常慢很久才显示的图文方法
  6. java项目视频22套
  7. python 元类理解
  8. Minecraft Forge Mod 开发笔记
  9. pack_padded_sequence torch说明
  10. 编辑中的word变成只读_教大家word文档变成只读模式怎么改