解读网易易盾新一代IoT安全编译器Maze
一、网易易盾为什么会推出安全编译器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
解读网易易盾新一代IoT安全编译器Maze的更多相关文章
- 网易易盾最新一代Java2c加固究竟有什么厉害之处?
导语:几个月前,网易易盾正式推出Java2c加固.它以独有的"静态保护"技术,使得应用程序中的代码出现"下沉",达到不可逆的效果,兼顾"冷热启动时间& ...
- 【原创】Python 网易易盾滑块验证
本文仅供学习交流使用,如侵立删! 记一次 网易易盾滑块验证分析并通过 操作环境 win10 . mac Python3.9 selenium.PIL.numpy.scipy.matplotlib 分析 ...
- C# 调用网易“易盾” Web API
易盾是网易推出的反垃圾云服务,最近准备试用一下,但发现api文档中只提供了Java, Python, PHP的示例代码,却没有C#的示例代码,于是参照Java示例代码用C#实现了一下. Java中用H ...
- selenium自动爬取网易易盾的验证码
我们在爬虫过程中难免会遇到一些拦路虎,比如各种各样的验证码,时不时蹦出来,这时候我们需要去识别它来继续我们的工作,接下来我将爬取网一些滑动验证码,然后通过百度的EasyDL平台进行数据标注,创建模型, ...
- 网易云易盾CTO朱浩齐:我们是如何用AI赋能内容安全?
本文由 网易云发布. 5月19日,LiveVideoStack携手网易云易盾,共同打造了“娱乐多媒体开发应用实践”专题,帮助开发者和泛娱乐平台运营人员,提升技术能力,突破难点,拓展思路与视野. 在专 ...
- 网易云易盾朱星星:最容易被驳回的10大APP过检项
本文由 网易云发布. 1月20日,“走进网易:移动测试与安全实践”公开活动在杭州西湖区颐高创业大厦4F楼友会创业咖啡厅举行.本次活动的议题聚焦在如何实现应用的高效开发.安全过检.开发功耗降到最低等热 ...
- 工信部公示网络安全示范项目 网易云易盾“自适应DDoS攻击深度检测和防御系统”入选
本文由 网易云发布. 工信部官网 2017年年底,经专家评审和遴选,中华人民共和国工业和信息化部(以下简称“工信部”)公示了2017年电信和互联网行业网络安全试点示范项目,网易云易盾的“自适应DDo ...
- 网易云易盾与A10 Networks达成战略合作 携手打造抗DDoS攻击的解决方案
欢迎访问网易云社区,了解更多网易技术产品运营经验. 2018年9月,网易云易盾宣布,与智能和自动化网络安全解决方案提供商A10 Networks结成战略合作伙伴关系.双方将在抗DDoS攻击领域展开深入 ...
- 网易云易盾中标浙报反作弊服务 助力浙江新闻App健康发展
欢迎访问网易云社区,了解更多网易技术产品运营经验. 近日,国内领先的智能业务安全平台网易云易盾和浙报传媒旗下"浙江新闻"达成合作,易盾将为浙江新闻客户端提供大数据反作弊服务,助力浙 ...
随机推荐
- Java数组模拟队列
队列 先进先出 什么意思呢? 我的理解:队列就是一个数组(不包含链表),然后我们给它施加一个存数据和取数据的规则 当只允许从一端存数据,从另一端取数据的数组,就是队列,我们要做的就是给这个数组施加我们 ...
- 1041 Be Unique (20分)(水)
Being unique is so important to people on Mars that even their lottery is designed in a unique way. ...
- Java进行二元操作类型转换
当对两个数值进行二元操作时,先要将两个操作数转换为同一种类型,然后再进行计算. 如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型. 否则,如果其中一个操作数是float ...
- springboot actuator 配置安全
springboot actuator监控是什么?类似php的phpinfor()函数,不过actuator更强大,可以查看的数据.状态更多.Actuator是Spring Boot提供的对应用系统的 ...
- 在.net core中完美解决多租户分库分表的问题
前几天有人想做一个多租户的平台,每个租户一个库,可以进行水平扩展,应用端根据登录信息,切换到不同的租户库 计划用ef core实现,他们说做不出来,需要动态创建dbContext,不好实现 然而这个使 ...
- Javascript 入门 必备知识点
1.如何得到html的input标签的值: (1). $('#id').val(); (2). $("#id").attr("value"); 2.javasc ...
- JAVA集合框架之List和Set、泛型
一 List是有序可重复的集合 可以进行增删改查,直接看代码 package com.collection; import java.util.ArrayList; import java.util. ...
- Django ORM操作数据库常用API
昨天晚上,我们完成了一个简单的实例来对数据库表进行操作.今天,我们要熟悉更多的API,实现更复杂的功能.这一步完成了,我们对小型数据的操作问题也就不大了. 现在,我们还是参考django官方文档,来进 ...
- OpenAL试水
参考了https://wysaid.org/976.html. 这个博客给了一个EGE+OpenAL的demo和源代码.一开始没注意,博主也没有给EGE相关信息.会找不到EGE相关头文件,建议如果要二 ...
- JS Math&Date的方法 (下)
Date - 时间日期对象 一:Date 时间对象 - 它是处理时间日期的 时间日期对象 - js提供了一个专门用来创建日期对象的构造函数 Date new Date() 这是一 ...