ARM Linux ELF加壳方案
随着移动应用和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加壳方案相关推荐
- linux srelf 加壳代码,浅谈被加壳ELF文件的DUMP修复
前面的文章中,我已经介绍了如何调试被加壳的ELF,这里不在叙述,直接进入正题,以某加固为例,如何DUMP和修复被加壳的ELF,使其能调试加载 我们先来看看被加壳ELF的头和Program Header ...
- ionic 安卓apk签名_安卓 APP 三代加壳方案的研究报告
安卓的加固方案是从 19 年底开始写的,到现在为止差不多快一年了,写这个目的还是学习怎么脱壳,前几个月再看雪看到有人直接分析壳来学习,不过我感觉从加壳写起也是一种浪漫.因为个人原因,在类指令抽取壳那里 ...
- linux so 加壳,AndroidLinker与SO加壳技术之下篇
2.4 链接 链接过程由 soinfo_link_image 函数完成,主要可以分为四个主要步骤: 1. 定位 dynamic section, 由函数 phdr_table_get_dynamic_ ...
- UPX对Android上ELF加壳使用过程中的若干问题总结
1. UPX中使用的压缩算法有三种,最早是UCL,然后加入了NRV,3.91版本又加入了LZMA.按照UPX源码中的文档来说,UCL压缩效率是相对较低的,但是好处是OpenSource的,NRV效率较 ...
- android 加壳 方案,android加壳思路
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 对java及dex代码保护的技术发展:第一代 dex文件加密,打包.在运作时通过一个自定义的类加载器进行解密. 第二代 ...
- 压缩加壳工具UPX编译及使用实例
压缩加壳工具UPX编译及使用实例 压缩加壳工具UPX编译及使用实例 UPX介绍 UPX在debian下编译 UPX使用 压缩加壳工具UPX编译及使用实例 UPX介绍 UPX是一个著名的压缩壳,主要功能 ...
- APK加壳【2】内存加载dex实现详解
来源 本文要实验的方案同样来源于CSDN大牛Jack_Jia的一篇翻译博文: Android4.0内存Dex数据动态加载技术 原文的地址是 http://2013.hackitoergosum.org ...
- 关于apk加壳之动态加载dex文件
由于自己之前做了一个关于手机令牌的APK软件,在实现的过程中尽管使用了native so进行一定的逻辑算法保护,但是在自己逆向破解的过程中发现我的手机令牌关键数据能够"轻易地"暴露 ...
- Android APK加壳技术方案----代码实现
本文章由Jack_Jia编写,转载请注明出处. 文章链接:http://blog.csdn.net/jiazhijun/article/details/8746917 作者:Jack_Jia 邮 ...
- 工具使用,Virbox用户工具(Linux),深思数盾,离线软锁加密,离线解绑,加壳软件,加壳工具,Virbox离线加密
文章目录 1,安装Virbox用户工具(Linux) 1.1,查看系统位数 1.2,下载相应安装包 1.3,安装 2,在Virbox LM 开发者中心设置账号许可,用于软锁离线加密 2.1,产品管理 ...
最新文章
- 详析数字图像中高斯模糊理论及实现
- 【每周NLP论文推荐】从预训练模型掌握NLP的基本发展脉络
- python 基础 list和 tuple dict和set
- PHP -- Traits新特性
- 卷积神经网络CNN结构
- Java IO编程全解(六)——4种I/O的对比与选型
- 字符函数-(学习笔记)
- 高级口译 WordList1
- 38.JavaScript中异步与回调的基本概念,以及回调地狱现象
- 移动周报:七大无需编程的DIY开发工具
- [python]使用python实现Hadoop MapReduce程序:计算一组数据的均值和方差
- 微信和淘宝扫码登录背后的实现原理
- duilib学习------网易云信图片中间加文字
- 利用python爬取知乎评论_一个简单的python爬虫,爬取知乎
- 物联网之STM32开发四(中断系统)
- B2B,B2C和C2C
- 霍尔电机的霍尔信号(转向+速度)
- Meth | 关闭mac自带apache的启动
- 树—— 二叉树的遍历
- 智能物料运输小车设计与实现