CN106778101B - 一种基于控制流和外形混淆的Python代码混淆方法 - Google Patents

一种基于控制流和外形混淆的Python代码混淆方法 Download PDF

Info

Publication number
CN106778101B
CN106778101B CN201611123380.3A CN201611123380A CN106778101B CN 106778101 B CN106778101 B CN 106778101B CN 201611123380 A CN201611123380 A CN 201611123380A CN 106778101 B CN106778101 B CN 106778101B
Authority
CN
China
Prior art keywords
key
function
logistic
code
basic block
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
CN201611123380.3A
Other languages
English (en)
Other versions
CN106778101A (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.)
Suzhou Sike Technology Group Co ltd
Original Assignee
HEFEI COMJAY INFORMATION 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 HEFEI COMJAY INFORMATION TECHNOLOGY Co Ltd filed Critical HEFEI COMJAY INFORMATION TECHNOLOGY Co Ltd
Priority to CN201611123380.3A priority Critical patent/CN106778101B/zh
Publication of CN106778101A publication Critical patent/CN106778101A/zh
Application granted granted Critical
Publication of CN106778101B publication Critical patent/CN106778101B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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

Abstract

本发明公开了一种基于控制流和外形混淆的Python代码混淆方法,包括:将Python代码以函数为单位将每个函数中的代码分割成相应的基本块;对函数中的基本块进行编号;使用基于分段Logistic混沌映射的密钥生成算法,生成两套与前面的编号对应的密钥;打乱函数中基本块的顺序,并使用控制语句进行控制,封装控制基本块执行顺序的控制变量,使用两套密钥作为生成下一步需要执行的基本块的编号和if语句中的条件变量;对之前进行控制流混淆后的代码进行外形混淆,将其替换成无意义的字符串。本发明能保护使用Python语言开发的软件的知识产权。

Description

一种基于控制流和外形混淆的Python代码混淆方法
技术领域
本发明涉及一种程序混淆方法,具体地说是一种基于控制流和外形混淆的Python代码混淆方法。
背景技术
软件代码的安全保护是计算机安全领域的一个重点研究内容。随着互联网的飞速发展和大数据时代的到来,分布式计算环境在给人们带来更强的计算能力和更大的灵活性的同时,也使软件代码不可避免的地运行在不可信的节点上,从而使软件代码面临更加严峻的安全问题。相对于攻击者并不知晓攻击对象内部情况的黑盒子攻击,这种暴露软件代码,通过逆向分析代码的运行,并对代码进行恶意篡改或盗取的安全攻击成为白盒子攻击。目前白盒子攻击的威胁正在快速上升和不断演化。软件代码混淆技术是近十年来发展起来的一种软件白盒子安全保护技术。
Python语言现在变得越来越流行,它是一种面向对象、解释型计算机程序设计语言。Python语法简洁而清晰,具有丰富和强大的类库,常被昵称为胶水语言,它能够把其他语言制作的各种模板(尤其是C/C++)很轻松地联结在一起。
现阶段,由于Python语言的方便性,大量应用开始采用Python语言来实现。但是现在存在很多开源的反编译工具,可以直接将使用Python语言开发的程序模块(pyc、pyo)反编译为Python源代码,导致程序中的核心代码被攻击者窃取或篡改,使得开发者很难保护其代码的知识产权。
发明内容
针对现有使用Python语言开发的程序在安全防护方面所存在的问题,本发明提供一种基于控制流和外形混淆的Python代码混淆方法,以期能在保证语义上不发生改变,也不影响程序的正常执行的条件下,通过控制流混淆和外形混淆的手段,使得混淆后的Python源代码在被反编译成源代码之后难以阅读和理解,以达到保护原创代码的目的。
为达到上述发明目的,本发明采用如下技术方案:
本发明一种基于控制流和外形混淆的Python代码混淆方法的特点按如下步骤进行:
步骤1、以一个函数的开始与结束为单位,将Python代码中所有函数进行划分,得到若干个单独的函数;
步骤2、针对任意一个单独的函数fun,对其函数体中若干个连续执行的代码进行分割,得到若干个基本块并依次进行编号,记为B={b1,b2,…,bi,…,bn};bi表示第i个基本块;所述第i个基本块bi中的代码只有一个入口和一个出口;1≤i≤n;
步骤3、使用基于分段Logistic混沌映射的密钥生成算法,生成两套密钥;
步骤3.1、利用式(1)所示的分段Logistic混沌映射产生第i个实数ai,从而得到随机实数序列A={a1,a2,…,ai,…,an}:
式(1)中,a0=rand(0,1);u表示Logistic参数;且3.569946…≤u≤4;
步骤3.2、利用式(2)所示的映射函数将第i个实数ai映射成第i个整数Fi,从而将所述实数序列A={a1,a2,…,ai,…,an}映射成整数序列F={F1,F2,…,Fi,…,Fn}:
Fi=Round{ai×m} (2)
式(2)中,Round{ }是取整函数;m表示映射参数;
步骤3.3、统计所述整数序列F中互不相同的元素个数,记为t;t∈[1,n];
步骤3.4、由所述步骤3.1~步骤3.3的处理过程构成函数Logistic的函数体;由实数a0和Logistic参数u构成二元组(a0,u)作为第t个基本块bt的密钥keyt
步骤3.5、重复步骤3.1~步骤3.4,直到获得所有基本块的密钥作为第一套KEY={key1,key2,…,keyt,…,keyn};
步骤3.6、重复步骤3.1~步骤3.4,直到获得所有基本块的密钥作为第二套KEY′={key1′,key′2,…,key′t,…,key′n};
步骤4、基于控制流的混淆
步骤4.1、打乱所述函数fun中所有基本块的顺序,得到B′={b1′,b2′,…,bi′,…,b′n};bi′表示打乱后的第i个基本块;
步骤4.2、以所述第一套密钥KEY作为所述函数Logistic的参数;经过函数Logistic的函数体计算,得到下一个需要执行的基本块的编号;
以所述第二套密钥KEY′为作为所述函数Logistic的参数;经过函数Logistic的函数体计算,得到if-else控制语句中的条件变量,从而使用while循环语句和if-else控制语句对打乱后的所有基本块的顺序进行控制,使得打乱后的所有基本块的执行顺序与原来的执行顺序相同;
步骤5、基于外形的混淆
利用无意义的字符串对所述Python代码中局部的类名、函数名、变量名进行替换,从而形成混淆后的Python代码。
与已有技术相比,本发明提出的基于控制流和外形混淆的Python代码混淆方法,使代码的反向工程更加困难,创建让人理解困难的混淆代码,来隐藏使用Python开发的应用的核心代码,以便防止攻击者对应用进行篡改或反向工程。具体的说,有益效果体现在:
1、本发明基于现有的Logistic混沌映射算法,提出了一种新的密钥生成算法,基于此算法生成了两套密钥,并将密钥应用到控制流混淆中,使用while循环语句和if-else控制语句改变原先代码的逻辑结构,使得混淆后程序的结构更加复杂,更难被理解,但并不改变程序的执行过程及产生的结果,以此来增加攻击者理解代码的难度。
2、本发明将控制流混淆与外形混淆相结合,提供一种更加 复杂 的面向Python程序的代码混淆方法,该方法能够保证混淆后的Python源代码在语义上不发生改变,不影响程序的正常执行;同时使得混淆后的Python源代码逻辑结构变的更加复杂,并且代码中局部的类名、函数名和变量名在外形混淆后变成无意义的字符串。从而使的混淆后的代码更加难以理解,以此来增加Python模块在被反编译成源代码之后的阅读和理解的难度,以达到保护软件版权的作用。
附图说明
图1是本发明实施例的整体流程框图;
图2是本发明将Python伪代码进行控制流混淆的示例图。
图3是本发明将Python伪代码进行外形混淆的示例图。
具体实施方式
本实施例中,一种基于控制流和外形混淆的Python代码混淆方法,按如图1所示步骤进行:
步骤1、首先,读取需要混淆的Python代码;其次,使用Python语言中自带的函数获取代码的解析树;然后,以一个函数的开始与结束为单位,将Python代码中所有函数进行划分,得到若干个单独的函数;
步骤2、针对任意一个单独的函数fun,如图2所示,对其函数体中若干个连续执行的代码进行分割,得到若干个基本块并依次进行编号,记为B={b1,b2,…,bi,…,bn};图2中基本块个数n=4,所以得到B={b1,b2,b3,b4};bi表示第i个基本块;第i个基本块bi中的代码只有一个入口和一个出口;1≤i≤n;以此来提取函数中的基本块;
步骤3、使用基于分段Logistic混沌映射的密钥生成算法,生成两套密钥;
步骤3.1、利用式(1)所示的分段Logistic混沌映射产生第i个实数ai,从而得到随机实数序列A={a1,a2,…,ai,…,an}:
式(1)中,a0=rand(0,1);u表示Logistic参数;且3.569946…≤u≤4;
如图2所示,基本块个数n=4,这里得到的随机实数序列为A={a1,a2,a3,a4}
步骤3.2、利用式(2)所示的映射函数将第i个实数ai映射成第i个整数Fi,从而将实数序列A={a1,a2,a3,a4}映射成整数序列F={F1,F2,F3,…,F4}:
Fi=Round{ai×m} (2)
式(2)中,Round{}是取整函数;m表示映射参数;
步骤3.3、统计整数序列F中互不相同的元素个数,记为t;t∈[1,n];
步骤3.4、由步骤3.1~步骤3.3的处理过程构成函数Logistic的函数体;由实数a0和Logistic参数u构成二元组(a0,u)作为第t个基本块bt的密钥keyt
步骤3.5、重复步骤3.1~步骤3.4,直到获得所有基本块的密钥作为第一套KEY={key1,key2,key3,key4};
步骤3.6、重复步骤3.1~步骤3.4,直到获得所有基本块的密钥作为第二套KEY′={key1′,key′2,key3′,key′4};
步骤4、基于控制流的混淆,接下来打乱基本块的顺序并插入while和if-else语句进行控制流混淆
步骤4.1、打乱函数fun中所有基本块的顺序,得到B′={b1′,b2′,b3′,b4′};bi′表示打乱后的第i个基本块,其与原先基本块的对应顺序为B′={b1′,b2′,b3′,b4′}={b3,b1,b4,b2}
步骤4.2、以第一套密钥KEY作为函数Logistic的参数;经过函数Logistic的函数体计算,得到下一个需要执行的基本块的编号;
以第二套密钥KEY′为作为函数Logistic的参数;经过函数Logistic的函数体计算,得到if-else控制语句中的条件变量,从而使用while循环语句和if-else控制语句对打乱后的所有基本块的顺序进行控制,图2中Logistic(keyi)=Logistic(keyi′),i∈[1,4]。因此,打乱后的基本块的执行顺序为{b2′,b4′,b1′,b3′},其对应的混淆前基本块的顺序为{b1,b2,b3,b4},因此,打乱后的所有基本块的执行顺序与原来的执行顺序相同;
步骤5、基于外形的混淆
利用无意义的字符串对Python代码中局部的类名、函数名、变量名进行替换,从而形成混淆后的Python代码。如图3所示,使用无意义的字符串对fun函数中的函数名和变量名进行了替换。从而增加了Python程序被反编译后分析代码语义的难度,保护使用Python语言开发的软件的知识产权。

Claims (1)

1.一种基于控制流和外形混淆的Python代码混淆方法,其特征是按如下步骤进行:
步骤1、以一个函数的开始与结束为单位,将Python代码中所有函数进行划分,得到若干个单独的函数;
步骤2、针对任意一个单独的函数fun,对其函数体中若干个连续执行的代码进行分割,得到若干个基本块并依次进行编号,记为B={b1,b2,…,bi,…,bn};bi表示第i个基本块;所述第i个基本块bi中的代码只有一个入口和一个出口;1≤i≤n;
步骤3、使用基于分段Logistic混沌映射的密钥生成算法,生成两套密钥;
步骤3.1、利用式(1)所示的分段Logistic混沌映射产生第i个实数ai,从而得到随机实数序列A={a1,a2,…,ai,…,an}:
式(1)中,a0=rand(0,1);u表示Logistic参数;
步骤3.2、利用式(2)所示的映射函数将第i个实数ai映射成第i个整数Fi,从而将所述实数序列A={a1,a2,…,ai,…,an}映射成整数序列F={F1,F2,…,Fi,…,Fn}:
Fi=Round{ai×m} (2)
式(2)中,Round{}是取整函数;m表示映射参数;
步骤3.3、统计所述整数序列F中互不相同的元素个数,记为t;t∈[1,n];
步骤3.4、由所述步骤3.1~步骤3.3的处理过程构成函数Logistic的函数体;由实数a0和Logistic参数u构成二元组(a0,u)作为第t个基本块bt的密钥keyt
步骤3.5、重复步骤3.1~步骤3.4,直到获得所有基本块的密钥作为第一套KEY={key1,key2,…,keyt,…,keyn};
步骤3.6、重复步骤3.1~步骤3.4,直到获得所有基本块的密钥作为第二套KEY′={key′1,key′2,…,key′t,…,key′n};
步骤4、基于控制流的混淆
步骤4.1、打乱所述函数fun中所有基本块的顺序,得到B′={b′1,b′2,…,b′i,…,b′n};b′i表示打乱后的第i个基本块;
步骤4.2、以所述第一套密钥KEY作为所述函数Logistic的参数;经过函数Logistic的函数体计算,得到下一个需要执行的基本块的编号;
以所述第二套密钥KEY′为作为所述函数Logistic的参数;经过函数Logistic的函数体计算,得到if-else控制语句中的条件变量,从而使用while循环语句和if-else控制语句对打乱后的所有基本块的顺序进行控制,使得打乱后的所有基本块的执行顺序与原来的执行顺序相同;
步骤5、基于外形的混淆
利用无意义的字符串对所述Python代码中局部的类名、函数名、变量名进行替换,从而形成混淆后的Python代码。
CN201611123380.3A 2016-12-08 2016-12-08 一种基于控制流和外形混淆的Python代码混淆方法 Active CN106778101B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611123380.3A CN106778101B (zh) 2016-12-08 2016-12-08 一种基于控制流和外形混淆的Python代码混淆方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611123380.3A CN106778101B (zh) 2016-12-08 2016-12-08 一种基于控制流和外形混淆的Python代码混淆方法

Publications (2)

Publication Number Publication Date
CN106778101A CN106778101A (zh) 2017-05-31
CN106778101B true CN106778101B (zh) 2019-05-14

Family

ID=58877310

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611123380.3A Active CN106778101B (zh) 2016-12-08 2016-12-08 一种基于控制流和外形混淆的Python代码混淆方法

Country Status (1)

Country Link
CN (1) CN106778101B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108629162B (zh) * 2017-03-23 2020-06-02 北京小唱科技有限公司 一种源代码防护方法及装置
CN107315930A (zh) * 2017-07-07 2017-11-03 成都恒高科技有限公司 一种保护Python程序的方法
CN107437005B (zh) * 2017-07-18 2020-07-10 广东工业大学 一种基于混沌不透明谓词的代码混淆方法及装置
CN109784008A (zh) * 2017-11-14 2019-05-21 卓望数码技术(深圳)有限公司 一种用于移动代码的结构扁平方法和系统
CN108363911B (zh) * 2018-02-11 2021-10-29 西安四叶草信息技术有限公司 一种Python脚本混淆、水印的方法及装置
CN108763878A (zh) * 2018-04-18 2018-11-06 北京奇虎科技有限公司 一种程序保护方法及装置
CN109711118A (zh) * 2018-12-29 2019-05-03 上海上讯信息技术股份有限公司 一种基于插件化的iOS安全编译器及安全编译方法
CN110069261A (zh) * 2019-05-11 2019-07-30 肖银皓 一种嵌入式软件的可配置分区方法及系统
CN110888644B (zh) * 2019-12-06 2023-03-31 成都安恒信息技术有限公司 一种自定义混淆方案的JavaScript代码混淆方法
CN113255272B (zh) * 2021-06-01 2021-10-01 上海国微思尔芯技术股份有限公司 语句块封装方法、装置、电子设备及存储介质
CN113609517B (zh) * 2021-10-11 2022-02-08 深圳市沃易科技有限公司 基于物联网的用于计算机软件开发的数据加密方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105005718A (zh) * 2015-06-23 2015-10-28 电子科技大学 一种利用马尔可夫链实现代码混淆的方法
CN105117621A (zh) * 2014-04-23 2015-12-02 恩智浦有限公司 代码混淆的控制流平展化

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104335219B (zh) * 2012-03-30 2018-06-05 爱迪德技术有限公司 使用变量相关编码来保护可访问的系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105117621A (zh) * 2014-04-23 2015-12-02 恩智浦有限公司 代码混淆的控制流平展化
CN105005718A (zh) * 2015-06-23 2015-10-28 电子科技大学 一种利用马尔可夫链实现代码混淆的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
混沌不透明谓词在代码混淆中的研究与应用;苏庆等;《计算机科学》;20130630;第40卷(第6期);第155-159页

Also Published As

Publication number Publication date
CN106778101A (zh) 2017-05-31

Similar Documents

Publication Publication Date Title
CN106778101B (zh) 一种基于控制流和外形混淆的Python代码混淆方法
CN110543419B (zh) 一种基于深度学习技术的智能合约代码漏洞检测方法
CN105005718B (zh) 一种利用马尔可夫链实现代码混淆的方法
CN105354449B (zh) 一种面向Lua语言的加扰混淆方法和解密方法
CN103761475B (zh) 检测智能终端中恶意代码的方法及装置
CN103544414B (zh) 一种Android系统应用的深度代码混淆方法
Zegzhda et al. Applying deep learning techniques for Android malware detection
US9721120B2 (en) Preventing unauthorized calls to a protected function
US10637643B2 (en) Methods and apparatuses of digital data processing
CN105718765A (zh) 一种利用有限自动机实现代码混淆的方法
Zhai et al. Text-to-image diffusion models can be easily backdoored through multimodal data poisoning
CN104657432B (zh) 一种降低长地址转换为短地址重复率的方法
CN110457869B (zh) 程序编译加密方法、装置、存储介质及电子设备
US9639673B2 (en) Protecting software through a fake cryptographic layer
KR101536920B1 (ko) Arm 프로세서 기반의 파일 난독화 방법
Shu et al. Android malware detection methods based on convolutional neural network: A survey
Torvi et al. An unique data security using text steganography
CN101887500B (zh) 基于标签的程序控制流深度混淆方法
Tian et al. Code fusion information-hiding algorithm based on PE file function migration
CN105376053B (zh) 基于Keccak杂凑算法的图像密钥生成方法
CN104657680A (zh) 芯片中抵御模板攻击的数据传输方法
CN103324891A (zh) 基于加密技术的林分生长与收获模型动态管理方法
CN108777622A (zh) 一种二进制流散列取模加密解密方法
US11663334B1 (en) System and method for computer security augmented data set algorithm training
US20230342466A1 (en) System and method for computer security augmented data set algorithm training

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
TR01 Transfer of patent right

Effective date of registration: 20230526

Address after: 215000 Units 2001, 2008 and 2009, Building 1, Xinneng Business Plaza, No. 99 Si'an Street, Suzhou Industrial Park, Suzhou, China (Jiangsu) Pilot Free Trade Zone

Patentee after: Suzhou Sike Information Technology Co.,Ltd.

Address before: 230000 Comprehensive Building A526, Advanced Technology Research Institute, University of Science and Technology of China, at the intersection of Wangjiang West Road and Chuangxin Avenue, Hefei City, Anhui Province

Patentee before: HEFEI COMJAY INFORMATION TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right
CP03 Change of name, title or address

Address after: Units 2001, 2008, 2009, Building 1, Xinneng Business Plaza, No. 99 Si'an Street, Suzhou Industrial Park, Jiangsu Province, 215000

Patentee after: Suzhou Sike Technology (Group) Co.,Ltd.

Country or region after: China

Address before: 215000 Units 2001, 2008 and 2009, Building 1, Xinneng Business Plaza, No. 99 Si'an Street, Suzhou Industrial Park, Suzhou, China (Jiangsu) Pilot Free Trade Zone

Patentee before: Suzhou Sike Information Technology Co.,Ltd.

Country or region before: China

CP03 Change of name, title or address