排行榜 统计
  • 文章总数:1688 篇
  • 评论总数:5 条
  • 分类总数:8 个
  • 最后更新:一天前

ARM linux elf加壳方案

本文阅读 6 分钟
首页 安全资讯 正文

随着移动应用和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/871.html
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。避免网络欺诈,本站不倡导任何交易行为。如您私自与本站转载自公开互联网中的资讯内容中提及到的个人或平台产生交易,则需自行承担后果。本站在注明来源的前提下推荐原文至此,仅作为优良公众、公开信息分享阅读,不进行商业发布、发表及从事营利性活动。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。
-- 展开阅读全文 --
UBUNTU18.04上搭建ROS环境流程
« 上一篇 09-30
如何对出海手游加固?
下一篇 » 09-30