论文部分内容阅读
随着科技的飞速发展,“万物皆可连”的物联网时代已经到来,可预见会有越来越多的物联网应用出现。由于是新兴行业,很多制度尚不完善,类比传统软件行业受到的软件盗版等问题的困扰,物联网应用同样面临软件资产被盗的威胁。软件资产的安全性迫切需要得到保障,而代码混淆技术是实现软件保护的有效手段。由于物联网应用场景复杂,平台繁多,设备体系架构、软件编程语言未得到统一化的规定,导致针对特定编程语言或者特定平台架构的传统代码混淆方案应用受限,因此本文提出基于LLVM这款优秀的编译系统来克服上述的问题。LLVM框架拥有设计优良的中间语言格式,具有平台无关性,同时支持多种编程语言并可以生成不同体系架构的机器码,这些特点使得基于LLVM设计面向物联网应用的代码混淆保护方案变得可能。本文基于LLVM框架,面向物联网应用研究设计基于代码混淆的软件保护方案。在分析现有代码混淆技术的基础上,针对物联网应用的特点,提出三种较为轻量级的代码混淆算法。对字符串数据进行混淆,防止攻击者通过静态字符串扫描的方式获取程序内部敏感信息。设计密钥变换,并在使用字符串前执行动态解密操作,使用完之后进行重新加密操作,对抗动态内存扫描字符串攻击。对控制流进行混淆,设计一种受限的控制流平坦化算法,将原本简单清晰的控制流图复杂化,进一步增强针对控制流图分析的难度,同时也考虑到对开销的控制,通过限制待混淆基本块的个数降低开销并提供一定的安全保障。对函数调用进行混淆,由于攻击者可以根据函数的调用情况猜测函数的功能,本文提出一种跳板函数的概念,通过将大部分函数封装到一个函数中,再由跳板函数进行调用的思路,设计了一种函数调用隐藏的算法,实现对抗静态分析中对函数调用图的分析。最后基于上述研究和设计,利用LLVM框架实现了三种算法,搭建了代码混淆的原型系统,并进行了混淆效果展示实验、多组样本的功能性测试实验和开销测试。实验结果表明,本文提出的方法能够达到预期混淆效果,对物联网应用的保护有效,为物联网应用保护提供了一些思路。