CN115203652A - 一种基于源混淆的ios端安全加密控制方法 - Google Patents

一种基于源混淆的ios端安全加密控制方法 Download PDF

Info

Publication number
CN115203652A
CN115203652A CN202211121229.1A CN202211121229A CN115203652A CN 115203652 A CN115203652 A CN 115203652A CN 202211121229 A CN202211121229 A CN 202211121229A CN 115203652 A CN115203652 A CN 115203652A
Authority
CN
China
Prior art keywords
source code
expression
level
security
encrypted source
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.)
Granted
Application number
CN202211121229.1A
Other languages
English (en)
Other versions
CN115203652B (zh
Inventor
邢青
何叶
曹敏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xinguomai Digital Culture Co ltd
China Telecom Digital Intelligence Technology Co Ltd
Original Assignee
Xinguomai Digital Culture Co ltd
China Telecom Digital Intelligence Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xinguomai Digital Culture Co ltd, China Telecom Digital Intelligence Technology Co Ltd filed Critical Xinguomai Digital Culture Co ltd
Priority to CN202211121229.1A priority Critical patent/CN115203652B/zh
Publication of CN115203652A publication Critical patent/CN115203652A/zh
Application granted granted Critical
Publication of CN115203652B publication Critical patent/CN115203652B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)

Abstract

本发明涉及一种基于源混淆的IOS端安全加密控制方法,涉及计算机加密技术领域,其步骤包括:判定源代码的全局数组的安全性等级,分析源代码的全局数组格式,根据安全性等级和全局数组格式选择数组生成方法,得到虚假全局数组;对虚假全局数组进行混淆加固处理,生成加密源代码,混淆加固处理包括用GetString函数替换字符串、混淆表达式、插入控制流、改写判断条件和插入反调试代码;运行加密源代码,在加密源代码的运行过程中监测加密源代码的受攻击状况,在加密源代码受到攻击时,调整加密源代码的加密程度。提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。

Description

一种基于源混淆的IOS端安全加密控制方法
技术领域
本发明涉及计算机加密技术领域,尤其涉及一种基于源混淆的IOS端安全加密控制方法。
背景技术
随着现代科技水平的飞速发展,电子移动设备的使用高度普及,用于电子移动设备端的应用软件的数量逐渐增多,但应用软件也暴露出了越来越多的安全问题,不仅给应用软件的使用者带来了使用风险,还会损害应用软件开发者的合法权利,这就对应用软件的安全性提出了更高的要求。
当应用软件的核心代码逻辑泄露,黑客就可以利用核心代码中的漏洞对应用软件进行攻击。传统的IOS应用程序使用class-dump,把应用的类和方法定义dump下来,根据方法名确定程序的处理函数的位置,从而进行hook等操作,故传统的IOS应用程序安全得不到保障。中国专利公开号CN110765425A公开了一种对ios应用程序源代码进行混淆保护的方法及系统,该方法是获取ios应用程序源代码中的待混淆代码,利用Clang工具对待混淆代码进行编译,得到抽象语法树,根据预设标记遍历抽象语法树,得到所有的类名代码、方法名代码和变量名代码,将类名代码、方法名代码和变量名代码替换为随机字符串,根据随机字符串生成对应于待混淆代码的安全代码,此方法在一定程度上提高了电子移动设备端的应用软件的程序的安全性,但该方法需要在应用软件的开发过程中对类、方法名添加宏定义,以便检索源代码中的类名代码、方法名代码和变量名代码,降低应用软件的开发效率。
发明内容
为此,本发明提供一种基于源混淆的IOS端安全加密控制方法,可以解决现有技术中的加密方法降低应用软件的开发效率的问题。
为实现上述目的,本发明提供一种基于源混淆的IOS端安全加密控制方法,包括:判定源代码的全局数组的安全性等级,分析源代码的全局数组格式,根据所述安全性等级和所述全局数组格式选择数组生成方法,得到虚假全局数组;
对所述虚假全局数组进行混淆加固处理,生成加密源代码,所述混淆加固处理包括用GetString函数替换字符串、混淆表达式、插入控制流、改写判断条件和插入反调试代码;
运行加密源代码,在加密源代码的运行过程中监测加密源代码的受攻击状况,在加密源代码受到攻击时,调整加密源代码的加密程度。
进一步地,当根据所述安全性等级和所述全局数组格式选择数组生成方法时,安全性等级包括一级安全、二级安全和三级安全,数组生成方法包括一级生成方法、二级生成方法和三级生成方法,其中,各安全性等级的安全性由低到高的排序为一级安全、二级安全、三级安全,数组生成方法的混淆程度由低到高的排序为三级生成方法、二级生成方法、一级生成方法,当安全性等级为一级时,选定一级生成方法对全局数组进行转换,当安全性等级为二级时,选定二级生成方法对全局数组进行转换,当安全性等级为三级时,选定三级生成方法对全局数组进行转换。
进一步地,对所述虚假全局数组进行混淆加固处理,生成加密源代码,包括:
收集字符串并将所述字符串存放在所述虚假全局数组中,用GetString函数替换字符串,生成一级加密源代码;
随机选取一级加密源代码中的C/C++函数的部分运算表达式作为替换目标表达式,设置等价表达式将所述替换目标表达式替换成混淆运算表达式,生成二级加密源代码;
在二级加密源代码中插入控制流,对所述控制流进行扁平化处理并重新组织,生成三级加密源代码;
将三级加密源代码中的判断值为确定值的分支跳转判断条件改写为判断条件表达式,生成四级加密源代码;
在四级加密源代码中随机选择一个函数或方法插入反调试代码,或在指定的类、类方法和实施方法插入反调试代码,生成加密源代码。
进一步地,当设置等价表达式将所述替换目标表达式替换成混淆运算表达式时,所述等价表达式根据复杂度由高到低划分为一级表达式、二级表达式和三级表达式,在进行一次混淆时,使用所述一级表达式对替换目标表达式进行替换。
进一步地,当加密源代码受到攻击,调整加密源代码的加密程度时,将安全性等级调整为安全性评估较低的新安全性等级,并根据新安全性等级选定新数组生成方法,生成新虚假全局数组,并对所述新虚假全局数组进行混淆加固处理,生成新加密源代码并运行,在新加密源代码的运行过程中监测新加密源代码的受攻击状况。
进一步地,当降低安全性等级时,若安全性等级为一级安全,则调整等价表达式的复杂度,将虚假全局数组根据代码行数等量划分为三个区域,分别为第一区域、第二区域和第三区域,分别判定第一区域、第二区域和第三区域的区域安全性等级,并将区域安全性等级最低的相应区域确定为调整区域,提高所述调整区域中的等价表达式的复杂度并对替换目标表达式进行替换。
进一步地,当提高所述调整区域中的等价表达式的复杂度时,若等价表达式为一级表达式,则将一级表达式更换为二级表达式,若等价表达式为二级表达式,则将二表达式更换为三级表达式,若等价表达式为三级表达式,扩大所述调整区域的范围。
进一步地,当扩大调整区域的范围时,调整区域的初始范围为(m,n),设置第一调整参数k1,用于将(m,n)调整为(m’,n’)其中,m’=m-k1,n’=n+k1,m为调整区域的第一行代码在虚假全局数组中的行数,n为调整区域的最后一行代码在虚假全局数组中的行数,m’为调整区域的第一行代码经过调整后在虚假全局数组中的行数,n’为调整区域的最后一行代码经过调整后在虚假全局数组中的行数。
进一步地,当将(m,n)调整为(m’,n’)时,根据虚假全局数组的总行数z对m’和n’的数值大小进行判定,
若m’>0且n’≦z,判定(m’,n’)为可取范围,将调整区域的初始范围(m,n)调整为更新范围(m’,n’),
若m’≦0或n’>z,判定(m’,n’)为不可取范围,则将调整区域的初始范围(m,n)调整为全域范围(1,z),同时在调整区域内增加等价表达式的使用次数。
进一步地,在调整区域内调整等价表达式的使用次数时,设置第二调整参数k2,用于将等价表达式的初始使用次数x调整为x’,其中,k2=(n’-m’)/z,x’=x+[k2],[k2]为取k2的整数部分的函数。
与现有技术相比,本发明的有益效果在于,通过根据源代码的全局数组的安全性等级和全局数组格式选择数组生成方法,获取虚假全局数组,对虚假全局数组进行混淆加固处理,生成加密源代码并运行,在加密源代码的运行过程中监测加密源代码的受攻击状况,在加密源代码受到攻击时,调整加密源代码的加密程度,不仅增加了源代码的逻辑复杂性,降低了源代码可读性,而且在实际运行过程中对源代码进行保护和实时调整,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
尤其,通过根据全局数组的安全性等级和全局数组格式选择数组生成方法,在安全性等级较高时,选用混淆程度较低的数组生成方法对全局数据进行混淆,避免生成的虚假全局数组过于复杂,造成运行困难,在安全性等级较低时,选用混淆程度较高的数组生成方法对全局数据进行混淆,使生成的虚假全局数组的安全性提高,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
尤其,通过在虚假全局数组中插入字符串并使用GetString函数替换字符串,转换C/C++函数中的运算表达式,插入控制流并且对控制流进行扁平化处理,将判断值为确定值的分支跳转判断条件改写为判断条件表达式,插入反调试代码,使用多种方法对源代码进行加密处理获得加密源代码,增加源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
尤其,通过将等价表达式根据复杂度由高到低划分为一级表达式、二级表达式和三级表达式,在进行一次混淆时,使用一级表达式对替换目标表达式进行替换,不仅优先使用复杂度最低的一级表达式对替换目标表达式进行替换,避免因所生成的加密源代码的逻辑过于复杂而导致运行困难,而且实现了对虚假全局数组的混淆表达式的处理,提高了加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
尤其,通过在加密源代码受到攻击时,调整加密源代码的加密程度,生成混淆程度更高的新虚拟全局数据,再次进行混淆加固处理,生成加密程度更高的新加密源代码,并运行新加密源代码和监测其受攻击状况,实现了根据实际使用中加密源代码的受攻击状况实时采取调整和保护措施,提高加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
尤其,通过在安全性等级为一级安全,无法通过降低安全性等级将虚假全局数组的混淆程度提高时,将等价表达式的复杂度提高,使生成的加密源代码的加密程度提高,进而提高加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
尤其,通过在提高等价表达式的复杂度时,将一级表达式更换为二级表达式对替换目标表达式进行替换,生成加密源代码,若加密源代码运行后仍然受到攻击,则将二级表达式更换为三级表达式对替换目标表达式进行替换,生成加密源代码,若加密源代码运行后仍然受到攻击,则证明仅提高等价表达式的复杂度不足以使加密源代码的加密程度抵御攻击,此时扩大调整区域的范围,对未调整的等价表达式进行更换,使生成的加密源代码的加密程度提高,进而提高加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
尤其,通过在等价表达式的复杂度达最高级,无法通过提高等价表达式的复杂度的方式提高加密源代码的加密程度时,设置第一调整参数k1,对调整区域的初始范围为(m,n)进行调整,使调整区域的范围根据一定规律扩大,在范围扩大后的调整区域内提高等价表达式的复杂度,而非全域中提高等价表达式的复杂度,不仅避免因所生成的加密源代码的逻辑过于复杂而导致运行困难,而且实现了对虚假全局数组的混淆表达式的处理,提高了加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
尤其,通过根据虚假全局数组的总行数z对m’和n’的数值大小判定扩大后的调整范围是否可取,确定进行局部调整或全域调整,并且在进行全域调整时增加等价表达式的使用次数,以保证对加密源代码的修改程度足以使其加密程度得到显著提高,提高加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
尤其,通过在调整区域内调整等价表达式的使用次数时,设置第二调整参数k2,对等价表达式的使用次数进行调整,以保证对加密源代码的修改程度足以使其加密程度得到显著提高,提高加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
附图说明
图1为本发明实施例提供的基于源混淆的IOS端安全加密控制方法的简易流程图;
图2为本发明实施例提供的基于源混淆的IOS端安全加密控制方法的具体实施操作流程图;
图3为本发明实施例提供的基于源混淆的IOS端安全加密控制方法中的等效指令替换的简单示例图;
图4为本发明实施例中的提供的基于源混淆的IOS端安全加密控制方法中的控制流扁平化处理的简单示意图。
具体实施方式
为了使本发明的目的和优点更加清楚明白,下面结合实施例对本发明作进一步描述;应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。
下面参照附图来描述本发明的优选实施方式。本领域技术人员应当理解的是,这些实施方式仅仅用于解释本发明的技术原理,并非在限制本发明的保护范围。
请参照图1所示,本发明实施例提供一种基于源混淆的IOS端安全加密控制方法,其步骤包括:
判定源代码的全局数组的安全性等级,分析源代码的全局数组格式,根据所述安全性等级和所述全局数组格式选择数组生成方法,得到虚假全局数组;
对所述虚假全局数组进行混淆加固处理,生成加密源代码,所述混淆加固处理包括用GetString函数替换字符串、混淆表达式、插入控制流、改写判断条件和插入反调试代码;
运行加密源代码,在加密源代码的运行过程中监测加密源代码的受攻击状况,在加密源代码受到攻击时,调整加密源代码的加密程度。
通过根据源代码的全局数组的安全性等级和全局数组格式选择数组生成方法,获取虚假全局数组,对虚假全局数组进行混淆加固处理,生成加密源代码并运行,在加密源代码的运行过程中监测加密源代码的受攻击状况,在加密源代码受到攻击时,调整加密源代码的加密程度,不仅增加了源代码的逻辑复杂性,降低了源代码可读性,而且在实际运行过程中对源代码进行保护和实时调整,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
具体而言,当根据所述安全性等级和所述全局数组格式选择数组生成方法时,安全性等级包括一级安全、二级安全和三级安全,数组生成方法包括一级生成方法、二级生成方法和三级生成方法,其中,各安全性等级的安全性由低到高的排序为一级安全、二级安全、三级安全,数组生成方法的混淆程度由低到高的排序为三级生成方法、二级生成方法、一级生成方法,当安全性等级为一级时,选定一级生成方法对全局数组进行转换,当安全性等级为二级时,选定二级生成方法对全局数组进行转换,当安全性等级为三级时,选定三级生成方法对全局数组进行转换。
在实际操作过程中,源代码的安全性等级根据全局数组的数组数量、运算量和全局数组的总行数等判定,各安全性等级的安全性由低到高的排序为一级安全、二级安全、三级安全,根据全局数组格式设置若干个数组生成方法,并将数组生成方法根据其复杂程度划分为一级生成方法、二级生成方法和三级生成方法,数组生成方法的混淆程度由低到高的排序为三级生成方法、二级生成方法、一级生成方法,如数组生成方法1是为数组中的每个变量增加一个固定数值,数组生成方法2是为数组中的每个变量乘以一个固定数值,数组生成方法3是令数组中的每个变量进行平方计算,此时三个数组生成方法的复杂程度排序为数组生成方法1<数组生成方法2<数组生成方法3,则数组生成方法1为一个三级生成方法,数组生成方法2为一个二级生成方法,数组生成方法3为一个一级生成方法,当安全性等级为一级时,选定一级生成方法对全局数组进行转换,当安全性等级为二级时,选定二级生成方法对全局数组进行转换,当安全性等级为三级时,选定三级生成方法对全局数组进行转换。
通过根据全局数组的安全性等级和全局数组格式选择数组生成方法,在安全性等级较高时,选用混淆程度较低的数组生成方法对全局数据进行混淆,避免生成的虚假全局数组过于复杂,造成运行困难,在安全性等级较低时,选用混淆程度较高的数组生成方法对全局数据进行混淆,使生成的虚假全局数组的安全性提高,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
具体而言,对所述虚假全局数组进行混淆加固处理,生成加密源代码,包括:
收集字符串并将所述字符串存放在所述虚假全局数组中,用GetString函数替换字符串,生成一级加密源代码;
随机选取一级加密源代码中的C/C++函数的部分运算表达式作为替换目标表达式,设置等价表达式将所述替换目标表达式替换成混淆运算表达式,生成二级加密源代码;
在二级加密源代码中插入控制流,对所述控制流进行扁平化处理并重新组织,生成三级加密源代码;
将三级加密源代码中的判断值为确定值的分支跳转判断条件改写为判断条件表达式,生成四级加密源代码;
在四级加密源代码中随机选择一个函数或方法插入反调试代码,或在指定的类、类方法和实施方法插入反调试代码,生成加密源代码。
对虚假全局数组进行混淆加固处理时,对C/C++函数中的运算表达式进行等效转换,使其在常用反编译工具中,增加破解者分析难度,有效的保护核心算法的原始逻辑,在C/C++函数中,插入一些虚假的不可达指令或多余的跳转指令,在运行时刻这些插入的指令不会运行,但在静态分析时刻却难以知晓这一点,对C/C++代码中的函数所对应的控制流进行“横向”变扁边长,使其在常用反编译工具中,增加破解者分析难度,有效的保护核心算法的原始逻辑,将代码中分支跳转判断条件由原来的确定值变为表达式,增加程序逻辑复杂性,降低代码可读性。
通过在虚假全局数组中插入字符串并使用GetString函数替换字符串,转换C/C++函数中的运算表达式,插入控制流并且对控制流进行扁平化处理,将判断值为确定值的分支跳转判断条件改写为判断条件表达式,插入反调试代码,使用多种方法对源代码进行加密处理获得加密源代码,增加源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
具体而言,当设置等价表达式将所述替换目标表达式替换成混淆运算表达式时,所述等价表达式根据复杂度由高到低划分为一级表达式、二级表达式和三级表达式,在进行一次混淆时,使用所述一级表达式对替换目标表达式进行替换。
进行一次混淆时,考虑到在生成虚假全局数组时已经根据全局数组的安全性等级选择了相应的数组生成方法,认为此时虚假全局数组的混淆程度在正常情况下足以应对外部攻击,因此此时优先使用复杂度最低的一级表达式对替换目标表达式进行替换,避免因所生成的加密源代码的逻辑过于复杂而导致运行困难。
通过将等价表达式根据复杂度由高到低划分为一级表达式、二级表达式和三级表达式,在进行一次混淆时,使用一级表达式对替换目标表达式进行替换,不仅优先使用复杂度最低的一级表达式对替换目标表达式进行替换,避免因所生成的加密源代码的逻辑过于复杂而导致运行困难,而且实现了对虚假全局数组的混淆表达式的处理,提高了加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
具体而言,当加密源代码受到攻击,调整加密源代码的加密程度时,将安全性等级调整为安全性评估较低的新安全性等级,并根据新安全性等级选定新数组生成方法,生成新虚假全局数组,并对所述新虚假全局数组进行混淆加固处理,生成新加密源代码并运行,在新加密源代码的运行过程中监测新加密源代码的受攻击状况。
当加密源代码在运行过程中受到攻击,表明加密源代码的加密程度不足以抵御外部攻击,此时需要对全局数组的安全性等级的评定结果进行降低处理,根据降低后的新安全性等级选定混淆程度更高的新数组生成方法对全局数组进行混淆,生成混淆程度更高的新虚假全局数组,再次进行混淆加固处理和运行监测,以判定调整后的加密源代码的加密程度是否足以抵御外部攻击。
通过在加密源代码受到攻击时,调整加密源代码的加密程度,生成混淆程度更高的新虚拟全局数据,再次进行混淆加固处理,生成加密程度更高的新加密源代码,并运行新加密源代码和监测其受攻击状况,实现了根据实际使用中加密源代码的受攻击状况实时采取调整和保护措施,提高加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
具体而言,当降低安全性等级时,若安全性等级为一级安全,则调整等价表达式的复杂度,将虚假全局数组根据代码行数等量划分为三个区域,分别为第一区域、第二区域和第三区域,分别判定第一区域、第二区域和第三区域的区域安全性等级,并将区域安全性等级最低的相应区域确定为调整区域,提高所述调整区域中的等价表达式的复杂度并对替换目标表达式进行替换。
通过在安全性等级为一级安全,无法通过降低安全性等级将虚假全局数组的混淆程度提高时,将等价表达式的复杂度提高,使生成的加密源代码的加密程度提高,进而提高加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
具体而言,当提高所述调整区域中的等价表达式的复杂度时,若等价表达式为一级表达式,则将一级表达式更换为二级表达式,若等价表达式为二级表达式,则将二表达式更换为三级表达式,若等价表达式为三级表达式,扩大所述调整区域的范围。
由于在进行一次混淆时,首先选取一级表达式对替换目标表达式进行替换,故而在提高等价表达式的复杂度时,先将一级表达式更换为二级表达式对替换目标表达式进行替换,生成加密源代码,若加密源代码运行后仍然受到攻击,则将二级表达式更换为三级表达式对替换目标表达式进行替换,生成加密源代码,若加密源代码运行后仍然受到攻击,则证明仅提高等价表达式的复杂度不足以使加密源代码的加密程度抵御攻击,此时扩大调整区域的范围,对未调整的等价表达式进行更换。
通过在提高等价表达式的复杂度时,将一级表达式更换为二级表达式对替换目标表达式进行替换,生成加密源代码,若加密源代码运行后仍然受到攻击,则将二级表达式更换为三级表达式对替换目标表达式进行替换,生成加密源代码,若加密源代码运行后仍然受到攻击,则证明仅提高等价表达式的复杂度不足以使加密源代码的加密程度抵御攻击,此时扩大调整区域的范围,对未调整的等价表达式进行更换,使生成的加密源代码的加密程度提高,进而提高加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
具体而言,当扩大调整区域的范围时,调整区域的初始范围为(m,n),设置第一调整参数k1,用于将(m,n)调整为(m’,n’)其中,m’=m-k1,n’=n+k1,m为调整区域的第一行代码在虚假全局数组中的行数,n为调整区域的最后一行代码在虚假全局数组中的行数,m’为调整区域的第一行代码经过调整后在虚假全局数组中的行数,n’为调整区域的最后一行代码经过调整后在虚假全局数组中的行数。
在实际操作过程中,第一调整参数k1的取值的大小可以根据虚假全局数组的总行数的大小进行设置,当虚假全局数组的体量较大,即虚假全局数组的总行数较多时,k1应相应设置为较大的数值,以使调整范围的次数尽量少且实现有效的调节,当虚假全局数组的体量较小,即虚假全局数组的总行数较少时,k1应相应设置为较小的数值,从而在较少的总行数的限制下,保证能够对调整区域的范围进行多次扩大。
通过在等价表达式的复杂度达最高级,无法通过提高等价表达式的复杂度的方式提高加密源代码的加密程度时,设置第一调整参数k1,对调整区域的初始范围为(m,n)进行调整,使调整区域的范围根据一定规律扩大,在范围扩大后的调整区域内提高等价表达式的复杂度,而非全域中提高等价表达式的复杂度,不仅避免因所生成的加密源代码的逻辑过于复杂而导致运行困难,而且实现了对虚假全局数组的混淆表达式的处理,提高了加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
具体而言,当将(m,n)调整为(m’,n’)时,根据虚假全局数组的总行数z对m’和n’的数值大小进行判定,
若m’>0且n’≦z,判定(m’,n’)为可取范围,将调整区域的初始范围(m,n)调整为更新范围(m’,n’),
若m’≦0或n’>z,判定(m’,n’)为不可取范围,则将调整区域的初始范围(m,n)调整为全域范围(1,z),同时在调整区域内增加等价表达式的使用次数。
通过根据虚假全局数组的总行数z对m’和n’的数值大小判定扩大后的调整范围是否可取,确定进行局部调整或全域调整,并且在进行全域调整时增加等价表达式的使用次数,以保证对加密源代码的修改程度足以使其加密程度得到显著提高,提高加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
具体而言,在调整区域内调整等价表达式的使用次数时,设置第二调整参数k2,用于将等价表达式的初始使用次数x调整为x’,其中,k2=(n’-m’)/z,x’=x+[k2],[k2]为取k2的整数部分的函数。
令k2=(n’-m’)/z,根据不可取范围超出加密源代码的总行数的范围大小确定k2的大小,不可取范围超出加密源代码的总行数的范围越大,说明需要使等价表达式的使用次数的增加幅度更大,以保证对加密源代码的修改程度足以使其加密程度得到显著提高。
通过在调整区域内调整等价表达式的使用次数时,设置第二调整参数k2,对等价表达式的使用次数进行调整,以保证对加密源代码的修改程度足以使其加密程度得到显著提高,提高加密源代码的逻辑复杂性,降低源代码的可读性,从而提高了基于源混淆的IOS端安全加密控制方法所生成的加密源代码的安全性。
请参阅图2所示,在实际操作过程中,本发明实施例所提供的基于源混淆的IOS端安全加密控制方法的具体实施步骤如下:
步骤S1:分析全组数据格式,并根据全局数据格式随机生成静态虚假全局数组;
步骤S2:收集字符串,并将所述字符串存放在所述静态虚假全局数组中,对静态虚假全局数组进行随机加密,在源代码中原来字符串出现的位置替换为GetString函数
步骤S3:随机选取C/C++函数中的部分运算表达式,并使用等价表达式将所述运算表达式替换;
步骤S4:在函数的源代码中插入控制流;
步骤S5:对源代码中的所述控制流进行扁平化处理,重新组织控制流;
步骤S6:将源代码中的分支跳转判断条件由原来的确定值变为表达式;
步骤S7:在每个源文件中随机选择一个函数(或方法)插入反调试代码,和/或在指定的类、类方法、实施方法和函数中插入反调试代码,生成加密源代码;
步骤S8:读取创建好的keychain中的agrp信息,和保存的teamID和BundleID进行对比,若不一致则终止应用程序的运行并调整加密源代码的加密程度;
步骤S9:读取当前架构的代码段,计算crc校验值,将所计算的crc校验值与原代码段的crc校验值进行对比,若不一致则终止应用程序的运行并调整加密源代码的加密程度;
步骤S10:通过sysctl查看内核进程状态位确定应用程序是否正在被调试,若是则终止应用程序的运行并调整加密源代码的加密程度;
步骤S11:通过检测Friday/Cycript代码注入框架特征,检测到Cydia Substrate动态库注入及恶意库动态注入特征来判断是否被注入,若被注入则终止应用程序的运行并调整加密源代码的加密程度;
步骤S12:通过dladdr函数得到imp地址所在的模块info.dli_fname,判断是否为主二进制模块,若否则终止应用程序的运行并调整加密源代码的加密程度;
步骤S13:验证函数的指针来自程序、苹果的库或者位置调用方,从而判断应用程序是否被hook,若是则终止应用程序的运行并调整加密源代码的加密程度;
步骤S14:替换函数内部的前几条指令跳转,分析函数的内存前几条指令中有没有跳转来判断是不是inline hook,若是则终止应用程序的运行并调整加密源代码的加密程度。
在实施例1中,本发明的操作步骤如下。
步骤S1:虚假全局数组内隐藏的字母串加密信息。
构建虚假的全局数组(分析全局数组格式,根据所分析的格式随机生成虚假的全局数组);
收集字符串,并将它们存放在静态的虚假全局数组中,对虚假全局数组整体进行随机加密,程序运行的时候对数组整体解密;源代码中原来字符串出现的位置替换为GetString函数调用,该函数调用在运行时候会正确返回解密后的字符串。
步骤S2:等效指令替换。
自动挑选C/C++函数中的部分运算表达式(随机选取);
使用一系列复杂的等价表达式来替换它,使得表达式结果在静态分析时难以得到,增加了攻击都逆向分析和篡改的难度。
请参阅图3所示,本发明实施例的等效指令替换的简单示例。
图3中r是一个复杂的表达式,其值为0,r中可能涉及到全局变量,通过静态的分析反汇编得到的代码,不易知晓变换后的表达式的值。
对C/C++函数中的运算表达式进行等效转换,使其在常用反编译工具中,增加破解者分析难度,有效的保护核心算法的原始逻辑。
步骤S3:虚假控制流。
在函数的源代码块中插入多余的控制流,所插入的控制流包括如下三种:
1、永远不会被执行到的“死代码”;
2、总会被执行到的冗余代码(不影响函数的原始逻辑和功能);
3、有时会执行有时不会执行(不影响函数的原始逻辑和功能)。
在C/C++函数中,插入一些虚假的不可达指令或多余的跳转指令,在运行时刻这些插入的指令不会运行,但在静态分析时刻却难以知晓这一点。
具体的做法:(1)随机的在函数中非变量声明语句的前面插入标签;并且自动挑取函数中部分非变量声明语句的连续语句,将该组语句放入if(true){}}else{}的真分支里,同时随机复制该组语句中的部分语句放入假分支里,并且在假分支中插入goto语句,goto语句的跳转目标是之机随机插入的标签.
True在实现时是值为真的不透明谓词
(2)同(1)类似,只不过使用的是if(false){}else{}
False在实现时是值为false的不透明谓词。
请参阅图4所示,本发明实施例中的提供的一种基于源混淆的IOS端安全加密控制方法中的控制流扁平化处理的简单示意图。
步骤S4:控制流扁平化。
对源代码中的控制流,比如循环和条件转移语句进行扁平化处理,重新组织控制流,每个基本块都是一个switch-case语句,通过控制switch变量的值来执行不同case语句。
对应的设计方法如下:
通过分析函数内部的控制流和基本块,了解函数的逻辑和功能,再通过重构控制流,改变代码结构,基本思路是让所有的基本块都有同一个前驱,该前驱对基本块使用switch语句进行分发,依赖于switch变量进行分发。先为每个基本块进行编号,每个基本块就是一个case块,如果基本块有后续块,就替换每个基本块的后续块,更新switch变量为后续块的值,然后跳转到switch开始分发处,由switch语句根据switch变量进行分发。通过这种switch-case的方式,switch为调度器,case为执行单元,达到调度器统一调用的效果,通过这种方式,运行时控制流还会以正确的顺序流经各个基本块,但控制流图的结构却被彻底地破坏掉了。
对C/C++代码中的函数所对应的控制流进行“横向”变扁边长,使其在常用反编译工具中,增加破解者分析难度,有效的保护核心算法的原始逻辑。
步骤S5:不透明谓词。
将代码中分支跳转判断条件由原来的确定值变为表达式,将代码中分支跳转判断条件由原来的确定值变为表达式,增加程序逻辑复杂性,降低代码可读性。
步骤S6:防动态调试。
防调试主要分为两种方式,一种是阻止调试器附加,一种是检测是否有调试器存在。
1、通过sysctl查看内核进程状态标志位。如果一个进程在调试状态,会有一个标志位(info.kp_proc.p_flag)来标识当前是否正在调试。
2、syscall可以通过软中断实现从用户态切换到系统内核态的转换,所有的系统调用都可以通过syscall去实现,使用syscall去调用系统函数ptrace(ptrace是系统用来对运行中的进程进行调试和跟踪的工具,通过ptrace可以对另一个进程实现调试跟踪)。同时可以通过arm汇编实现以上功能,通过asm volatile内联汇编,实际上也是调用了ptrace。
全局反调试:会在每个源文件中随机选择一个函数(或方法)插入反调试代码。另外,对于一些重要的函数(main,+(void)load,+(void)initiliaze-(void)loadView等)也会插入反调试代码。
指定函数:在指定的类、类方法、实例方法和函数中插入反调试代码,对应用进行防调试保护,检测到配置防动态调试功能的类、方法、函数被GDB、Xcode、LLDB工具进行动态调试时,应用自动退出运行,并调整加密源代码的加密程度。
步骤S7:防动态注入。
技术原理:通过检测Frida/Cycript代码注入框架特征,检测到Cydia Substrate动态库注入以及恶意库动态库注入特征来判断是否被注入,对应用进行防动态注入保护,检测应用被Frida、CydiaSubstrate等工具动态注入代码时,应用自动退出运行,并调整加密源代码的加密程度。
步骤S8:防Hook攻击。
检测Method Swizzling替换:原理是替换imp,通过dladdr函数得到imp地址所在的模块info.dli_fname,如果不是主二进制模块,则认定被hook。
符号表替换:因为fishhook是基于懒加载符号表和非懒加载符号表进行替换的,验证函数的指针来自程序、苹果的库或者未知调用方,从而判断APP是否被hook。
检测inline hook:替换函数内部的前几条指令跳转,分析函数的内存前几条指令中有没有跳转来判断是不是inline hook。
对指定类、类方法、实例方法、C函数进行防Hook攻击保护。当通过MethodSwizzle、fishhook、Cydia Substrate等方式对应用进行Hook攻击时,自动退出运行,并调整加密源代码的加密程度。
步骤S9:完整性保护。
加固时提取源文件中的teamID和BundleID并保存。iOS keychian在APP运行时创建会自动获取签名信息保存在agrp中,读取创建好的keychain中的agrp信息,和保存的teamID和BundleID进行对比。如果不一致,说明应用被重签名,自动退出运行。对应用进行完整性校验,发现应用被重签名,应用自动退出运行,并调整加密源代码的加密程度。
步骤S10:代码段校验。
代码段是可执行文件中的函数代码,在函数运行时执行里面的指令。在APP被断点以及动态修改指令时,会修改代码段;当有拦截函数代码插入到代码段时也会修改代码段。加固时读取当前架构的代码段,计算crc校验值;应用运行时,实时读取取内存中当前架构的代码段进行比较。对iOS应用代码段的完整性进行校验,实时监测代码段是否被修改,如果检测到代码段被修改,应用退出运行,并调整加密源代码的加密程度。
至此,已经结合附图所示的优选实施方式描述了本发明的技术方案,但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本发明的原理的前提下,本领域技术人员可以对相关技术特征做出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。
以上所述仅为本发明的优选实施例,并不用于限制本发明;对于本领域的技术人员来说,本发明可以有各种更改和变化。 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种基于源混淆的IOS端安全加密控制方法,其特征在于,包括:判定源代码的全局数组的安全性等级,分析源代码的全局数组格式,根据所述安全性等级和所述全局数组格式选择数组生成方法,得到虚假全局数组;
对所述虚假全局数组进行混淆加固处理,生成加密源代码,所述混淆加固处理包括用GetString函数替换字符串、混淆表达式、插入控制流、改写判断条件和插入反调试代码;
运行加密源代码,在加密源代码的运行过程中监测加密源代码的受攻击状况,在加密源代码受到攻击时,调整加密源代码的加密程度。
2.根据权利要求1所述的基于源混淆的IOS端安全加密控制方法,其特征在于,当根据所述安全性等级和所述全局数组格式选择数组生成方法时,安全性等级包括一级安全、二级安全和三级安全,数组生成方法包括一级生成方法、二级生成方法和三级生成方法,其中,各安全性等级的安全性由低到高的排序为一级安全、二级安全、三级安全,数组生成方法的混淆程度由低到高的排序为三级生成方法、二级生成方法、一级生成方法,当安全性等级为一级时,选定一级生成方法对全局数组进行转换,当安全性等级为二级时,选定二级生成方法对全局数组进行转换,当安全性等级为三级时,选定三级生成方法对全局数组进行转换。
3.根据权利要求2所述的基于源混淆的IOS端安全加密控制方法,其特征在于,对所述虚假全局数组进行混淆加固处理,生成加密源代码,包括:
收集字符串并将所述字符串存放在所述虚假全局数组中,用GetString函数替换字符串,生成一级加密源代码;
随机选取一级加密源代码中的C/C++函数的部分运算表达式作为替换目标表达式,设置等价表达式将所述替换目标表达式替换成混淆运算表达式,生成二级加密源代码;
在二级加密源代码中插入控制流,对所述控制流进行扁平化处理并重新组织,生成三级加密源代码;
将三级加密源代码中的判断值为确定值的分支跳转判断条件改写为判断条件表达式,生成四级加密源代码;
在四级加密源代码中随机选择一个函数或方法插入反调试代码,或在指定的类、类方法和实施方法插入反调试代码,生成加密源代码。
4.根据权利要求3所述的基于源混淆的IOS端安全加密控制方法,其特征在于,当设置等价表达式将所述替换目标表达式替换成混淆运算表达式时,所述等价表达式根据复杂度由高到低划分为一级表达式、二级表达式和三级表达式,在进行一次混淆时,使用所述一级表达式对替换目标表达式进行替换。
5.根据权利要求4所述的基于源混淆的IOS端安全加密控制方法,其特征在于,当加密源代码受到攻击,调整加密源代码的加密程度时,将安全性等级调整为安全性评估较低的新安全性等级,并根据新安全性等级选定新数组生成方法,生成新虚假全局数组,并对所述新虚假全局数组进行混淆加固处理,生成新加密源代码并运行,在新加密源代码的运行过程中监测新加密源代码的受攻击状况。
6.根据权利要求5所述的基于源混淆的IOS端安全加密控制方法,其特征在于,当降低安全性等级时,若安全性等级为一级安全,则调整等价表达式的复杂度,将虚假全局数组根据代码行数等量划分为三个区域,分别为第一区域、第二区域和第三区域,分别判定第一区域、第二区域和第三区域的区域安全性等级,并将区域安全性等级最低的相应区域确定为调整区域,提高所述调整区域中的等价表达式的复杂度并对替换目标表达式进行替换。
7.根据权利要求6所述的基于源混淆的IOS端安全加密控制方法,其特征在于,当提高所述调整区域中的等价表达式的复杂度时,若等价表达式为一级表达式,则将一级表达式更换为二级表达式,若等价表达式为二级表达式,则将二表达式更换为三级表达式,若等价表达式为三级表达式,扩大所述调整区域的范围。
8.根据权利要求7所述的基于源混淆的IOS端安全加密控制方法,其特征在于,当扩大调整区域的范围时,调整区域的初始范围为(m,n),设置第一调整参数k1,用于将(m,n)调整为(m’,n’)其中,m’=m-k1,n’=n+k1,m为调整区域的第一行代码在虚假全局数组中的行数,n为调整区域的最后一行代码在虚假全局数组中的行数,m’为调整区域的第一行代码经过调整后在虚假全局数组中的行数,n’为调整区域的最后一行代码经过调整后在虚假全局数组中的行数。
9.根据权利要求8所述的基于源混淆的IOS端安全加密控制方法,其特征在于,当将(m,n)调整为(m’,n’)时,根据虚假全局数组的总行数z对m’和n’的数值大小进行判定,
若m’>0且n’≦z,判定(m’,n’)为可取范围,将调整区域的初始范围(m,n)调整为更新范围(m’,n’),
若m’≦0或n’>z,判定(m’,n’)为不可取范围,则将调整区域的初始范围(m,n)调整为全域范围(1,z),同时在调整区域内增加等价表达式的使用次数。
10.根据权利要求9所述的基于源混淆的IOS端安全加密控制方法,其特征在于,在调整区域内调整等价表达式的使用次数时,设置第二调整参数k2,用于将等价表达式的初始使用次数x调整为x’,其中,k2=(n’-m’)/z,x’=x+[k2],[k2]为取k2的整数部分的函数。
CN202211121229.1A 2022-09-15 2022-09-15 一种基于源混淆的ios端安全加密控制方法 Active CN115203652B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211121229.1A CN115203652B (zh) 2022-09-15 2022-09-15 一种基于源混淆的ios端安全加密控制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211121229.1A CN115203652B (zh) 2022-09-15 2022-09-15 一种基于源混淆的ios端安全加密控制方法

Publications (2)

Publication Number Publication Date
CN115203652A true CN115203652A (zh) 2022-10-18
CN115203652B CN115203652B (zh) 2022-12-13

Family

ID=83572430

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211121229.1A Active CN115203652B (zh) 2022-09-15 2022-09-15 一种基于源混淆的ios端安全加密控制方法

Country Status (1)

Country Link
CN (1) CN115203652B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070039048A1 (en) * 2005-08-12 2007-02-15 Microsoft Corporation Obfuscating computer code to prevent an attack
CN109918917A (zh) * 2019-03-19 2019-06-21 北京智游网安科技有限公司 防止h5源码泄漏的方法、计算机设备和存储介质
CN110765425A (zh) * 2019-10-25 2020-02-07 杭州涂鸦信息技术有限公司 一种对ios应用程序源代码进行混淆保护的方法及系统
CN113569269A (zh) * 2021-09-23 2021-10-29 苏州浪潮智能科技有限公司 一种代码混淆的加密方法、装置、设备及可读介质
CN113761485A (zh) * 2021-08-25 2021-12-07 山东浪潮通软信息科技有限公司 一种基于swift的代码混淆方法、装置、设备及介质
CN114611074A (zh) * 2022-03-09 2022-06-10 河海大学 Solidity语言源代码混淆方法、系统、设备及存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070039048A1 (en) * 2005-08-12 2007-02-15 Microsoft Corporation Obfuscating computer code to prevent an attack
CN109918917A (zh) * 2019-03-19 2019-06-21 北京智游网安科技有限公司 防止h5源码泄漏的方法、计算机设备和存储介质
CN110765425A (zh) * 2019-10-25 2020-02-07 杭州涂鸦信息技术有限公司 一种对ios应用程序源代码进行混淆保护的方法及系统
CN113761485A (zh) * 2021-08-25 2021-12-07 山东浪潮通软信息科技有限公司 一种基于swift的代码混淆方法、装置、设备及介质
CN113569269A (zh) * 2021-09-23 2021-10-29 苏州浪潮智能科技有限公司 一种代码混淆的加密方法、装置、设备及可读介质
CN114611074A (zh) * 2022-03-09 2022-06-10 河海大学 Solidity语言源代码混淆方法、系统、设备及存储介质

Also Published As

Publication number Publication date
CN115203652B (zh) 2022-12-13

Similar Documents

Publication Publication Date Title
Liao et al. Soliaudit: Smart contract vulnerability assessment based on machine learning and fuzz testing
US7841010B2 (en) Software or other information integrity verification using variable block length and selection
US8286251B2 (en) Obfuscating computer program code
CN110225029B (zh) 注入攻击检测方法、装置、服务器及存储介质
EP1674966B1 (en) Watermarking computer program code
US20070271617A1 (en) Vulnerability check program, vulnerability check apparatus, and vulnerability check method
Ragel et al. IMPRES: integrated monitoring for processor reliability and security
CN110909358A (zh) 一种基于动静态分析的整形漏洞检测方法
US20070266434A1 (en) Protecting Applications Software Against Unauthorized Access, Reverse Engineering or Tampering
CN111695119A (zh) 一种基于细粒度静态污点分析与符号执行的web漏洞检测方法
CN111475168B (zh) 一种代码编译方法及装置
CN115168861A (zh) 数据安全验证方法、装置、设备及存储介质
CN112817877B (zh) 异常脚本检测方法、装置、计算机设备和存储介质
JP5077455B2 (ja) 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法
KR100653122B1 (ko) 안전한 소프트웨어 개발을 위한 룰 기반의 실시간 탐지시스템 및 방법
CN115203652B (zh) 一种基于源混淆的ios端安全加密控制方法
CN116305164A (zh) 跨合约漏洞检测方法、装置及电子设备
CN109033821A (zh) 一种栈溢出攻击防护系统及方法
CN114637988A (zh) 一种面向二进制的函数级软件随机化方法
Ahn et al. Data embedding scheme for efficient program behavior modeling with neural networks
Yan et al. SPIDER: Speeding up Side-Channel Vulnerability Detection via Test Suite Reduction
CN114707143B (zh) 内存数据损坏攻击的监测方法和装置
Wang et al. Hardware-assisted monitoring for code security in embedded system
CN116756747A (zh) 程序代码的漏洞检测方法、系统、装置及存储介质
Rahimunnisa et al. Hardware assisted address monitoring system

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
GR01 Patent grant
GR01 Patent grant