CN109711118A - 一种基于插件化的iOS安全编译器及安全编译方法 - Google Patents
一种基于插件化的iOS安全编译器及安全编译方法 Download PDFInfo
- Publication number
- CN109711118A CN109711118A CN201811631249.7A CN201811631249A CN109711118A CN 109711118 A CN109711118 A CN 109711118A CN 201811631249 A CN201811631249 A CN 201811631249A CN 109711118 A CN109711118 A CN 109711118A
- Authority
- CN
- China
- Prior art keywords
- code
- safe
- block
- instruction
- plug
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种基于插件化的iOS安全编译器,包括代码拆分处理模块、代码乱序处理模块、代码扁平化处理模块以及代码混淆处理模块。本发明还提供了一种基于插件化的iOS安全编译方法,包括对代码进行拆分处理、对代码进行乱序处理、对代码进行扁平化处理以及对代码进行控制混淆处理。本发明的安全编译器及安全编译方法不仅能够保护移动应用核心代码不被逆向、破解,而且整个过程简单易用,并且可定制化对代码进行全局或局部加固编译。
Description
技术领域
本发明属于移动互联网安全领域,特别涉及一种基于插件化的iOS安全编译器及编译方法。
背景技术
随着移动互联网产业的高速发展,移动应用(APP)的种类和数量逐渐增多,移动用户数量也在不断增加,APP成为人们日常生活离不开的重要工具,人们用它购物、出行、付款、投资等。然而,这时移动安全风险也随之而来,移动应用普遍存在一些高危风险及漏洞,这就给了不法分子可乘之机,通过一些简单的技术手段,很容易破解APP、植入木马病毒、动态注入恶意代码,给人们的生活和企业造成严重的损失。
目前,缺乏一套完善的代码安全防护机制,对移动应用代码进行编译保护,提高代码的逆向反汇编难度,有效防止核心代码被篡改,从而保护移动应用的代码安全及核心业务逻辑的安全,确保客户的移动应用核心代码不被逆向、破解。现有技术的代码安全防护机制存在较多的缺陷,主要体现在以下几个方面:
(1)安全编译环境搭建困难、繁琐。大多安全加固产品都是独立于开发者的编辑器的,需要开发者独立安装一套安全编译环境并配置各种的环境变量,将代码移植到新搭建的安全编译环境中才能对代码进行加固,资源开销大,操作繁琐。
(2)不支持定制模块。其他产品只能对代码整体进行加固操作,无法对单独的模块及源文件进行定制化编译。
(3)流程过于复杂,上手难,操作起来不够连贯,在整个操作的过程中很可能漏掉某个环节,或是浪费掉不必要的时间。
发明内容
有鉴于现有技术的上述缺陷,本发明的目的在于提供一种基于插件化的iOS安全编译器及编译方法,不仅能够保护移动应用核心代码不被逆向、破解,而且整个过程简单易用,并且可定制化对代码进行全局或局部加固编译。
为达到上述目的,一方面,本发明提供了一种基于插件化的iOS安全编译器,包括以下模块:
(1)代码拆分处理模块;用于在源代码向目标代码编译的过程中,在保证逻辑正确的基础上,将函数中的所有基础代码块拆分成粒度更细的代码块,使其结构更加复杂。上述函数包括变量声明函数、循环控制函数、类方法、对象方法等,其经过代码拆分处理后分别变为变量声明块、循环控制块、类方法块、对象方法块等。
(2)代码乱序处理模块;用于将一系列的代码序列分散打乱分布在PE映像中,中间随机穿插跳转指令和/或不改变环境的垃圾代码,从而扰乱正常的分析流程。其中,上述跳转指令包括无条件跳转指令jmp、短跳转指令call、对称跳转指令[jz、jnz]等。
(3)代码扁平化处理模块;用于在代码编译过程中执行扁平化方法,将多个(switch/case)语句插入到代码块中,通过遍历编译指令,将变量声明及创建、循环控制指令等放入到(switch/case)语句块中,使代码变为多个(switch/case)语句并行判断执行,以增加代码复杂度。其中,“多个”指2个或2个以上,优选为3个或3个上,例如4个、5个、6个、7个等等。
(4)代码混淆处理模块;用于对代码进行控制混淆,也称流程混淆,它是通过在代码中插入条件判断指令、伪装条件语句等,改变程序的执行流程以达到增加程序执行的复杂度,起到保护程序不被逆向的作用。例如,混淆处理通过在程序从A执行到B的过程中加入条件判断,使A执行完后会去执行伪装条件语句,然后再去执行B。
进一步地,本发明的安全编译器采用插件化的方式,内嵌到开发者的xcode开发工具中,开发者无需安装新的编译器,也无需配置大量的环境变量,只需将安全编译器插件集成到编译器中,将默认编译器替换成安全编译器,更改编译器本身的几项配置即可,操作起来方便高效。
进一步地,本发明的安全编译参数采用指令的方式,通过-mllvm –split指令进行代码拆分处理,通过-mllvm -reorder-bb 指令进行代码乱序处理,通过-mllvm –flatten指令进行代码扁平化处理。当对需要加固的代码添加配置上以上指令之一后,在编译时,安全编译器则会去检测该代码配置的是何种指令,根据不同的指令执行上述不同的加固方法。
进一步地,对于需要用安全编译器加固的源代码文件,可以选择全局加固,也可以选择定制化的局部加固。其中,全局加固时只需在工程中的customflag选项中添加-mllvm-reorder-bb、-mllvm –split、-mllvm –flatten、-mllvm –zlog等编译指令即可;而定制化局部加固只需在需要加固的源文件后添加对应的编译指令即可。
另一方面,本发明提供了一种基于插件化的iOS安全编译方法,包括以下步骤:
步骤一、对代码进行拆分处理:在源代码向目标代码编译的过程中,在保证逻辑正确的基础上,将函数中的所有基础代码块拆分成粒度更细的代码块。上述函数包括变量声明函数、循环控制函数、类方法,对象方法等,其经过拆分处理后分别变为变量声明块、循环控制块、类方法块、对象方法块等。
步骤二、对代码进行乱序处理:将代码序列分散打乱分布在PE映像中,中间随机穿插跳转指令和/或不改变环境的垃圾代码。其中,上述跳转指令包括无条件跳转指令jmp、短跳转指令call、对称跳转指令[jz、jnz]等。
步骤三、对代码进行扁平化处理:在代码编译过程中,将多个(switch/case)语句插入到代码块中,通过遍历编译指令,将变量声明及创建、循环控制指令放入到(switch/case)语句块中,使代码变为多个(switch/case)语句并行判断执行。
步骤四、对代码进行控制混淆处理:在代码中插入条件判断指令及伪装条件语句,以改变程序的执行流程。
本发明的基于插件化的iOS安全编译器和编译方法具有显著的有益技术效果,主要表现在以下方面:
(1)在源代码向目标代码编译的过程中,采用拆分、乱序、扁平化处理、混淆控制、添加判断分支、添加花指令等技术处理,提高目标代码的安全性,提高逆向攻击的成本。经过本发明加固后的应用很难被破解和逆向反汇编,即使破解后黑客也无法看出代码的原有逻辑,代码保护效果显著。
(2)采用插件化的方式,安装方便快捷;编译参数采用指令的方式,既可进行全局配置,也可针对性的对某个文件进行安全编译控制,配置自由度高、不易出现遗漏。
附图说明
图1是本发明一个较佳实施例的基于插件化的iOS安全编译器及编译方法的流程示意图;
图2是本发明一个较佳实施例中一段未经拆分处理的待加固的代码;
图3是图2中的代码经拆分处理后形成的代码;
图4是图3中的代码经乱序处理后形成的代码;
图5是图4中的代码经扁平化处理及控制混淆处理后形成的代码。
具体实施方式
下面对本发明的实施例作详细说明,下述的实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
如图1所示,在一个较佳实施例中,本发明的基于插件化的iOS安全编译方法,包括以下步骤:
步骤一、对代码进行拆分处理:在源代码向目标代码编译的过程中,在保证逻辑正确的基础上,将函数中的所有基础代码块拆分成粒度更细的代码块。上述函数包括变量声明函数、循环控制函数、类方法、对象方法等,其经过拆分处理后分别变为变量声明块、循环控制块、类方法块、对象方法块等。
步骤二、对代码进行乱序处理:将代码序列分散打乱分布在PE映像中,中间随机穿插跳转指令和/或不改变环境的垃圾代码。其中,上述跳转指令包括无条件跳转指令jmp、短跳转指令call、对称跳转指令[jz、jnz]等。
步骤三、对代码进行扁平化处理:在代码编译过程中,将多个(switch/case)语句插入到代码块中,通过遍历编译指令,将变量声明及创建、循环控制指令放入到(switch/case)语句块中,使代码变为多个(switch/case)语句并行判断执行。
步骤四、对代码进行控制混淆处理:在代码中插入条件判断指令及伪装条件语句,以改变程序的执行流程。
在一个较佳实施例中,使用本发明的基于插件化的iOS安全编译方法对一段代码进行了加固处理,未经拆分处理、经拆分处理后、经乱序处理后、以及经扁平化处理和控制混淆处理后的代码分别如图2、图3、图4以及图5所示。可见,与加固处理前的代码相比,经本发明加固处理后的代码复杂度大大增加,逻辑性大大减弱,因此很难被破解和逆向反汇编,保护效果显著。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的试验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (8)
1.一种基于插件化的iOS安全编译器,其特征在于,所述安全编译器包括以下模块:
(1)代码拆分处理模块;用于在源代码向目标代码编译的过程中,在保证逻辑正确的基础上,将函数中的所有基础代码块拆分成粒度更细的代码块;
(2)代码乱序处理模块;用于将代码序列分散打乱分布在PE映像中,中间随机穿插跳转指令和/或不改变环境的垃圾代码;
(3)代码扁平化处理模块;用于在代码编译过程中将多个(switch/case)语句插入到代码块中,通过遍历编译指令,将变量声明及创建、循环控制指令放入到(switch/case)语句块中,使代码变为多个(switch/case)语句并行判断执行;
(4)代码混淆处理模块;用于对代码进行控制混淆,通过对目标文件插入条件判断指令、伪装条件语句,以改变程序的执行流程。
2.如权利要求1所述的基于插件化的iOS安全编译器,其特征在于,步骤(1)中所述的函数包括变量声明函数、循环控制函数、类方法、对象方法;其经过代码拆分处理后分别成为变量声明块、循环控制块、类方法块、对象方法块。
3.如权利要求1所述的基于插件化的iOS安全编译器,其特征在于,步骤(2)中所述的跳转指令包括无条件跳转指令jmp、短跳转指令call、对称跳转指令[jz、jnz]。
4.如权利要求1所述的基于插件化的iOS安全编译器,其特征在于,所述安全编译器采用插件化的方式,内嵌到开发者的xcode开发工具中。
5.如权利要求1所述的基于插件化的iOS安全编译器,其特征在于,所述安全编译器的安全编译参数采用指令的方式。
6.一种基于插件化的iOS安全编译方法,其特征在于,所述安全编译方法包括以下步骤:
步骤一、对代码进行拆分处理:在源代码向目标代码编译的过程中,在保证逻辑正确的基础上,将函数中的所有基础代码块拆分成粒度更细的代码块;
步骤二、对代码进行乱序处理:将代码序列分散打乱分布在PE映像中,中间随机穿插跳转指令和/或不改变环境的垃圾代码;
步骤三、对代码进行扁平化处理:在代码编译过程中,将多个(switch/case)语句插入到代码块中,通过遍历编译指令,将变量声明及创建、循环控制指令放入到(switch/case)语句块中,使代码变为多个(switch/case)语句并行判断执行;
步骤四、对代码进行控制混淆处理:在代码中插入条件判断指令及伪装条件语句,以改变程序的执行流程。
7.如权利要求6所述的基于插件化的iOS安全编译方法,其特征在于,步骤一中所述的函数包括变量声明函数、循环控制函数、类方法,对象方法,其经过所述拆分处理后分别成为变量声明块、循环控制块、类方法块、对象方法块。
8.如权利要求6所述的基于插件化的iOS安全编译方法,其特征在于,步骤二中所述的跳转指令包括无条件跳转指令jmp、短跳转指令call、对称跳转指令[jz、jnz]。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811631249.7A CN109711118A (zh) | 2018-12-29 | 2018-12-29 | 一种基于插件化的iOS安全编译器及安全编译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811631249.7A CN109711118A (zh) | 2018-12-29 | 2018-12-29 | 一种基于插件化的iOS安全编译器及安全编译方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109711118A true CN109711118A (zh) | 2019-05-03 |
Family
ID=66259479
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811631249.7A Pending CN109711118A (zh) | 2018-12-29 | 2018-12-29 | 一种基于插件化的iOS安全编译器及安全编译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109711118A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110554885A (zh) * | 2019-08-29 | 2019-12-10 | 五八有限公司 | 子应用生成方法、装置、电子设备及存储介质 |
CN110673852A (zh) * | 2019-09-20 | 2020-01-10 | 北京智游网安科技有限公司 | 一种基于编译器前端实现控制流平坦的方法、系统及设备 |
WO2021151347A1 (zh) * | 2020-05-29 | 2021-08-05 | 平安科技(深圳)有限公司 | 基于iOS应用的加固方法、装置、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140344569A1 (en) * | 2013-05-20 | 2014-11-20 | Alibaba Group Holding Limited | Protecting data |
CN106529225A (zh) * | 2016-10-27 | 2017-03-22 | 努比亚技术有限公司 | 一种应用程序源代码保护装置及方法 |
CN106778101A (zh) * | 2016-12-08 | 2017-05-31 | 合肥康捷信息科技有限公司 | 一种基于控制流和外形混淆的Python代码混淆方法 |
CN106778100A (zh) * | 2016-12-01 | 2017-05-31 | 北京智游网安科技有限公司 | 基于安卓平台和ios平台的混淆编译方法及混淆编译器 |
CN108304697A (zh) * | 2017-12-11 | 2018-07-20 | 深圳壹账通智能科技有限公司 | 检测app二次打包的方法、装置及移动终端 |
-
2018
- 2018-12-29 CN CN201811631249.7A patent/CN109711118A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140344569A1 (en) * | 2013-05-20 | 2014-11-20 | Alibaba Group Holding Limited | Protecting data |
CN106529225A (zh) * | 2016-10-27 | 2017-03-22 | 努比亚技术有限公司 | 一种应用程序源代码保护装置及方法 |
CN106778100A (zh) * | 2016-12-01 | 2017-05-31 | 北京智游网安科技有限公司 | 基于安卓平台和ios平台的混淆编译方法及混淆编译器 |
CN106778101A (zh) * | 2016-12-08 | 2017-05-31 | 合肥康捷信息科技有限公司 | 一种基于控制流和外形混淆的Python代码混淆方法 |
CN108304697A (zh) * | 2017-12-11 | 2018-07-20 | 深圳壹账通智能科技有限公司 | 检测app二次打包的方法、装置及移动终端 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110554885A (zh) * | 2019-08-29 | 2019-12-10 | 五八有限公司 | 子应用生成方法、装置、电子设备及存储介质 |
CN110673852A (zh) * | 2019-09-20 | 2020-01-10 | 北京智游网安科技有限公司 | 一种基于编译器前端实现控制流平坦的方法、系统及设备 |
CN110673852B (zh) * | 2019-09-20 | 2023-06-23 | 北京智游网安科技有限公司 | 一种基于编译器前端实现控制流平坦的方法、系统及设备 |
WO2021151347A1 (zh) * | 2020-05-29 | 2021-08-05 | 平安科技(深圳)有限公司 | 基于iOS应用的加固方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109711118A (zh) | 一种基于插件化的iOS安全编译器及安全编译方法 | |
CN104834859B (zh) | 一种Android应用中恶意行为的动态检测方法 | |
Pewny et al. | Control-flow restrictor: Compiler-based CFI for iOS | |
CN104463002B (zh) | 一种加固apk的方法和装置以及apk加固客户端和服务器 | |
CN105989283A (zh) | 一种识别病毒变种的方法及装置 | |
CN103001947B (zh) | 一种程序处理方法和系统 | |
CN107092518A (zh) | 一种保护拟态防御系统软件层安全的编译方法 | |
CN104700026A (zh) | 基于java字节码插桩和java方法挂钩检测java沙箱逃逸攻击 | |
Lu et al. | AutoD: Intelligent blockchain application unpacking based on JNI layer deception call | |
Kim et al. | A Brief Survey on Rootkit Techniques in Malicious Codes. | |
WO2013165461A1 (en) | Recompiling with generic to specific replacement | |
CN104298534B (zh) | 基于Lua语言的编程方法和装置 | |
CN101986326A (zh) | 保护软件安全的方法及装置 | |
CN109344612A (zh) | 针对程序代码静态分析逆向攻击的主动防御方法及系统 | |
CN102982281B (zh) | 程序状况检测方法和系统 | |
CN109101815A (zh) | 一种恶意软件检测方法及相关设备 | |
CN105718765A (zh) | 一种利用有限自动机实现代码混淆的方法 | |
CN102214281A (zh) | 一种软件保护方法和装置 | |
CN109784010A (zh) | 一种基于llvm的程序控制流混淆方法及装置 | |
CN104462943A (zh) | 业务系统中非侵入式性能监控装置和方法 | |
CN107632832A (zh) | 一种面向dalvik字节码控制流混淆方法 | |
Angelini et al. | Ropmate: Visually assisting the creation of rop-based exploits | |
Guo et al. | Function-oriented programming: A new class of code reuse attack in c applications | |
CN101395581A (zh) | 使用预测执行的处理器条件代码的优化分析驱动编译方法 | |
CN113779578B (zh) | 移动端应用的智能混淆方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190503 |