ARM Linux ELF加壳方案

ARM Linux ELF加壳方案随着移动应用和IoT设备的普及,大量的硬件抛弃了传统的x86架构,选择使用能耗低、性价比高的ARM芯片,ARM指令级渐渐成为主流,但随之而来的,是愈发严峻的安全问题。早期的加壳产品主要利用压缩加密技术对文件进行整体性保护,但随着逆向技术的提升,整体性的文件保护方案已经被攻克,于是加壳产品引入虚拟机概念,可以实现函数级的代码控制流保护,加密的颗粒度更加细致,激活成功教程难度呈几何级增加。压缩加密技术原理类似桌面应用的「压缩壳」,将SO文件中的代码段压缩或加密,在入口函数中解密再执行。这种保护方式可

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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

ARM Linux ELF加壳方案

开发环境支持

Windows、Linux、macOS。

开发语言支持

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

架构支持

X86、x64、ARM32、ARM64

申请试用

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183300.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux查看进程下的线程_linux查看线程状态

    linux查看进程下的线程_linux查看线程状态鉴于linux下线程的广泛使用我们怎么查看某个进程拥有的线程id了现在很多服务的设计主进程->子进程->线程(比如mysql,varnish)主进程负责侦听网络上的连接并把连接发

    2022年8月3日
  • ODA(Open Design Alliance)介绍「建议收藏」

    ODA(Open Design Alliance)介绍「建议收藏」注:与autocad兼容的软件,大部分基于Intellicad,另外刚冒出一个bricscad,天河的PCCADV10就是基于bricscad,bricscad是用ODA的库开发的,而开发brics

    2022年8月6日
  • visual paradigm创建类图_uml对象图例子

    visual paradigm创建类图_uml对象图例子Visual Paradigm 教程[UML]:如何使用子图?

    2022年4月22日
  • javabean java_javabean简介

    javabean java_javabean简介Javabean简介JavaBean是一个可重复使用的软件组件。实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean。由于javabean是基于java语言的,因此javabean不依赖平台,具有以下特点:1.可以实现代码的重复利用2.易编写、易维护、易使用3.可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译。编写ja…

    2022年7月17日
  • 阵列信号DOA估计系列(三).MVDR/Capon波束形成(附代码)

    阵列信号DOA估计系列(三).MVDR/Capon波束形成(附代码)本文主要介绍Capn波束形成算法,又名最小方差无失真相应(MinimumVarianceDistortionlessResponse,MVDR),并将其方法应用于DOA估计。

    2022年6月26日
  • MySQL读写分离的原理

    MySQL读写分离的原理1.为什么要实现MySQL的读写分离?因为实际上大多是互联网公司,一些网站或者是app,其实都是读多写少,所以针对这个情况,就是写请求是一个主库,但是主库挂多个从库,然后从多个从库来读,这样可以提高MySQL的并发。2.如何实现MySQL的读写分离?就是基于主从复制架构,简单就是之搞一个主库,然后主库挂多个从库,我们单单只是写主库,然后主库会自动把数据给同步到从库上去。…

    2022年5月4日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号