一种用于移动代码的结构扁平方法和系统技术方案

技术编号:21185034 阅读:32 留言:0更新日期:2019-05-22 15:38
本发明专利技术提供了一种用于移动代码的结构扁平方法,包括以下步骤:将函数内的所有第一基本块包含的指令进行分割,组成多个第二基本块;以及通过条件指令和跳转指令,将多个第二基本块重新排序。本发明专利技术提供用于移动代码的结构扁平方法,以函数为操作对象,以指令为粒度进行切割,组合成新的基本块;通过条件指令和跳转指令,打乱新的基本块的上下顺序并替换跳转。由此,可以将编译器的中间代码LLVM IR进行结构扁平变化,将原本的控制流平台化,随机化,可以达到膨胀代码增加逆向复杂度,对抗IDA Pro,控制流平坦随机化后上下文的代码顺序不是最终的执行顺序,增加人类阅读的难度。

A Flat Structure Method and System for Mobile Code

The invention provides a flat structure method for mobile code, which includes the following steps: dividing all the instructions contained in the first basic block of a function into several second basic blocks, and reordering multiple second basic blocks through conditional instructions and jump instructions. The invention provides a flat structure method for mobile code, which cuts functions as operation objects and takes instructions as granularity, and combines them into new basic blocks. By using conditional instructions and jump instructions, the up and down order of new basic blocks is disrupted and the jump is replaced. Thus, the compiler's intermediate code LLVM IR can be structurally flattened, and the original control flow can be platform-based and randomized, which can increase the reverse complexity of the expansion code and confront IDA Pro. The code sequence of the context after the randomization of the control flow is not the final execution order, which increases the difficulty of human reading.

【技术实现步骤摘要】
一种用于移动代码的结构扁平方法和系统
本专利技术涉及移动终端应用安全
,尤其涉及一种插件式的扫描配置处理方法和系统。
技术介绍
近年来,随着智能手机的普及以及智能手机操作系统的发展,日常生活中手机成为了人们不可分离的一部分。而现今的手机已经不仅仅是一个通信的工具,通信已经成为了如今手机最基本的功能,娱乐功能以及生活工具已经成为了一部手机必不可少的功能。但随着移动互联网的快速发展,应用的安全问题不断涌现出来,越来越多的应用遭到黑客的攻击被破解。在App保护解决方案领先供应商Arxan公布的年度移动App安全报告中显示,在排名前100位的付费苹果iOS应用当中,有87%的App已被黑客破解,安卓的更是不计其数,各种盗版软件遍布。于是越来越多的安卓应用开发者将核心代码由Java层转到Native层,但是有能力对苹果或者安卓应用进行代码保护的公司很少,一些开源加固方法只能对安卓Java代码进行加固,对苹果应用进行方法名混淆等,这些加固手段加固能力薄弱,无法抵御一些反编译软件和逆向人员的逆向分析。对于现有的移动应用代码混淆技术,往往只做了简单的混淆,例如主流的移动终端系统苹果系统和安卓系统:1.安卓系统许多应用往往只对Java代码做了混淆,但是Java代码混淆几乎没有效果,强大的反编译软件可以直接进行反编译;2.部分安卓系统应用对Native层代码只做了简单的字符串加密等的数据混淆,没有做控制流混淆,代码结构依然清晰不变,在IDAPro等软件中仍然可以轻松阅读,加固力度不大;3.苹果系统应用大多数应用几乎没有代码保护,或者只对方法名做混淆,这种代码在IDAPro等软件轻松可读。4.部分开源的控制流混淆只做了简单的结构变化,但是还存在着代码顺序不变,结构混淆力度简单等缺点。
技术实现思路
针对现有处理机制存在的不足,本专利技术提供一种用于移动代码的结构扁平方法和系统。一方面,本专利技术实施例提供一种用于移动代码的结构扁平方法,包括以下步骤:将函数内的所有第一基本块包含的指令进行分割,组成多个第二基本块;以及通过条件指令和跳转指令,将所述多个第二基本块重新排序。在本专利技术提供的用于移动代码的结构扁平方法中,在将函数内的所有第一基本块包含的指令进行分割,组成多个第二基本块的所述步骤中,根据配置,以固定指令数为组将所述函数内的所有第一基本块的指令进行分割。在本专利技术提供的用于移动代码的结构扁平方法中,通过条件指令和跳转指令,将所述多个第二基本块重新排序的所述步骤包括:记录多个第二基本块的跳转执行顺序,为每个所述第二基本块随机分配一个Tag值;构造While-Switch结构,将每个所述第二基本块放到一个随机顺序的Case语句内;设置全局Flag值;通过所述全局Flag值来控制多个Case语句的执行顺序。在本专利技术提供的用于移动代码的结构扁平方法中,在记录多个第二基本块的跳转执行顺序,为每个所述第二基本块随机分配一个Tag值的所述步骤之后,还包括:将所述多个第二基本块对应的多个Tag值随机排序。在本专利技术提供的用于移动代码的结构扁平方法中,在通过所述全局Flag值来控制多个Case语句的执行顺序的所述步骤之后还包括:在最后执行的第二基本块后插入返回指令,结束所述函数。相应地,本专利技术还提供一种用于移动代码的结构扁平系统,包括:分割模块,用于将函数内的所有第一基本块包含的指令进行分割,组成多个第二基本块;以及扁平模块,用于通过条件指令和跳转指令,将所述多个第二基本块重新排序。在本专利技术提供的用于移动代码的结构扁平系统中,所述分割模块用于根据配置,以固定指令数为组将所述函数内的所有第一基本块的指令进行分割。在本专利技术提供的用于移动代码的结构扁平系统中,所述扁平模块包括:记录单元,用于记录多个第二基本块的跳转执行顺序,为每个所述第二基本块随机分配一个Tag值;构造单元,用于构造While-Switch结构,将每个所述第二基本块放到一个随机顺序的Case语句内;设置单元,用于设置全局Flag值;控制单元,用于通过所述全局Flag值来控制多个Case语句的执行顺序。在本专利技术提供的用于移动代码的结构扁平系统中,所述扁平模块还包括:排序单元,用于将所述多个第二基本块对应的多个Tag值随机排序。在本专利技术提供的用于移动代码的结构扁平系统中,还包括:结束单元,用于在最后执行的第二基本块后插入返回指令,结束所述函数。实施本专利技术实施例,具有如下有益效果:本专利技术提供用于移动代码的结构扁平方法,以函数为操作对象,以指令为粒度进行切割,组合成新的基本块;通过条件指令和跳转指令,打乱新的基本块的上下顺序并替换跳转。由此,可以将编译器的中间代码LLVMIR进行结构扁平变化,将原本的控制流平台化,随机化,可以达到膨胀代码增加逆向复杂度,对抗IDAPro,控制流平坦随机化后上下文的代码顺序不是最终的执行顺序,增加人类阅读的难度。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1所示是底层编译器中间语言的结构图;图2所示为本专利技术实施例一提供的用于移动代码的结构扁平方法的流程图;图3所示为本专利技术实施例二提供的用于移动代码的结构扁平方法的流程图;图4所示是块拆分示意图;图5所示为构造的新函数的结构图;图6所示为本专利技术实施例三提供的用于移动代码的结构扁平系统的原理图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。实施例一基于底层编译器(LLVM)的Clang编译器,可支持C、C++、Objective-C等语言从源代码到二进制可执行文件的编译。如图1所示,LLVM中间语言(IR)由一个个块(Module)组成,一个Module里面有若干个函数(Function),Function由一系列基本块(BasicBlock)组成,多条指令(Instruction)则构成了一个BasicBlock,一个BasicBlock最后一条指令必须是终止符指令。由图1可见,一个函数是按照基本块的顺序依次执行的。图2所示为本专利技术实施例一提供的用于移动代码的结构扁平方法的流程图;如图2所示,本专利技术实施例提供的用于移动代码的结构扁平方法包括以下步骤:步骤S110:将函数内的所有第一基本块包含的指令进行分割,组成多个第二基本块;以及步骤S120:通过条件指令和跳转指令,将所述多个第二基本块重新排序。在本实施例中,主要是以函数为操作对象,以指令为粒度进行切割,组合成新的基本块,并将新的基本块嵌套在类似Switch语句(在LLVMIR里通过条件指令和跳转指令实现)下面,打乱新的基本块的上下顺序并替换跳转。由此,对中间代码LLVMIR进行结构扁平变化。实施例二图3所示为本专利技术实施例一提供的用于移动代码的结构扁平方法的流程图;如图3所示,本专利技术实施例提供的用于移动代码的结构扁本文档来自技高网
...

【技术保护点】
1.一种用于移动代码的结构扁平方法,其特征在于,包括以下步骤:将函数内的所有第一基本块包含的指令进行分割,组成多个第二基本块;以及通过条件指令和跳转指令,将所述多个第二基本块重新排序。

【技术特征摘要】
1.一种用于移动代码的结构扁平方法,其特征在于,包括以下步骤:将函数内的所有第一基本块包含的指令进行分割,组成多个第二基本块;以及通过条件指令和跳转指令,将所述多个第二基本块重新排序。2.根据权利要求1所述的用于移动代码的结构扁平方法,其特征在于,在将函数内的所有第一基本块包含的指令进行分割,组成多个第二基本块的所述步骤中,根据配置,以固定指令数为组将所述函数内的所有第一基本块的指令进行分割。3.根据权利要求1所述的用于移动代码的结构扁平方法,其特征在于,通过条件指令和跳转指令,将所述多个第二基本块重新排序的所述步骤包括:记录多个第二基本块的跳转执行顺序,为每个所述第二基本块随机分配一个Tag值;构造While-Switch结构,将每个所述第二基本块放到一个随机顺序的Case语句内;设置全局Flag值;通过所述全局Flag值来控制多个Case语句的执行顺序。4.根据权利要求3所述的用于移动代码的结构扁平方法,其特征在于,在记录多个第二基本块的跳转执行顺序,为每个所述第二基本块随机分配一个Tag值的所述步骤之后,还包括:将所述多个第二基本块对应的多个Tag值随机排序。5.根据权利要求3所述的用于移动代码的结构扁平方法,其特征在于,在通过所述全局Flag值来控制多个Case语句的执行...

【专利技术属性】
技术研发人员:胡文君
申请(专利权)人:卓望数码技术深圳有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1