CN111339503B - 控制流混淆方法及相关产品 - Google Patents

控制流混淆方法及相关产品 Download PDF

Info

Publication number
CN111339503B
CN111339503B CN202010117940.4A CN202010117940A CN111339503B CN 111339503 B CN111339503 B CN 111339503B CN 202010117940 A CN202010117940 A CN 202010117940A CN 111339503 B CN111339503 B CN 111339503B
Authority
CN
China
Prior art keywords
code block
sub
compiler
block
instruction
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.)
Active
Application number
CN202010117940.4A
Other languages
English (en)
Other versions
CN111339503A (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.)
Guangdong Oppo Mobile Telecommunications Corp Ltd
Original Assignee
Guangdong Oppo Mobile Telecommunications Corp 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 Guangdong Oppo Mobile Telecommunications Corp Ltd filed Critical Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority to CN202010117940.4A priority Critical patent/CN111339503B/zh
Publication of CN111339503A publication Critical patent/CN111339503A/zh
Application granted granted Critical
Publication of CN111339503B publication Critical patent/CN111339503B/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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明实施例公开了一种控制流混淆方法及相关产品,其中方法应用于电子设备,该电子设备包括编译器,该编译器包括编译器中端和编译器后端,该方法包括:所述编译器中端将中间表示文件发送给所述编译器后端;所述编译器后端提取所述中间表示文件中目标函数的基本块,所述目标函数为所述中间表示文件中的任一函数;所述编译器后端根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块。采用本发明,可提高源码混淆保护的效果。

Description

控制流混淆方法及相关产品
技术领域
本申请涉及计算机安全技术领域,具体涉及一种控制流混淆方法及相关产品。
背景技术
控制流也即代码逻辑,是指程序执行时代码的执行顺序。在各种代码逻辑的作用下,程序会沿着特定的逻辑顺序执行。一般代码逻辑包括有\无条件分支、循环、函数调用等。在正常情况下程序的代码逻辑非常好理解,开发过程中有各种人为的行为使代码逻辑清晰,便于维护和扩展。但同时,对于逆向行为来说,清晰的代码逻辑会导致很容易抓住程序重点,加快破解速度。
为了增加程序破解者对程序的逆向分析难度,降低程序的破解速度或防止对程序进行破解,需要保护程序内部代码逻辑。在现有技术中,在编译器对于源程序进行扫描后生成的中间表示中插入伪控制流。然而,编译器后端可能对该伪控制流进行优化,从而存在删除的可能,导致混淆失败。
发明内容
本发明实施例提供一种控制流混淆方法及相关产品,在编译器后端进行混淆,可提高源码混淆保护的效果。
第一方面,本申请实施例提供一种控制流混淆方法,应用于电子设备,所述电子设备包括编译器,所述编译器包括编译器中端和编译器后端,所述方法包括:
所述编译器中端将中间表示文件发送给所述编译器后端;
所述编译器后端提取所述中间表示文件中目标函数的基本块,所述目标函数为所述中间表示文件中的任一函数;
所述编译器后端根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块。
第二方面,本申请实施例提供一种控制流混淆装置,应用于电子设备,所述电子设备包括编译器,所述编译器包括编译器中端和编译器后端,所述装置包括:
通信单元,用于通过所述编译器中端将中间表示文件发送给所述编译器后端;
处理单元,用于通过所述编译器后端提取所述中间表示文件中目标函数的基本块,所述目标函数为所述中间表示文件中的任一函数;通过所述编译器后端根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块。
第三方面,本申请实施例提供一种电子设备,包括处理器,所述处理器包括编译器,所述编译器包括编译器中端和编译器后端,其中:
所述编译器中端,用于将得到中间表示文件发送给编译器后端;
所述编译器后端,用于提取所述中间表示文件中目标函数的基本块,所述目标函数为所述中间表示文件中的任一函数;以及根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块。
第四方面,本申请实施例提供一种电子设备,包括处理器、通信接口、存储器以及一个或多个程序,其中,上述一个或多个程序被存储在上述存储器中,并且被配置由上述处理器执行,所述程序包括用于如第一方面中所描述的部分或全部步骤的指令。
第五方面,本申请实施例提供了一种计算机可读存储介质,其中,所述计算机可读存储介质存储计算机程序,其中,所述计算机程序使得计算机执行如本申请实施例第一方面中所描述的部分或全部步骤。
第六方面,本申请实施例提供了一种计算机程序产品,其中,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行如本申请实施例第一方面中所描述的部分或全部步骤。该计算机程序产品可以为一个软件安装包。
在本申请实施例中,编译器后端先提取编译器中端得到的中间表示文件中目标函数的基本块,再根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块。如此,直接在编译器后端进行混淆,编译器后端不会对目标代码块进行优化,从而可提高源码混淆保护的效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种电子设备的结构示意图;
图2为本发明实施例提供的一种编译器的结构示意图;
图3为本发明实施例提供的一种控制流混淆方法的流程示意图;
图4为本发明实施例提供的另一种控制流混淆方法的流程示意图;
图5为本发明实施例提供的一种代码块的执行流程示意图;
图6为本发明实施例提供的又一种控制流混淆方法的流程示意图;
图7为本发明实施例提供的另一种电子设备的结构示意图;
图8为本发明实施例提供的一种控制流混淆装置的结构示意图。
具体实施方式
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本申请实施例所涉及到的电子设备可以包括各种具有无线通信功能的手持设备、车载设备、可穿戴设备、计算设备或连接到无线调制解调器的其他处理设备,以及各种形式的用户设备(user equipment,UE),移动台(mobile station,MS),终端设备(terminaldevice)等等。为方便描述,上面提到的设备统称为电子设备。
请参阅图1,图1是本申请实施例提供了一种电子设备100的结构示意图。如图1所示,上述电子设备100包括:壳体110、设置于所述壳体110上的显示器120、设置于所述壳体110内的主板130,主板130上设置有与显示器120连接的处理器140,以及与处理器140连接的存储器150和射频电路160。
在本申请实施例中,显示器120包括显示器驱动电路、显示屏和触控屏。其中,显示器驱动电路用于控制所述显示屏根据画面的显示数据和显示参数(例如,亮度,颜色,饱和度等)进行内容显示。显示屏可以包括液晶显示屏,有机发光二极管显示屏,电子墨水显示屏,等离子显示屏,使用其它显示技术的显示屏中一种或者几种的组合。触控屏用于检测触控操作。该触控屏可以是由透明的触摸传感器电极(例如氧化铟锡(ITO)电极)阵列形成的电容式触摸传感器,或者可以是使用其它触摸技术形成的触摸传感器,例如音波触控,压敏触摸,电阻触摸,光学触摸等,本申请实施例不作限制。
主板130的形状大小可以为所述电子设备100能够容纳的任意大小和形状,在此不做唯一限定。
处理器140是电子设备100的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器150内的软件程序和/或模块,以及调用存储在存储器150内的数据,执行电子设备100的各种功能和处理数据,从而对电子设备100进行整体监控。处理器140包括应用处理器和基带处理器。其中,应用处理器主要处理操作系统、用户界面和应用程序等。基带处理器主要处理无线通信。可以理解,上述基带处理器也可以不集成到处理器中。
在本申请实施例中,处理器140包括编译器141,该编译器141用于利用编译程序从源语言编写的源程序产生目标程序的过程。如图2所示,编译器141包括编译器前端1411、与编译器前端1411的输出接口连接的编译器中端1412,以及与编译器中端1412的输出接口连接的编译器后端1413。
其中,编译器前端1411指编译器中处理高级语言(含预处理、词法、语法、语义分析等)生成抽象语法树(Abstract Syntax Tree,AST)的过程。编译器中端1412指对于源程序进行扫描后生成的内部表示,代表源程序的语义和语法结构,也称中间表示(Intermediaterepresentation,IR)优化,例如,IR生成、循环优化、别名分析、控制流优化以及数据流优化等等。编译器后端1413指对程序进行指令选择、指令调度、寄存器分配、代码生成等特性优化的处理集。编译器后端1413的输入是IR,中间处理过程会生成机器代码(架构相关)。编译器后端1413的输出是汇编代码或二进制代码。
在本申请实施例中,存储器150可用于存储软件程序以及模块,处理器140通过运行存储在存储器150的软件程序以及模块,从而执行电子设备100的各种功能应用以及数据处理。存储器150可主要包括存储程序区和存储数据区。其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等。存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器150可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
射频电路160用于为电子设备100提供与外部设备通信的能力。射频电路160可以包括模拟和数字输入输出接口电路,和基于射频信号和/或光信号的无线通信电路。射频电路160中的无线通信电路可以包括射频收发器电路、功率放大器电路、低噪声放大器、开关、滤波器和天线。举例来说,射频电路160中的无线通信电路可以包括用于通过发射和接收近场耦合电磁信号来支持近场通信(near field communication,NFC)的电路。例如,射频电路160可以包括近场通信天线和近场通信收发器。射频电路160还可以包括蜂窝电话收发器和天线,无线局域网收发器电路和天线等。
在本申请实施例中,电子设备100还可包括电子罗盘、陀螺仪、光传感器、气压计、湿度计、温度计、红外传感器等等传感器(图中未示出)。
以上仅为举例,电子设备100还包括音频输入接口、串行端口、键盘、扬声器、充电接口等输入输出接口,摄像头、蓝牙模块等未示出的模块,本申请不作限定。
在本申请实施例中,所述编译器中端1412用于将得到中间表示文件发送给编译器后端1413;所述编译器后端1413用于提取所述中间表示文件中目标函数的基本块,所述目标函数为所述中间表示文件中的任一函数;以及根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块。
可见,直接在编译器后端进行混淆,编译器后端不会对目标代码块进行优化,从而可提高源码混淆保护的效果。
在一个可能的示例中,所述编译器后端1413具体用于对所述基本块对应的第一代码块进行分块,得到第一子代码块和第二子代码块,所述第一子代码块的输出接口与所述第二子代码块的输入接口连接;根据所述第一子代码块和所述第二子代码块获取所述基本块对应的目标代码块。
在一个可能的示例中,所述编译器后端1413具体用于确定所述基本块对应的第一代码块中的分割点;确定所述分割点的两端指令之间的关联值;在所述关联值小于预设阈值时,根据所述分割点对所述基本块进行分块,得到第一子代码块和第二子代码块;在所述关联值小于或等于所述预设阈值时,执行所述确定所述基本块对应的第一代码块中的分割点的步骤。
在一个可能的示例中,所述编译器后端1413具体用于复制所述第二子代码块,得到第三子代码块;确定所述第二子代码块和所述第三子代码块对应的第一花指令,以及所述第一子代码块对应的第一跳转指令,所述第一跳转指令用于描述所述第一子代码块和所述第二子代码块,以及所述第一子代码块和所述第三子代码块之间的逻辑关系;在所述第二子代码块和所述第三子代码块的头指令之前,添加所述第一花指令,得到第四子代码块,以及在所述第一子代码块的尾指令之后,添加所述第一跳转指令,得到第五子代码块;以及根据所述第四子代码块和所述第五子代码块获取所述基本块对应的目标代码块。
在一个可能的示例中,所述编译器后端1413具体用于根据所述编译器后端的构架,从预设花指令集中选取所述第二子代码块和所述第三子代码块对应的第一花指令;根据所述构架和所述第一花指令,确定所述第一子代码块对应的第一跳转指令。
在一个可能的示例中,所述编译器后端1413具体用于将所述第四子代码块添加在所述第五子代码块之后,得到第二代码块;将所述第二代码块中的直接跳转指令替换为第二跳转指令,得到第三代码块,所述第二跳转指令基于不透明谓词;若存在相邻的所述第二跳转指令,则在相邻的所述第二跳转指令之间,添加第二花指令,得到所述基本块对应的目标代码块。
在一个可能的示例中,所述编译器后端1413还用于统计所述第一代码块中的指令数量;在所述指令数量小于预设阈值时,执行所述根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块的步骤。
下面对本申请实施例进行详细介绍。
请参阅图3,图3是本申请实施例提供的一种控制流混淆方法的流程示意图。如图3所示,本控制流混淆方法应用于电子设备,该电子设备包括编译器,所述编译器包括编译器中端和编译器后端。该方法包括:
S301:编译器中端将中间表示文件发送给编译器后端。
在本申请实施例中,将编译器中端对于源程序进行扫描后生成的内部表示作为中间表示文件。在编译器中端得到中间表示文件之后,将该中间表示文件之后发送给编译器后端。
S302:所述编译器后端提取所述中间表示文件中目标函数的基本块。
在本申请实施例中,目标函数为所述中间表示文件中的任一函数。基本块,是指程序—顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第—个语句,出口就是其中的最后一个语句。对一个基本块来说,执行时只从其入口进入,从其出口退出。需要说明的是,目标函数中的基本块的数量可以是多个。
S303:所述编译器后端根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块。
在本申请实施例中,第一代码块包括基本块对应的代码。目标代码块可以是汇编代码,也可以是二进制代码,在此不做限定。本申请对于获取目标代码块不做限定,可以在目标函数中插入伪控制流对应的代码。
伪控制流具有混淆作用,该伪控制流的执行不会污染寄存器、堆栈平衡、控制寄存器等等运行环境。该伪控制流可包括不透明谓词的跳转指令。其中,不透明谓词是指一个表达式,他的值在执行到某处时,对程序员而言必然是已知的。但是由于某种原因,编译器或者说静态分析器无法推断出这个值,只能在运行时确定,且该值恒定不变。例如,不透明谓词为:(x*x+x)%2==0。
伪控制流也可包括花指令。花指令是指企图隐藏掉不想被逆向破解的代码块(或其它功能)的一种方法,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。花指令有可能利用各种指令:jmp、call、ret的一些堆栈技巧,位置运算等等。优选的是,目标位置是另一条指令的中间,这样在反汇编的时候便会出现混乱。因此,伪控制流还可结合花指令和跳转指令。
在图3所示的方法中,编译器后端先提取编译器中端得到的中间表示文件中目标函数的基本块,再根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块。如此,直接在编译器后端进行混淆,编译器后端不会对目标代码块进行优化,从而可提高源码混淆保护的效果。
与上述图3所示的实施例一致的,请参阅图4,图4是本申请实施例提供的另一种控制流混淆方法的流程示意图。如图4所示,本控制流混淆方法应用于电子设备,该电子设备包括编译器,所述编译器包括编译器中端和编译器后端。该方法包括:
S401:编译器中端将中间表示文件发送给编译器后端。
S402:所述编译器后端提取所述中间表示文件中目标函数的基本块。
在本申请实施例中,目标函数为所述中间表示文件中的任一函数。步骤S401和S402可参照步骤S301和S302的描述,在此不再赘述。
S403:所述编译器后端对所述基本块对应的第一代码块进行分块,得到第一子代码块和第二子代码块。
其中,所述第一子代码块的输出接口与所述第二子代码块的输入接口连接,即先执行第一子代码块对应的指令,再执行第二子代码块对应的指令。本申请对于分块方法不做限定,在一种可选的实施例中,步骤S403包括以下步骤A1-A4,其中:
A1:编译器后端确定基本块对应的第一代码块中的分割点。
其中,第一代码块对应多个指令,分割点可以处于多个指令中任两个相邻指令之间。
A2:所述编译器后端确定所述分割点的两端指令之间的关联值。
A3:所述编译器后端判断所述关联值是否小于预设阈值。
其中,关联值用于描述两端指令之间的相关性。关联值可根据两端指令之间的重复数据进行确定。
在该示例中,若关联值小于预设阈值,执行步骤A4,否则返回执行A1。也就是说,在关联值小于预设阈值时,直接根据该分割点进行分割得到第一子代码块和第二子代码块。否则,重新确定分割点,以使该分割点的两端指令之间的关联值小于预设阈值。可以理解,根据关联值切分基本块,可减少代码的复杂性,便于提高处理效率。
A4:所述编译器后端根据所述分割点对所述第一代码块进行分块,得到第一子代码块和第二子代码块。
需要说明的是,对第一代码块进行分块,还可得到除了第一子代码块和第二子代码块之外的其他子基本块,在此不做限定。其他子基本块可参照本申请提出的混淆方法。
S404:所述编译器后端根据所述第一子代码块和所述第二子代码块获取所述基本块对应的目标代码块。
本申请对于第一子代码块和第二子代码块获取目标代码块的方法不做限定。在一种可选的实施例中,步骤S404包括以下步骤B1-B4,其中:
B1:编译器后端复制所述第二子代码块,得到第三子代码块。
B2:所述编译器后端确定所述第二子代码块和所述第三子代码块对应的第一花指令,以及所述第一子代码块对应的第一跳转指令。
其中,第一跳转指令用于描述所述第一子代码块和所述第二子代码块,以及所述第一子代码块和所述第三子代码块之间的逻辑关系。可见,若在第一子代码块的尾指令之后添加第一跳转指令,则当该跳转指令执行时,执行第二子代码块或第三子代码块。
如前所述,伪控制流可包括花指令和跳转指令。本申请对于如何确定第一花指令和第一跳转指令的方法不做限定。可选的,所述编译器后端根据所述编译器后端的构架,从预设花指令集中选取所述第二子代码块和所述第三子代码块对应的第一花指令;所述编译器后端根据所述构架和所述第一花指令,确定所述第一子代码块对应的第一跳转指令。
其中,编译器后端的构架为电子设备的处理器类型,例如,arm、arm64、x86、x86-64。可以理解,不同的构架,处理逻辑都不一样,对应的指令集及特性都不一样。若根据编译器后端的构架选取第一跳转指令和第一花指令,则可提高混淆的准确性。
预设花指令集可包括常用的花指令,也可包括程序员常用的花指令,还可包括电子设备中使用过的花指令等,在此不做限定。可以理解,预设花指令集可提高选取的多样性,可避免生成固定特征的代码,从而减少被优化的可能性,便于提高混淆强度。
在该可选的实施例中,根据编译器后端的构架,从预设花指令集中选取与第二子代码块和第三子代码块对应的第一花指令,从而可提高选取花指令的多样准确性。然后,再根据编译器后端的构架和第一花指令确定第一子代码块对应的第一跳转指令。如此,重新生成了第一子代码块和第二子代码块,以及第一子代码块和第三子代码块之间的逻辑关系,且花指令不是永不执行的死代码,从而减少了被优化的可能性,可提高混淆强度。
B3:所述编译器后端在所述第二子代码块和所述第三子代码块的头指令之前,添加所述第一花指令,得到第四子代码块,以及在所述第一子代码块的尾指令之后,添加所述第一跳转指令,得到第五子代码块。
其中,第四子代码块的执行顺序为第二子代码块中的第一花指令、第二子代码块、第三子代码块中的第一花指令、第三子代码块。第五子代码块的执行顺序为第一子代码块、第一跳转指令。
B4:所述编译器后端根据所述第四子代码块和所述第五子代码块获取所述基本块对应的目标代码块。
其中,目标代码块可以是第四子代码块和第五子代码块的组合,即目标代码块的执行顺序为第五子代码块、第四子代码块。
在一种可选的示例中,步骤B4可包括以下步骤C1-C3,其中:
C1:编译器后端将所述第四子代码块添加在所述第五子代码块之后,得到第二代码块。
C2:所述编译器后端将所述第二代码块中的直接跳转指令替换为第二跳转指令。
其中,直接跳转指令中不包括分支指令,也就是说固定的执行逻辑。第二跳转指令基于不透明谓词。本申请对于第二跳转指令的确定方法不做限定,可根据编译器后端的构架,以及直接跳转指令之后的指令选取不透明谓词,以提高混淆强度。
C3:若存在相邻的所述第二跳转指令,则所述编译器后端在相邻的所述第二跳转指令之间,添加第二花指令,得到所述基本块对应的目标代码块。
本申请对于第二花指令也不做限定,可根据编译器后端的构架,以及相邻的第二跳转指令,从预设花指令集中选取第二花指令。
在C1-C3中,先将第四子代码块添加在第五子代码块之后得到第二代码块,再将第二代码块中的直接跳转指令替换为基于不透明谓词的第二跳转指令。若存在相邻的所述第二跳转指令,则在将相邻的第二跳转指令之间添加第二花指令,以得到目标代码块。如此,进一步提高混淆强度。
需要说明的是,若第二跳转指令与第一跳转指令相邻,则也可在第二跳转指令和第一跳转指令之间添加花指令。
在步骤B1-B4中,先复制第二子代码块得到第三子代码块,再确定第二子代码块和第三子代码块对应的第一花指令,以及第一子代码块对应的第一跳转指令。然后,分别在第二子代码块和第三子代码块的头指令之前添加第一花指令得到第四子代码块,在第一子代码块的尾指令之后添加第一跳转指令得到第五子代码块。最后,根据所述第四子代码块和所述第五子代码块获取目标代码块。如此,根据第一跳转指令重新生成了第一子代码块和第二子代码块,以及第一子代码块和第三子代码块之间的逻辑关系,且花指令不是永不执行的死代码,从而减少了被优化的可能性,可提高混淆强度。
举例来说,如图5所示,在插入第一花指令和第一跳转指令之前,第一子代码块执行完成,执行第二子代码块。在插入第一花指令和第一跳转指令之后,当第一子代码块中的第一跳转指令为真(true)时,执行第二子代码块,也就是第二子代码块的第一花指令。当第一跳转指令为假(false)时,执行第三子代码块,也就是第三子代码块的第一花指令。如此,没有改变原始程序的执行逻辑,且花指令也是可执行的,提高了混淆强度。需要说明的是,虚线对应的逻辑不会执行。
在图4所示的方法中,通过编译器后端对基本块对应的第一代码块进行分块得到第一子代码块和第二子代码块,再根据第一子代码块和第二子代码块获取基本块对应的目标代码块。如此,直接在编译器后端进行混淆,编译器后端不会对目标代码块进行优化。且分别以第一子代码块和第二子代码块获取目标代码块,可提高混淆的准确性,便于进一步提高源码混淆保护的效果。
与上述图3所示的实施例一致的,请参阅图6,图6是本申请实施例提供的又一种控制流混淆方法的流程示意图。如图6所示,本控制流混淆方法应用于电子设备,该电子设备包括编译器,所述编译器包括编译器中端和编译器后端。该方法包括:
S601:编译器中端将中间表示文件发送给编译器后端。
S602:所述编译器后端提取所述中间表示文件中目标函数的基本块。
在本申请实施例中,目标函数为所述中间表示文件中的任一函数。
S603:所述编译器后端统计所述基本块对应的第一代码块中的指令数量。
S604:在所述指令数量小于预设阈值时,所述编译器后端根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块。
本申请对于预设阈值不做限定,例如,20。预设阈值可以为编译参数,由程序员设置,以提高混淆控制的灵活性。在指令数量小于预设阈值时,对该基本块执行跳转隐藏操作,否则,不对该基本块操作。
在图6所示的方法中,仅对指令数量小于预设阈值的第一代码块执行跳转隐藏操作,可控制执行程序的混淆程度,便于进一步提高混淆效果。
与上述图3、图4和图6所示的实施例一致的,请参阅图7,图7是本申请实施例提供的又一种电子设备100的结构示意图。如图7所示,该电子设备100包括处理器140、通信接口161和存储器150。处理器140通过总线180连接通信接口161和存储器150。其中,处理器140包括编译器141,编译器141包括编译器中端1412和编译器后端1413。存储器150包括一个或多个程序151,上述程序151被配置由上述处理器140执行,上述程序151包括用于执行以下步骤的指令:
所述编译器中端1412将中间表示文件发送给所述编译器后端;
所述编译器后端1413提取所述中间表示文件中目标函数的基本块,所述目标函数为所述中间表示文件中的任一函数;
所述编译器后端1413根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块。
可以看出,直接在编译器后端进行混淆,编译器后端不会对目标代码块进行优化,从而可提高源码混淆保护的效果。
在一个可能的示例中,所述程序151中的指令具体用于执行以下操作:
所述编译器后端1413对所述基本块对应的第一代码块进行分块,得到第一子代码块和第二子代码块,所述第一子代码块的输出接口与所述第二子代码块的输入接口连接;
所述编译器后端1413根据所述第一子代码块和所述第二子代码块获取所述基本块对应的目标代码块。
在一个可能的示例中,所述程序151中的指令具体用于执行以下操作:
所述编译器后端1413确定所述基本块对应的第一代码块中的分割点;
所述编译器后端1413确定所述分割点的两端指令之间的关联值;
在所述关联值小于预设阈值时,所述编译器后端1413根据所述分割点对所述基本块进行分块,得到第一子代码块和第二子代码块;
在所述关联值小于或等于所述预设阈值时,所述编译器后端1413执行所述确定所述基本块对应的第一代码块中的分割点的步骤。
在一个可能的示例中,所述程序151中的指令具体用于执行以下操作:
所述编译器后端1413复制所述第二子代码块,得到第三子代码块;
所述编译器后端1413确定所述第二子代码块和所述第三子代码块对应的第一花指令,以及所述第一子代码块对应的第一跳转指令,所述第一跳转指令用于描述所述第一子代码块和所述第二子代码块,以及所述第一子代码块和所述第三子代码块之间的逻辑关系;
所述编译器后端1413在所述第二子代码块和所述第三子代码块的头指令之前,添加所述第一花指令,得到第四子代码块,以及在所述第一子代码块的尾指令之后,添加所述第一跳转指令,得到第五子代码块;
所述编译器后端1413根据所述第四子代码块和所述第五子代码块获取所述基本块对应的目标代码块。
在一个可能的示例中,所述程序151中的指令具体用于执行以下操作:
所述编译器后端1413根据所述编译器后端的构架,从预设花指令集中选取所述第二子代码块和所述第三子代码块对应的第一花指令;
所述编译器后端1413根据所述构架和所述第一花指令,确定所述第一子代码块对应的第一跳转指令。
在一个可能的示例中,所述程序151中的指令具体用于执行以下操作:
所述编译器后端1413将所述第四子代码块添加在所述第五子代码块之后,得到第二代码块;
所述编译器后端1413将所述第二代码块中的直接跳转指令替换为第二跳转指令,所述第二跳转指令基于不透明谓词;
若存在相邻的所述第二跳转指令,则所述编译器后端1413在相邻的所述第二跳转指令之间,添加第二花指令,得到所述基本块对应的目标代码块。
在一个可能的示例中,所述程序151中的指令还用于执行以下操作:
所述编译器后端1413统计所述第一代码块中的指令数量;
在所述指令数量小于预设阈值时,所述编译器后端1413执行所述根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块的步骤。
上述主要从方法侧执行过程的角度对本申请实施例的方案进行了介绍。可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所提供的实施例描述的各示例的模块及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对电子设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
请参照图8,图8所示的控制流混淆装置应用于电子设备,该电子设备包括编译器,该编译器包括编译器中端和编译器后端。如图8所示,该控制流混淆装置800包括:
采集单元801,用于通过所述编译器中端将得到的中间表示文件发送给所述编译器后端;
处理单元802,用于通过所述编译器后端提取所述中间表示文件中目标函数的基本块,所述目标函数为所述中间表示文件中的任一函数;通过所述编译器后端根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块。
可以看出,直接在编译器后端进行混淆,编译器后端不会对目标代码块进行优化,从而可提高源码混淆保护的效果。
在一个可能的示例中,所述处理单元802具体用于通过所述编译器后端对所述基本块对应的第一代码块进行分块,得到第一子代码块和第二子代码块,所述第一子代码块的输出接口与所述第二子代码块的输入接口连接;以及根据所述第一子代码块和所述第二子代码块获取所述基本块对应的目标代码块。
在一个可能的示例中,所述处理单元802具体用于通过所述编译器后端确定所述基本块对应的第一代码块中的分割点;通过所述编译器后端确定所述分割点的两端指令之间的关联值;在所述关联值小于预设阈值时,通过所述编译器后端根据所述分割点对所述基本块进行分块,得到第一子代码块和第二子代码块;在所述关联值小于或等于所述预设阈值时,通过所述编译器后端执行所述确定所述基本块对应的第一代码块中的分割点的步骤。
在一个可能的示例中,所述处理单元802具体用于通过所述编译器后端复制所述第二子代码块,得到第三子代码块;通过所述编译器后端确定所述第二子代码块和所述第三子代码块对应的第一花指令,以及所述第一子代码块对应的第一跳转指令,所述第一跳转指令用于描述所述第一子代码块和所述第二子代码块,以及所述第一子代码块和所述第三子代码块之间的逻辑关系;通过所述编译器后端在所述第二子代码块和所述第三子代码块的头指令之前,添加所述第一花指令,得到第四子代码块,以及在所述第一子代码块的尾指令之后,添加所述第一跳转指令,得到第五子代码块;通过所述编译器后端根据所述第四子代码块和所述第五子代码块获取所述基本块对应的目标代码块。
在一个可能的示例中,所述处理单元802具体用于通过所述编译器后端根据所述编译器后端的构架,确定所述第二子代码块和所述第三子代码块对应的第一花指令,以及所述第一子代码块对应的第一跳转指令,所述第一跳转指令用于描述所述第一子代码块和所述第二子代码块,以及所述第一子代码块和所述第三子代码块之间的逻辑关系;通过所述编译器后端在所述第二子代码块和所述第三子代码块的头指令之前,添加所述第一花指令,得到第四子代码块,以及在所述第一子代码块的尾指令之后,添加所述第一跳转指令,得到第五子代码块;通过所述编译器后端根据所述第四子代码块和所述第五子代码块获取所述基本块对应的目标代码块。
在一个可能的示例中,所述处理单元802具体用于通过所述编译器后端根据所述编译器后端的构架,从预设花指令集中选取所述第二子代码块和所述第三子代码块对应的第一花指令;通过所述编译器后端根据所述构架和所述第一花指令,确定所述第一子代码块对应的第一跳转指令。
在一个可能的示例中,所述处理单元802具体用于通过所述编译器后端将所述第四子代码块添加在所述第五子代码块之后,得到第二代码块;通过所述编译器后端将所述第二代码块中的直接跳转指令替换为第二跳转指令,所述第二跳转指令基于不透明谓词;若存在相邻的所述第二跳转指令,则通过所述编译器后端在相邻的所述第二跳转指令之间,添加第二花指令,得到所述基本块对应的目标代码块。
在一个可能的示例中,所述处理单元802还用于通过所述编译器后端统计所述第一代码块中的指令数量;在所述指令数量小于预设阈值时,通过所述编译器后端执行所述根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块的步骤。
本申请实施例还提供一种计算机存储介质,其中,该计算机存储介质存储用于存储计算机程序,该计算机程序使得计算机执行如方法实施例中记载的任一方法的部分或全部步骤,计算机包括电子设备。
本申请实施例还提供一种计算机程序产品,计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,计算机程序可操作来使计算机执行如方法实施例中记载的任一方法的部分或全部步骤。该计算机程序产品可以为一个软件安装包,计算机包括电子设备。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模式并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模式的形式实现。
集成的单元如果以软件程序模式的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(read-only memory,ROM)、随机存取存储器(randomaccess memory,RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、ROM、RAM、磁盘或光盘等。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。

Claims (7)

1.一种控制流混淆方法,其特征在于,应用于电子设备,所述电子设备包括编译器,所述编译器包括编译器中端和编译器后端,所述方法包括:
所述编译器中端将中间表示文件发送给所述编译器后端;
所述编译器后端提取所述中间表示文件中目标函数的基本块,所述目标函数为所述中间表示文件中的任一函数;
所述编译器后端根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块,包括:所述编译器后端对所述基本块对应的第一代码块进行分块,得到第一子代码块和第二子代码块,所述第一子代码块的输出接口与所述第二子代码块的输入接口连接;所述编译器后端复制所述第二子代码块,得到第三子代码块;所述编译器后端根据所述编译器后端的构架,从预设花指令集中选取所述第二子代码块和所述第三子代码块对应的第一花指令,所述编译器后端根据所述构架和所述第一花指令,确定所述第一子代码块对应的第一跳转指令,所述第一跳转指令用于描述所述第一子代码块和所述第二子代码块,以及所述第一子代码块和所述第三子代码块之间的逻辑关系;所述编译器后端在所述第二子代码块和所述第三子代码块的头指令之前,添加所述第一花指令,得到第四子代码块,以及在所述第一子代码块的尾指令之后,添加所述第一跳转指令,得到第五子代码块;所述编译器后端根据所述第四子代码块和所述第五子代码块获取所述基本块对应的目标代码块。
2.根据权利要求1所述的方法,其特征在于,所述对所述基本块对应的第一代码块进行分块,得到第一子代码块和第二子代码块,包括:
所述编译器后端确定所述基本块对应的第一代码块中的分割点;
所述编译器后端确定所述分割点的两端指令之间的关联值;
在所述关联值小于预设阈值时,所述编译器后端根据所述分割点对所述第一代码块进行分块,得到第一子代码块和第二子代码块;
在所述关联值大于或等于所述预设阈值时,所述编译器后端执行所述确定所述基本块对应的第一代码块中的分割点的步骤。
3.根据权利要求1所述的方法,其特征在于,所述根据所述第四子代码块和所述第五子代码块获取所述基本块对应的目标代码块,包括:
所述编译器后端将所述第四子代码块添加在所述第五子代码块之后,得到第二代码块;
所述编译器后端将所述第二代码块中的直接跳转指令替换为第二跳转指令,得到第三代码块,所述第二跳转指令基于不透明谓词;
若存在相邻的所述第二跳转指令,则所述编译器后端在相邻的所述第二跳转指令之间,添加第二花指令,得到所述基本块对应的目标代码块。
4.根据权利要求1-3任一项所述的方法,其特征在于,在所述根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块之前,所述方法还包括:
所述编译器后端统计所述第一代码块中的指令数量;
在所述指令数量小于预设阈值时,所述编译器后端执行所述根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块的步骤。
5.一种控制流混淆装置,其特征在于,应用于电子设备,所述电子设备包括编译器,所述编译器包括编译器中端和编译器后端,所述装置包括:
通信单元,用于通过所述编译器中端将中间表示文件发送给所述编译器后端;
处理单元,用于通过所述编译器后端提取所述中间表示文件中目标函数的基本块,所述目标函数为所述中间表示文件中的任一函数;通过所述编译器后端根据所述基本块对应的第一代码块获取所述基本块对应的目标代码块,包括:通过所述编译器后端对所述基本块对应的第一代码块进行分块,得到第一子代码块和第二子代码块,所述第一子代码块的输出接口与所述第二子代码块的输入接口连接;通过所述编译器后端复制所述第二子代码块,得到第三子代码块;通过所述编译器后端根据所述编译器后端的构架,从预设花指令集中选取所述第二子代码块和所述第三子代码块对应的第一花指令,以及根据所述构架和所述第一花指令,确定所述第一子代码块对应的第一跳转指令,所述第一跳转指令用于描述所述第一子代码块和所述第二子代码块,以及所述第一子代码块和所述第三子代码块之间的逻辑关系;通过所述编译器后端在所述第二子代码块和所述第三子代码块的头指令之前,添加所述第一花指令,得到第四子代码块,以及在所述第一子代码块的尾指令之后,添加所述第一跳转指令,得到第五子代码块;通过所述编译器后端根据所述第四子代码块和所述第五子代码块获取所述基本块对应的目标代码块。
6.一种电子设备,其特征在于,包括处理器、通信接口、存储器,所述存储器用于存储一个或多个程序,并且被配置由所述处理器执行,所述程序包括用于执行如权利要求1-4任一项所述的方法中的步骤的指令。
7.一种计算机可读存储介质,其特征在于,其用于存储计算机程序,其中,所述计算机程序使得计算机执行如权利要求1-4任一项所述的方法。
CN202010117940.4A 2020-02-25 2020-02-25 控制流混淆方法及相关产品 Active CN111339503B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010117940.4A CN111339503B (zh) 2020-02-25 2020-02-25 控制流混淆方法及相关产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010117940.4A CN111339503B (zh) 2020-02-25 2020-02-25 控制流混淆方法及相关产品

Publications (2)

Publication Number Publication Date
CN111339503A CN111339503A (zh) 2020-06-26
CN111339503B true CN111339503B (zh) 2023-01-03

Family

ID=71185644

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010117940.4A Active CN111339503B (zh) 2020-02-25 2020-02-25 控制流混淆方法及相关产品

Country Status (1)

Country Link
CN (1) CN111339503B (zh)

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2159732A1 (en) * 2008-08-21 2010-03-03 Thomson Licensing Method and device for code obfuscation
KR101048588B1 (ko) * 2009-04-13 2011-07-12 한양대학교 산학협력단 코드 제어 흐름 모호화 장치 및 방법
US9116712B2 (en) * 2013-02-28 2015-08-25 Microsoft Technology Licensing, Llc Compile based obfuscation
CN106960140A (zh) * 2016-01-08 2017-07-18 阿里巴巴集团控股有限公司 虚拟机指令的混淆方法及装置、虚拟机保护系统
CN106682460B (zh) * 2016-11-25 2019-05-31 西北大学 一种基于两次变换的代码混淆方法
KR101837337B1 (ko) * 2017-02-14 2018-04-19 한양대학교 에리카산학협력단 네이티브코드에서 기본 블록들 간의 모든 상대주소 점프를 간접 점프로 변환하여 분석도구의 cfg 생성을 방해하는 방법 및 장치
CN107506623B (zh) * 2017-08-15 2021-07-23 北京奇虎科技有限公司 应用程序的加固方法及装置、计算设备、计算机存储介质
CN108537012B (zh) * 2018-02-12 2021-11-16 北京梆梆安全科技有限公司 基于变量和代码执行顺序的源代码混淆方法及装置
CN109784010A (zh) * 2018-12-18 2019-05-21 武汉极意网络科技有限公司 一种基于llvm的程序控制流混淆方法及装置
CN109885991A (zh) * 2018-12-25 2019-06-14 深圳供电局有限公司 一种基于移动应用数据流体的加密方法、电子设备和介质
CN110119600A (zh) * 2019-03-28 2019-08-13 江苏通付盾信息安全技术有限公司 基于应用程序安装包的程序加固方法及装置
CN110210190A (zh) * 2019-05-30 2019-09-06 中国科学院信息工程研究所 一种基于二次汇编的代码混淆方法

Also Published As

Publication number Publication date
CN111339503A (zh) 2020-06-26

Similar Documents

Publication Publication Date Title
CN106502703B (zh) 一种函数调用方法和装置
US8893084B2 (en) Methods and apparatuses for deferred object customization
CN106295353B (zh) 一种引擎漏洞检测的方法以及检测装置
US20190236750A1 (en) Optimizing compilation of shaders
CN104731509A (zh) 基于触摸操作的搜索方法、装置和终端
CN106681749B (zh) 基于安卓平台的局部代码补丁更新方法及装置
US11063828B2 (en) Detecting software misconfiguration at a remote machine
CN112116690B (zh) 视频特效生成方法、装置及终端
CN112989346B (zh) 对抗样本生成方法、装置、终端设备以及存储介质
CN110059456A (zh) 代码保护方法、代码保护装置、存储介质与电子设备
WO2023213263A1 (zh) 程序编译和启动方法、设备及存储介质
CN112579048A (zh) 小程序集成方法、装置、电子设备及存储介质
CN114443051A (zh) 应用程序编译和运行方法及装置、存储介质
CN111339503B (zh) 控制流混淆方法及相关产品
US20180129490A1 (en) Object ordering preservation during lto link stage
CN111385661B (zh) 语音控制全屏播放的方法、装置、终端及存储介质
CN111767058A (zh) 程序编译方法及装置、电子设备和存储介质
CN110879709A (zh) 无用代码的检测方法、装置、终端设备及存储介质
CN109145598B (zh) 脚本文件的病毒检测方法、装置、终端及存储介质
CN105809027B (zh) 应用程序的权限控制方法及装置
KR102188685B1 (ko) 애플리케이션 패키지를 생성하는 장치 및 방법
CN111736839A (zh) 一种编译链接方法及装置
CN112069015B (zh) 指令模拟器指令执行方法、装置、终端设备以及存储介质
CN112100018B (zh) 一种日志信息生成的方法及相关装置
CN106445662B (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
GR01 Patent grant
GR01 Patent grant