背景
2020年6月22日,Apple宣布更换 Mac 电脑的 CPU,从 Intel 公司的 X86 架构改成 ARM 架构,情理之外, 意料之中。

众所周知,电脑或者手机中,最重要的部分,就是 CPU,不同的 CPU 采用不同的实现方式,支持不同的 指令集,彼此之间还不通用。运行在特定 CPU 架构下的软件,如果想移植到新的架构上使用,必须重新 编译,遥想当年 Surface RT 上线之时,由于更换了 CPU 架构,只能使用 Windows Store 提供的软件,绝 大多数常用软件都没有进行适配工作,最终黯然立场。
目前,主流的 CPU 架构有两种,X86 和 ARM,分别代表着 CISC 「复杂指令级」和 RISC「简单指令级」。
l X86架构:单核性能强大,但电压高、功耗高、价格昂贵,主要用于桌面电脑和服务器;
l ARM架构:单核性能略逊色于 X86 架构,但功耗低,目前主要应用于移动设备;
近几年,X86 架构发展迟缓,ARM 架构则进步显著,有些 ARM 芯片单核性能已不输 X86,ARM 架构从移 动设备向桌面电脑和服务器进军。
得益于硬件进步和开源社区的贡献,在使用 ARM 架构运行桌面应用的过程中,Linux 无疑比 Microsoft 和 Apple 激进的多,越来越多的 Linux 从 X86架构切换到 ARM 架构上,甚至在某些场景和行业下,Linux ARM已经形成了主流。
Linux ARM 应用领域
Linux ARM 在 IoT 和 AI 领域有着广泛的应用,大量使用在工业控制、智慧生活、城市管理等场景下,为 人们的工作和生活发挥着重大作用。
l 工业控制:智能AI、机器视觉、智能装备、无人驾驶等;
l 智慧生活:智能家居、数字医疗、定位导航等;
l 城市管理:智能交通、环境监测、智能安防、智能建筑、智慧物流等

如何将应用迁移至 Linux ARM 上
越来越多的应用切换到 ARM 架构是一个趋势。但目前绝大部分应用还都运行在 X86 架构的 CPU 上,开 发者需要将应进行某种形式的「重构」才能运行在 ARM 架构的设备上。主要原因是 X86 与 ARM 采用了 不同类型的指令级,需要完美的处理指令级上的差异,应用才能正常运行。
不同类型的开发语言,在迁移过程中的难度和工作量是不同的。最简单的是解释型语言,例如 Python 等,如果不依赖 C 、C++等编译型语言的公共组建,可以直接运行在 ARM 架构下。对于C、C++、Go 等 编译型语言编写的应用程序,需要采用 ARM64「aarch64」编译器重新编译后才能运行。因为编译型语言 先要被「翻译」成汇编,然后再转换成二进制指令。对于极少数的汇编语言,则需要使用 ARM 指令级改 写一遍了。

Linux ARM 应用保护
背景
目前,大量的 Linux ARM 应用是由 Linux X86 迁移而来,由于指令集的变化,应用做了相应的适配,原有 的保护方案随着指令集变化也失去了作用,开发者需要重新调整安全方案。

方案
代码虚拟化
程序的执行依赖 CPU 对符合指令集规范的代码进行解析处理。如果指令集不符合 CPU 的规定,就无法识别。
代码虚拟化,是将原指令,通过自定义的方式进行的变形处理,生成一种新的指令集,这种指令集,需 要通过能够解析该指令的特殊的解释器才能够运行,这种通过特殊的解释器运行变形的虚拟指令的过程,就是代码虚拟化。
传统的加壳产品,在对抗静态分析会有不错的效果,但运行后会在内存里暴露原有的代码,黑客 Dump 内存后,进行必要的修复,即可使用 IDA 进行阅读分析,但使用代码虚拟化以后,程序运行时不会将虚拟指令集还原,即便被 Dump,IDA 也无法阅读被虚拟化后的代码,黑客只能尝试分析复杂度更高的虚拟机,极大的提升了代码分析的难度和需要的时间。
由于 ARM 指令集与 X86 相差较大,原有的 Linux X86 的虚拟化方案,并不能应用在 Linux ARM 平台上, 所以,开发者需要能够支持 Linux ARM 的代码虚拟化方案。
代码混淆
代码混淆亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式。混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而 混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义,通过进行代码混淆可以有效提升应用被逆向破解的难度。
代码混淆对于扰乱原始指令、防止静态分析和反编译具有极大的帮助。
代码加密
代码加密是使用 SMC(Self-Modifying Code)技术,将原始的函数加密,在函数被执行时才将函数解密并执行的保护方式。代码加密尤其适合 Linux ARM 平台,因为其运行效率高,几乎没有性能损失。

Virbox Protector 作为深思数盾安全实验室在代码保护方向上的主打产品,成功将代码虚拟化从 X86 平台 移植到 ARM 平台,并结合 ARM 指令集特点进行了专门优化,结合代码混淆、智能压缩等主流功能,对 于防止动态分析和静态分析有着极强的防御能力。
Virbox Protector 基于 2 进制文件操作,开发者无需提供源代码,无需调用 API。
保护效果如下图:

网友评论