CN109784010A - 一种基于llvm的程序控制流混淆方法及装置 - Google Patents

一种基于llvm的程序控制流混淆方法及装置 Download PDF

Info

Publication number
CN109784010A
CN109784010A CN201811550460.6A CN201811550460A CN109784010A CN 109784010 A CN109784010 A CN 109784010A CN 201811550460 A CN201811550460 A CN 201811550460A CN 109784010 A CN109784010 A CN 109784010A
Authority
CN
China
Prior art keywords
basic block
processing
basic
carry out
blocks
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
Application number
CN201811550460.6A
Other languages
English (en)
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.)
Wuhan Summit Network Technology Co Ltd
Original Assignee
Wuhan Summit Network 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 Wuhan Summit Network Technology Co Ltd filed Critical Wuhan Summit Network Technology Co Ltd
Priority to CN201811550460.6A priority Critical patent/CN109784010A/zh
Publication of CN109784010A publication Critical patent/CN109784010A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本发明实施例提供一种基于LLVM的程序控制流混淆方法及装置。其中,方法包括:提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合;若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理;将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。本发明实施例提供的方法及装置,通过在编译期改变LLVM中间代码文件,从而复杂化控制流,不利于逆向分析,提高了程序的安全性,并支持针对所有可以原生调用C语言库的语言。

Description

一种基于LLVM的程序控制流混淆方法及装置
技术领域
本发明实施例涉及计算机安全技术领域,尤其涉及一种基于LLVM的程序控制流混淆方法及装置。
背景技术
控制流也即代码逻辑,是指程序执行时代码的执行顺序。在各种代码逻辑的作用下,程序会沿着特定的逻辑顺序执行。一般代码逻辑包括有\无条件分支、循环、函数调用等。在正常情况下程序的代码逻辑非常好理解,开发过程中有各种人为的行为使代码逻辑清晰,便于维护和扩展。但同时,对于逆向行为来说,清晰的代码逻辑会导致很容易抓住程序重点,加快破解速度。
为了增加程序破解者对程序的逆向分析难度,降低程序的破解速度或防止对程序进行破解,需要保护程序内部代码逻辑,而现有技术中,大部分解决方法都针对于java语言,而对于C语言库的语言,目前还没有有效的解决方法。
发明内容
针对现有技术中存在的技术问题,本发明实施例提供一种基于LLVM的程序控制流混淆方法及装置。
第一方面,本发明实施例提供一种基于LLVM的程序控制流混淆方法,包括:
提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合;
若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理;
将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。
第二方面,本发明实施例提供一种基于LLVM的程序控制流混淆装置,包括:
提取模块,用于提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合;
复杂化处理模块,用于若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理;
编译模块,用于将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所提供的方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。
本发明实施例提供的一种基于LLVM的程序控制流混淆方法及装置,通过在编译期改变LLVM中间代码文件,从而复杂化控制流,不利于逆向分析,提高了程序的安全性,并支持针对所有可以原生调用C语言库的语言,包括但不仅限C、C++、C#、Objective-C、Swift、Rust和Kotlin等开发语言。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种基于LLVM的程序控制流混淆方法流程图;
图2为本发明实施例提供的一种基于LLVM的程序控制流混淆装置的结构示意图;
图3为本发明实施例提供的一种电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种基于LLVM的程序控制流混淆方法流程图,如图1所示,该方法包括:
步骤101,提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合。
具体地,LLVM是构架编译器的框架装置,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间、链接时间、运行时间以及空闲时间,对开发者保持开放,并兼容已有脚本。
首先,通过LLVM将源代码编译为中间代码文件。
然后,解析中间代码文件,并遍历中间代码文件中的函数,对于每次遍历到的函数,将其称为目标函数。提取目标函数中的基本块,并将提取到的基本块写入到一个集合中,将该集合称为基本块集合。需要说明的是,对于一个函数来说,通常由多条语句构成,通过分割操作将这多条语句分割成若干个基本块,而每个基本块里仍有若干条语句。
步骤102,若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理。
具体地,预设阈值通常取为0,此时,计数值可以理解为对目标函数执行步骤102的次数。即,若计数值大于0,则遍历基本块集合中的每一基本块,对于每次遍历到的基本块,判定是否对其进行复杂化处理,若判断需对其进行复杂化处理,则对其进行复杂化处理。
步骤103,将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。
具体地,对基本块集合执行完步骤102后,将基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件,从而完成对程序的控制流混淆。
本发明实施例提供的方法,通过在编译期改变LLVM中间代码文件,从而复杂化控制流,不利于逆向分析,提高了程序的安全性,并支持针对所有可以原生调用C语言库的语言,包括但不仅限C、C++、C#、Objective-C、Swift、Rust和Kotlin等开发语言。
在上述各实施例的基础上,提取LLVM编译生成的中间代码文件中目标函数中的基本块,之前还包括:
基于LLVM,将源代码文件编译为中间代码文件;
遍历所述中间代码文件中的每一函数,将每次遍历到的函数作为目标函数。
具体地,中间代码文件通常包含多个函数,通过对其进行解析,可以遍历其包含的每个函数,将每次遍历到的函数称为目标函数。通过对目标函数中的基本块的遍历、复杂化判定操作和复杂化操作等,完成对程序控制流的混淆,从而保证程序的安全性。
在上述各实施例的基础上,本发明实施例对上述实施例中是否需进行复杂化处理的判定过程进行说明。即,判定所述基本块是否需进行复杂化处理,包括:
若第一判断条件的输出结果为逻辑真,则判定所述基本块需进行复杂化处理;
否则,判定所述基本块无需进行复杂化处理。
具体地,第一判定条件可以如下:
生成随机数,并将该随机数作为预设的随机函数的参数,并获取该随机函数的函数值,将该随机数与该函数值进行大小比较,若前者大于后者,则第一判定条件输出逻辑真,否则,输出逻辑假。
需要说明的是,随机函数只要确保能够得到一个随机性的判定结果即可,例如,将随机函数定义为:RandomFunc(arg),其参数为arg(0<arg<1),对于该随机函数,每输入一个arg,该随机函数能够随机输出一个0~1间的浮点数,将输入的arg与输出的浮点数进行大小比较,若前者大于后者,则第一判定条件输出逻辑真,否则,输出逻辑假。
需要说明的是,第一判定条件可根据具体条件进行设定,本发明实施例对其不作具体限定。
本发明实施例提供的方法,通过使用随机数和随机函数作为第一判断条件输出结果的依据,使复杂化操作存在随机性,增加了逆向分析的难度。
在上述各实施例的基础上,本发明实施例对基本块的复杂化处理进行说明。即,对所述基本块进行复杂化处理,包括:
将所述基本块basicBlock中的所有指令进行复制,生成orignalBasicBlock,并将所述orignalBasicBlock中的最后一条语句作为orignalBasicBlockEndPart。
具体地,对于基本块basicBlock,将其分割为两部分,一部分只包含phi节点和调试信息等,另一部分只包括指令,并将只包括指令的部分进行复制,得到orignalBasicBlock。需要说明的是,对基本块basicBlock的分割操作,是考虑到在包含指令的基本块中增加花指令和后面的拼接操作需求。并且,将orignalBasicBlock中的最后一条语句作为orignalBasicBlockEndPart。
对所述orignalBasicBlock添加花指令,生成alteredBasicBlock。
对于orignalBasicBlock,增加花指令,获得alteredBasicBlock,其中,增加花指令的做法是:对二目运算操作符增加花指令,其中,需要根据整型指令、浮点型指令做不同的处理。为了增加分析难度,添加花指令通过随机算法规则来添加。这一算法规则可以是一种预设置好的,通过对某一随机函数进行模式匹配,在不同情况下,以不同的方式添加花指令。最后还需要从修改的基本块中剔除操作过程中产生的不利于代码保护的调用指令。
将所述orignalBasicBlock拼接至所述基本块basicBlock的末尾,并将所述orignalBasicBlockEndPart或所述alteredBasicBlock拼接至所述orignalBasicBlock的末尾。
在上述各实施例的基础上,本发明实施例对拼接过程进行具体说明。即,将所述orignalBasicBlockEndPart或所述alteredBasicBlock拼接至所述orignalBasicBlock的末尾,包括:
若第二判断条件的输出结果为逻辑真,则将所述orignalBasicBlockEndPart拼接至所述orignalBasicBlock的末尾;
否则,将所述alteredBasicBlock拼接至所述orignalBasicBlock的末尾。
需要说明的是,第二判断条件实际与第一判断条件类似,是一个随机函数,但不同的是返回的结果永远是一个逻辑真,此处不再赘述。
本发明实施例提供的方法,使用随机性的条件判断,来拼接基本块之间的跳转流程,以规避模式识别。这一规则可以是通过组合某一随机函数和模式匹配共同达成,这种随机行为,可以规避分析者对复杂化后的模式匹配进行识别。模式匹配越复杂、不透明谓词随机性越强,效果越好。
在上述各实施例的基础上,遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理,之后还包括:
更新所述计数值。
例如,将计数值减1,将减1之后得到的值作为更新后的计数值。
若更新后的所述计数值大于所述预设阈值,则重复执行遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理的步骤,直至所述更新后的所述计数值不大于所述预设阈值。
本发明实施例提供的方法,通过的循环设计,一方面是为了增强混淆的复杂度,另一方面增强了个性化选项。
在上述各实施例的基础上,将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件,之前还包括:
将所述第二判断条件替换为不透明谓词。
具体地,不透明谓词可以是包含多随机因子的永真代码,即,一种用代码实现的永真命题,而没有直接表达出逻辑真,目的是为了增加静态分析难度。不透明谓词是一种比较新的代码混淆方法,它能够通过改变程序的控制流来混淆代码,但又保持程序的运行结果不变,同时增加对程序的逆向分析难度,目前利用不透明谓词混淆代码,使用的是一些在理论上为真的数学表达式来作为不透明谓词插入到源代码中。
图2为本发明实施例提供的一种基于LLVM的程序控制流混淆装置的结构示意图,如图2所示,该装置包括:
提取模块201,用于提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合;
复杂化处理模块202,用于若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理;
编译模块203,用于将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。
本发明实施例提供的装置,具体执行上述各方法实施例流程,具体请详见上述各方法实施例的内容,此处不再赘述。本发明实施例提供的装置,通过在编译期改变LLVM中间代码文件,从而复杂化控制流,不利于逆向分析,提高了程序的安全性,并支持针对所有可以原生调用C语言库的语言,包括但不仅限C、C++、C#、Objective-C、Swift、Rust和Kotlin等开发语言。
作为一个可选实施例,本发明实施例对该混淆方法及装置进行进一步说明:
步骤1、在混淆装置中设置两个参数:一个用于控制预设的随机函数的参数ObfProb,一个用于控制混淆装置在中间代码文件中的某一个函数上循环执行的次数NumOfObfTimes;
步骤2、利用不同语言的前端编译器将源代码文件编译为中间代码文件;
步骤3、解析中间代码文件,遍历中间代码文件中的函数,提取基本块,并写入到一个集合中;
步骤4、遍历步骤3中获得的集合,这里使用一个Condition1来决定是否进行复杂化处理,即,给每一个遍历出的基本块用参数ObfProb执行预设的随机函数,用来决定本次遍历到的基本块是否需要进行步骤5的复杂化处理,否则跳过到下一个基本块,并对下一个基本块执行步骤4;
步骤5、将步骤3中提取出基本块basicBlock分割为两部分,一部分只包含phi节点和调试信息等,另一部复制了原基本块所有指令的orignalBasicBlock,并对orignalBasicBlock进行步骤6;
步骤6、针对步骤5中生成的orignalBasicBlock,增加花指令,获得alteredBasicBlock,再进行步骤7;其中,增加花指令的实现细节可以根据实际需要做调整;
步骤7、通过条件判断Condition2和分支指令BranchInst对步骤5中的basicBlock、orignalBasicBlock及步骤6中的alteredBasicBlock的基本块的控制流进行拼接,其中逻辑永真条件判断Condition2的增加是为了在组装过程中通过增加的控制流的随机性行为,以避免逆向分析的模式识别,在步骤9中将被不透明谓词替换;特别的,orignalBasicBlock在分割出最后一句语句,保存为基本块orignalBasicBlockEndPart。
步骤8、完成步骤4中的处理循环后,NumOfObfTimes数值减1后如果大于0,并循环执行步骤4~8;
步骤9、将中间文件中条件判断永真的语句替换成有随机性的不透明谓词;
步骤10、将以上处理后的中间代码文件编译为目标二进制文件,完成编译。
综上,本发明实施例的有益效果在于:
首先选择LLVM中间表达来改变控制流是可以支持多语言前端,包括但不仅限C/C++/C#/Objective-C/Swift/Rust/Kotlin等开发语言;通过改变LLVM的中间代码文件,使程序的原始控制流复杂化,不利于逆向分析;在处理过程中,在循环执行过程中,尽可能增加更多的随机性,包括但不限于对原始增加混淆控制流、多次执行代码块、在代码中加入不透明谓词;增加随机函数,使对每个代码块的处理有随机性,该随机函数的可以根据不同场景做不同设计。
图3为本发明实施例提供的一种电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器(processor)301、通信接口(Communications Interface)302、存储器(memory)303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信。处理器301可以调用存储在存储器303上并可在处理器301上运行的计算机程序,以执行上述各实施例提供的方法,例如包括:提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合;若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理;将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。
此外,上述的存储器303中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的传输方法,例如包括:提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合;若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理;将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种基于LLVM的程序控制流混淆方法,其特征在于,包括:
提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合;
若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理;
将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。
2.根据权利要求1所述的方法,其特征在于,提取LLVM编译生成的中间代码文件中目标函数中的基本块,之前还包括:
基于LLVM,将源代码文件编译为中间代码文件;
遍历所述中间代码文件中的每一函数,将每次遍历到的函数作为目标函数。
3.根据权利要求1所述的方法,其特征在于,判定所述基本块是否需进行复杂化处理,包括:
若第一判断条件的输出结果为逻辑真,则判定所述基本块需进行复杂化处理;
否则,判定所述基本块无需进行复杂化处理。
4.根据权利要求1所述的方法,其特征在于,对所述基本块进行复杂化处理,包括:
将所述基本块basicBlock中的所有指令进行复制,生成orignalBasicBlock,并将所述orignalBasicBlock中的最后一条语句作为orignalBasicBlockEndPart;
对所述orignalBasicBlock添加花指令,生成alteredBasicBlock;
将所述orignalBasicBlock拼接至所述基本块basicBlock的末尾,并将所述orignalBasicBlockEndPart或所述alteredBasicBlock拼接至所述orignalBasicBlock的末尾。
5.根据权利要求4所述的方法,其特征在于,将所述orignalBasicBlockEndPart或所述alteredBasicBlock拼接至所述orignalBasicBlock的末尾,包括:
若第二判断条件的输出结果为逻辑真,则将所述orignalBasicBlockEndPart拼接至所述orignalBasicBlock的末尾;
否则,将所述alteredBasicBlock拼接至所述orignalBasicBlock的末尾。
6.根据权利要求1所述的方法,其特征在于,遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理,之后还包括:
更新所述计数值;
若更新后的所述计数值大于所述预设阈值,则重复执行遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理的步骤,直至所述更新后的所述计数值不大于所述预设阈值。
7.根据权利要求5所述的方法,其特征在于,将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件,之前还包括:
将所述第二判断条件替换为不透明谓词。
8.一种基于LLVM的程序控制流混淆装置,其特征在于,包括:
提取模块,用于提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合;
复杂化处理模块,用于若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理;
编译模块,用于将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项所述方法的步骤。
CN201811550460.6A 2018-12-18 2018-12-18 一种基于llvm的程序控制流混淆方法及装置 Pending CN109784010A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811550460.6A CN109784010A (zh) 2018-12-18 2018-12-18 一种基于llvm的程序控制流混淆方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811550460.6A CN109784010A (zh) 2018-12-18 2018-12-18 一种基于llvm的程序控制流混淆方法及装置

Publications (1)

Publication Number Publication Date
CN109784010A true CN109784010A (zh) 2019-05-21

Family

ID=66497244

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811550460.6A Pending CN109784010A (zh) 2018-12-18 2018-12-18 一种基于llvm的程序控制流混淆方法及装置

Country Status (1)

Country Link
CN (1) CN109784010A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110348206A (zh) * 2019-07-11 2019-10-18 网易(杭州)网络有限公司 应用于安卓安装包apk的保护方法、介质、装置和计算设备
CN111339503A (zh) * 2020-02-25 2020-06-26 Oppo广东移动通信有限公司 控制流混淆方法及相关产品
CN111723345A (zh) * 2020-05-09 2020-09-29 中国人民解放军战略支援部队信息工程大学 基于回调函数的控制流混淆方法及系统
CN111984939A (zh) * 2019-05-22 2020-11-24 北京奇虎科技有限公司 字符串混淆方法、装置、电子设备和存储介质
CN112527316A (zh) * 2020-12-29 2021-03-19 Oppo广东移动通信有限公司 代码编译方法、装置、电子设备及存储介质
CN113553056A (zh) * 2021-07-21 2021-10-26 浙江大学 基于图匹配的llvm中间语言差分分析方法及系统
CN114357389A (zh) * 2021-12-31 2022-04-15 北京大学 一种基于llvm的指令加花混淆方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105103127A (zh) * 2013-02-28 2015-11-25 微软技术许可有限责任公司 基于编译器的混淆
CN106682460A (zh) * 2016-11-25 2017-05-17 西北大学 一种基于两次变换的代码混淆方法
CN107092518A (zh) * 2017-04-17 2017-08-25 上海红神信息技术有限公司 一种保护拟态防御系统软件层安全的编译方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105103127A (zh) * 2013-02-28 2015-11-25 微软技术许可有限责任公司 基于编译器的混淆
CN106682460A (zh) * 2016-11-25 2017-05-17 西北大学 一种基于两次变换的代码混淆方法
CN107092518A (zh) * 2017-04-17 2017-08-25 上海红神信息技术有限公司 一种保护拟态防御系统软件层安全的编译方法

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111984939A (zh) * 2019-05-22 2020-11-24 北京奇虎科技有限公司 字符串混淆方法、装置、电子设备和存储介质
CN110348206A (zh) * 2019-07-11 2019-10-18 网易(杭州)网络有限公司 应用于安卓安装包apk的保护方法、介质、装置和计算设备
CN110348206B (zh) * 2019-07-11 2021-09-17 网易(杭州)网络有限公司 应用于安卓安装包apk的保护方法、介质、装置和计算设备
CN111339503A (zh) * 2020-02-25 2020-06-26 Oppo广东移动通信有限公司 控制流混淆方法及相关产品
CN111723345A (zh) * 2020-05-09 2020-09-29 中国人民解放军战略支援部队信息工程大学 基于回调函数的控制流混淆方法及系统
CN111723345B (zh) * 2020-05-09 2022-11-22 中国人民解放军战略支援部队信息工程大学 基于回调函数的控制流混淆方法及系统
CN112527316A (zh) * 2020-12-29 2021-03-19 Oppo广东移动通信有限公司 代码编译方法、装置、电子设备及存储介质
CN113553056A (zh) * 2021-07-21 2021-10-26 浙江大学 基于图匹配的llvm中间语言差分分析方法及系统
CN113553056B (zh) * 2021-07-21 2024-05-14 浙江大学 基于图匹配的llvm中间语言差分分析方法及系统
CN114357389A (zh) * 2021-12-31 2022-04-15 北京大学 一种基于llvm的指令加花混淆方法及装置
CN114357389B (zh) * 2021-12-31 2024-04-16 北京大学 一种基于llvm的指令加花混淆方法及装置

Similar Documents

Publication Publication Date Title
CN109784010A (zh) 一种基于llvm的程序控制流混淆方法及装置
US11567759B1 (en) Generating source code from binary files
CN110908640B (zh) 实现业务功能的方法和脚本引擎
JP7201078B2 (ja) データ引数を動的に識別し、ソースコードを計装するためのシステムと方法
US20120233601A1 (en) Recompiling with Generic to Specific Replacement
CN104106049B (zh) 计算着色器的栅格化
US11579856B2 (en) Multi-chip compatible compiling method and device
US10007595B2 (en) Intelligent software test augmenting
JP7218793B2 (ja) プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法
CN109086215B (zh) 一种嵌入式软件单元测试用例生成方法及系统
CN106503496A (zh) 基于操作码替换与合并的Python脚本程序防逆转方法
CN102598001A (zh) 用于分析具有瞬时逻辑的逻辑设计的技术
US9823913B2 (en) Method of adding local variables in place of global in JavaScript
CN111310191A (zh) 一种基于深度学习的区块链智能合约漏洞检测方法
CN109614103A (zh) 一种基于字符的代码补全方法及系统
EP3379443A1 (en) Method and computer device to deobfuscate a source code
CN110197072A (zh) 软件安全漏洞的发掘方法及系统、存储介质和计算机设备
CN108563561B (zh) 一种程序隐性约束提取方法及系统
CN114911711A (zh) 一种代码缺陷分析方法、装置、电子设备及存储介质
Kop et al. Constrained term rewriting tool
CN108647146A (zh) 基于修正条件判定组合覆盖的测试用例生成方法
CN109858204B (zh) 一种基于llvm的程序代码保护方法及装置
Moyen et al. Loop quasi-invariant chunk detection
CN105354035A (zh) 用于编写web工程测试用例的方法
US20150363177A1 (en) Multi-branch determination syntax optimization apparatus

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: 20190521