排行榜 统计
  • 文章总数:1028 篇
  • 评论总数:5 条
  • 分类总数:7 个
  • 最后更新:昨天 14:16

Arm Linux elf 加壳方案

本文阅读 6 分钟
首页 安全资讯 正文
55Link友情链接交易平台

随着移动应用和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

本文来自投稿,不代表本站立场,如若转载,请注明出处:https://typecho.firshare.cn/archives/575.html
-- 展开阅读全文 --
EXE绑定机器码加密软件
« 上一篇 09-06
APK中的SO文件进行加固
下一篇 » 09-06