一、网易易盾为什么会推出安全编译器Maze?

随着5G时代的到来,会有越来越多的物联网设备走进我们的生活,然而物联网的终端本身普遍处于白盒环境中,***者很容易获取相关的信息进行***,这个时候如果不加以防护,势必给我们的生活造成重大的影响。然而设备的代码安全是一切安全的基础,如果设备代码不加以防护或防护不够,不仅仅会造成本身核心技术泄露,同时也给IoT设备稳定运行带来威胁。

与此同时,随着开发者安全意识的不断提高以及对于性能上的更多的考量,会有越来越多的移动开发者把算法或者核心逻辑写在本地层,如果本地层保护不够,***者通过逆向分析就可以得到核心的算法实现,严重危害到企业的利益,并且随着行业逆向水平的提高,逆向工具的使用也越来越普及,对于C/C++二进制文件破解的门槛逐步降低。

基于以上这些痛点和威胁,网易易盾开发出了IoT安全编译器Maze。Maze是一款针对C/C++层源代码加密混淆的工具,用于保护智能汽车、智能摄像头、智能家具等固件代码,避免因逆向工程被破解,造成核心技术被泄漏、代码执行流程被分析等安全问题。

安全编译器与普通编译器相似,可将C、C++等源代码编译成二进制代码。不同之处在于,安全编译器在编译时,能够对代码进行控制流混淆、字符串加密等安全保护,从而避免***者通过IDA Pro等逆向工具反编译二进制代码,分析业务代码执行流程,进一步篡改或窃取核心技术。

二、Maze原理说明:“迷宫矩阵”技术

Maze的“迷宫矩阵”技术由两部分组成:一个是逻辑混淆,另外一个是逻辑调度。

2.1逻辑混淆

控制流平坦化

由于函数的控制流图是函数逻辑的重要体现点,这里以函数的控制流作为保护和说明对象。由于函数中的控制流是呈现顺序的一个形态,逆向者可以通过逆向工具对其进行分析,还原程序的算法逻辑。

易盾安全编译器中控制流平坦化通过一个主分发器来控制程序基本块的执行流程,分散程序逻辑之间的关系,大大的增大了逆向者的分析难度,原理图如下所示:

字符串加密

由于函数中的字符串是逆向者进行分析的第一个重要入口,因此在易盾安全编译器中,字符串是默认且建议加密的,从下图中可以看到保护后的字符串消失了,保障了函数的安全。

指令替换&&伪造控制流

由于函数控制流是逆向***者去分析的重要入口,因此安全编译器通过对控制流进行虚假变形,以及指令之间的同语义的等价替换。通过构造一系列的逻辑谓词,和等价转换规则“丰富”整个程序逻辑,大大的增大逆向分析者去逆向分析的难度,变换前后的原理图如下所示:

2.2逻辑调度

调用隐藏

程序逻辑其中有一部分重要逻辑是通过子函数之间的调用来体现的,安全编译器通过分析函数之间的调用链,然后复杂化来增加之间的调用关系,使得程序调用达到一种隐藏的效果。

间接调用

为了进一步的增大程序之间的分析难度,通过“分散”并重新组织块状态之间的调用关系,通过引入一个动态的分发块结构,来模拟整个程序运行的过程,无论是静态还是动态都使得程序看起来更加的困难,变换其后的效果图如下所示:


三、保护前后效果对比

以下是采用安全编译器保护前后的效果图,可以看到其中重要的字符串通过IDA静态分析完以后消失了,给静态分析带来一定的困难。

通过观察保护前后的混淆控制流,可以看到保护以后的控制流变得异常的复杂,给***者带来巨大的分析困难,不仅无法静态分析,即使是动态分析也有很大的困难。

四、兼容性&强度

4.1 兼容性

Maze的混淆兼容所有C/C++语法特征,不仅适用客户端的应用开发,兼容目前市面上大部分的NDK版本,同时也适用嵌入式开发,保障混淆保护前后功能上的等价转换。这也使得客户使用上兼容所有的系统端,如Windows、Linux和Mac等;

4.2 强度

我们知道强度与性能在一定程度上体现这样的关系:一定强度的保证需要性能损失作为代价。这里Maze 尽最大程度弱化之间的对应关系,找到一个平衡点,以最小的性能损失达到最大的保护强度,同时提供灵活且细粒度的使用方式,保障达到最佳的效果。

五、总结

对于众所周知的黑盒加壳保护,***者通常只需要抓住分析到的某一个点,就能让整个保护“沦陷”,而Maze在性能和体积可接受范围内,使得***者陷入一种“迷宫”(Maze)状态,越走越乱。

从这来看,Maze是一种新的安全代码保护思路,拥有更加灵活、强度更高、性能和体积优良、保护效果好等优点。在部署上,Maze不仅支持通过脚本轻量级进行部署,也可以对强度和需要进行混淆保护的函数进行灵活的控制,开发层面支持NDK开发和嵌入式开发,使用上则非常灵活,兼容Windows、Linux、Mac等系统。

IoT安全编译器Maze适用于保护智能汽车、智能摄像头、智能家居等固件代码,也适用于保护移动应用,避免因逆向工程被破解,造成核心技术泄漏、代码执行流程被分析等安全问题。

转载于:https://blog.51cto.com/13610827/2410376

最新文章

  1. Python爬虫学习(2): httplib
  2. Hibernate 异常提示_1
  3. Mac下python初学之Image库(PIL)
  4. WCF、WebAPI、WCFREST、WebService之间的区别
  5. Centos | Linux 下安装启动 mysql 出现 8618 [ERROR] Aborting,查看日志:Plugin 'FEDERATED' is disabled.
  6. c++ template函数的声明和实现需要在同一个文件中
  7. 2016 - 1 - 20 runloop学习
  8. 你真的了解一段Java程序的生命史吗
  9. php微信支付(仅pc端扫码支付模式二)详细步骤.----仅适合第一次做微信开发的程序员
  10. 汇编函数调用中bp和sp是指什么?
  11. View以自身中心旋转的代码解惑
  12. 【IUML】回归和梯度下降
  13. jQuery事件命名空间
  14. Struts2初步接触
  15. java 的序列化和反序列化的问题
  16. bzoj 2759一个动态树好题
  17. 【python】进程与线程
  18. DRBD数据镜像与搭建
  19. Oracle执行计划 explain plan
  20. centos7 查看防火墙状态

热门文章

  1. SWUST OJ 1012哈希表(链地址法处理冲突)
  2. Linux命令后面加 & 的作用
  3. 使用systemctl工具
  4. Jmeter 压力测试笔记(3)--脚本调试/签名/cookie/提升吞吐量/降低异常率/提升单机并发性能
  5. 【linux】阿里云防火墙相关
  6. PHP如何配置session存储在redis
  7. MTK Android ROM与RAM的区别
  8. javascript入门 之 zTree (一)
  9. TP5快速入门
  10. DVWA渗透笔记