CN105868589A - 一种脚本加密方法、脚本运行方法及装置 - Google Patents
一种脚本加密方法、脚本运行方法及装置 Download PDFInfo
- Publication number
- CN105868589A CN105868589A CN201610191585.9A CN201610191585A CN105868589A CN 105868589 A CN105868589 A CN 105868589A CN 201610191585 A CN201610191585 A CN 201610191585A CN 105868589 A CN105868589 A CN 105868589A
- Authority
- CN
- China
- Prior art keywords
- bytecode
- operator
- script
- self
- function
- 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
Links
- 238000013515 script Methods 0.000 title claims abstract description 93
- 238000000034 method Methods 0.000 title claims abstract description 37
- 238000013507 mapping Methods 0.000 claims description 32
- 230000001105 regulatory effect Effects 0.000 abstract 1
- 230000008569 process Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012856 packing Methods 0.000 description 2
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种脚本加密方法、脚本运行方法及装置。所述脚本加密方法包括:在原始的操作符及其函数的对应关系表中添加自定义的操作符及其对应的函数;对添加后的对应关系表中的各个操作符和各个函数的对应关系进行调整,获得操作符关系表;根据所述操作符关系表,将脚本中的源代码编译为基于所述操作符的字节码。采用本发明实施例,能够避免源代码被反编译,实现对脚本的保护。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种脚本加密方法、脚本运行方法及装置。
背景技术
由于脚本语言(如Python,Lua等)具有易学易用,无需编译以及能提高开发效率等特点,得到了广泛的采用。对于使用脚本语言开发的应用程序来说,为了保护源代码的知识产权以及应用程序的安全性,需要对源代码通过加密进行保护。
在现有技术中,脚本中源代码保护的常用方式是将源代码编译为字节码,或者进一步打包生成可执行文件,然后再进行发布。
发明内容
背景技术中提及的源代码的保护方式较简单,使得源代码很容易被有经验的开发人员反编译,无法达到保护源代码的目的。
本发明实施例提出一种脚本加密方法、脚本运行方法及装置,能够避免源代码被反编译,实现对脚本的保护。
本发明实施例提供一种脚本加密方法,包括:
在原始的操作符及其函数的对应关系表中添加自定义的操作符及其对应的函数;
对添加后的对应关系表中的各个操作符和各个函数的对应关系进行调整,获得操作符关系表;
根据所述操作符关系表,将脚本中的源代码编译为基于所述操作符的字节码。
进一步地,在所述根据所述操作符关系表,将脚本中的源代码编译为基于所述函数的字节码之后,还包括:
在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码。
在一个优选地实施方式中,所述在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码,具体包括:
每编译为一段基于所述操作符的字节码时,产生一个对应的随机数;
若检测到所述对应的随机数小于预设的阈值,在所述字节码之后插入基于自定义操作符的无效字节码。
在另一个优选地实施方式中,所述在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码,具体包括:
对所述基于所述操作符的字节码进行检测;
每检测到N段相邻的字节码中的操作符符合预设的合并规则时,将所述N段相邻的字节码合并为基于自定义操作符的合并字节码;其中,N>1。
本发明实施例还提供一种脚本运行方法,包括:
读取脚本中的上述基于操作符的字节码;
根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数;
运行所述基于操作符的字节码。
在一个优选地实施方式中,所述根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数,具体包括:
对所述基于操作符的字节码进行检测,判断每段字节码是否为预存的基于自定义操作符的无效字节码;
若是,则跳过所述无效字节码;
若否,则根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
在另一个优选地实施方式中,所述根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数,具体包括:
对所述基于操作符的字节码进行检测,判断每段字节码否为预存的基于自定义操作符的合并字节码;
若是,则根据预存的合并规则,调用所述合并字节码中的自定义操作符所对应的函数;
若否,则根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
相应的,本发明实施例还提供一种脚本加密装置,包括:
添加模块,用于在原始的操作符及其函数的对应关系表中添加自定义的操作符及其对应的函数;
操作符关系表获取模块,用于对添加后的对应关系表中的各个操作符和各个函数的对应关系进行调整,获得操作符关系表;以及,
加密模块,用于根据所述操作符关系表,将脚本中的源代码编译为基于所述操作符的字节码。
进一步地,所述脚本加密装置还包括:
混淆模块,用于在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码。
在一个优选地实施方式中,所述混淆模块具体包括:
随机数产生单元,用于每编译为一段基于所述操作符的字节码时,产生一个对应的随机数;以及,
无效字节码插入单元,用于在检测到所述对应的随机数小于预设的阈值时,在所述字节码之后插入基于自定义操作符的无效字节码。
在另一个优选地实施方式中,所述混淆模块具体包括:
第二检测单元,用于对所述基于所述操作符的字节码进行检测;以及,
合并单元,用于每检测到N段相邻的字节码中的操作符符合预设的合并规则时,将所述N段相邻的字节码合并为基于自定义操作符的合并字节码;其中,N>1。
相应的,本发明实施例还提供一种脚本运行装置,包括:
读取模块,用于读取脚本中上述基于操作符的字节码;
操作符识别模块,用于根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数;以及,
运行模块,用于运行所述基于操作符的字节码。
在一个优选地实施方式中,所述操作符识别模块具体包括:
无效字节码判断单元,用于对所述基于操作符的字节码进行检测,判断每段字节码是否为预存的基于自定义操作符的无效字节码;
跳过单元,用于在所述无效字节码判断单元判定为是时,跳过所述无效字节码;以及,
第一调用单元,用于在所述无效字节码判断单元判定为否时,根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
在另一个优选地实施方式中,所述操作符识别模块具体包括:
合并字节码判断单元,用于对所述基于操作符的字节码进行检测,判断每段字节码否为预存的基于自定义操作符的合并字节码;
第二调用单元,用于在所述合并字节码判断单元判定为是时,根据预存的合并规则,调用所述合并字节码中的自定义操作符所对应的函数;以及,
第三调用单元,用于在所述合并字节码判断单元判定为否时,根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
实施本发明实施例,具有如下有益效果:
本发明实施例提供的脚本加密方法、脚本运行方法及装置,能够在原始的对应关系表中添加自定义的操作符及其对应的函数,并打乱添加后的对应关系表中的操作符与函数的对应关系,以根据打乱后的对应关系来对源代码进行编译,从而避免通过原始的对应关系表对源代码进行反编译,实现对脚本的保护;在将源代码编译为字节码后,在字节码中混淆进基于自定义操作符的字节码,进一步避免源代码的反编译,实现对脚本的进一步的保护。
附图说明
图1是本发明提供的脚本加密方法的一个实施例的流程示意图;
图2是本发明提供的脚本加密装置的一个实施例的结构示意图;
图3是本发明提供的脚本运行方法的一个实施例的流程示意图;
图4是本发明提供的脚本运行装置的一个实施例的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,本发明提供的脚本加密方法的一个实施例的流程示意图,包括:
S11、在原始的操作符及其函数的对应关系表中添加自定义的操作符及其对应的函数;
S12、对添加后的对应关系表中的各个操作符和各个函数的对应关系进行调整,获得操作符关系表;
S13、根据所述操作符关系表,将脚本中的源代码编译为基于所述操作符的字节码。
需要说明的是,现有的Python虚拟机可根据原始的操作符及其函数的对应关系表反编译出脚本中的源代码。为了避免源代码被反编译,在原始的对应关系表中增加若干个新的宏定义,即在原始的对应关系表中增加若干个自定义的操作符和函数。进而,将所有的函数与所有的操作符进行随机排列,打乱对应关系表中操作符与函数的对应关系。其中,操作符即OpCode。根据打乱后的对应关系来对脚本中的源代码进行编译,使现有的Python虚拟机无法根据原始的对应关系表进行反编译,从而实现对脚本的保护。
例如,在原始的对应关系表中,定义为:
#define LOAD_FAST 1#从局部堆栈中弹出首个变量
#define LOAD_CONST 2#从常量表中读取第一个常量1
#define COMPARE_OP 3#比较指令
在该对应关系表中添加新的宏定义:
#define BINARY_ADD 5
打乱添加后的对应关系表中的对应关系,获得操作符关系表,在操作符关系表中,相应的定义为:
#define LOAD_FAST 2
#define LOAD_CONST 5
#define COMPARE_OP 1
#define BINARY_ADD 3
根据操作符关系表对表达式n>1进行编译后,即可获得基于操作符的字节码:
2 0(n)#从局部堆栈中弹出首个变量
5 1(1)#从常量表中读取第一个常量1
1 4(>)#比较指令
若现有的Python虚拟机根据原始的对应关系表对该字节码进行反编译,则将该字节码被翻译为:
LOAD_CONST 0(n)#从常量表中读取常量0
LOAD_FAST 4(>)#从局部堆栈中弹出第五个变量
可见,现有的Python虚拟机无法反编译出表达式n>1,从而实现对脚本的保护。
进一步地,在所述根据所述操作符关系表,将脚本中的源代码编译为基于所述函数的字节码之后,还包括:
在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码。
需要说明的是,在根据操作符关系表对脚本中的源代码进行编译时,还可在编译后的字节码中插入混淆用的基于自定义函数的字节码,从而对源代码进行进一步地保护。
在一个优选地实施方式中,所述在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码,具体包括:
每编译为一段基于所述操作符的字节码时,产生一个对应的随机数;
若检测到所述对应的随机数小于预设的阈值,在所述字节码之后插入基于自定义操作符的无效字节码。
需要说明的是,在将源代码编译为字节码时,在字节码中随机地插入基于自定义函数的字节码。预先设置一个阈值,在每编译一段字节码时,会随机产生一个对应的随机数,该随机数的范围为[0,1)。若该随机数小于阈值,则在其对应的字节码后面接着插入一段基于自定义操作符的无效字节码,例如,NEW_OP_CODE args。现有的Python虚拟机无法对无效字节码进行识别,从而无法实现源代码的反编译。
在另一个优选地实施方式中,所述在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码,具体包括:
对所述基于所述操作符的字节码进行检测;
每检测到N段相邻的字节码中的操作符符合预设的合并规则时,将所述N段相邻的字节码合并为基于自定义操作符的合并字节码;其中,N>1。
需要说明的是,在将源代码编译为字节码时,对字节码执行合并的操作。预先定义合并规则,其形式可以为正则表达式。然后,根据正则表达式对编译的字节码进行文本替换,将编译的多段字节码合并为一段基于自定义操作符的合并字节码。例如,合并规则定义为将字节码2 0和3 1合并为4 0,编译后的字节码为:
2 0(n)
3 1(1)
1 4(>)
在对编译后的字节码进行检测时,将2 0(n)、3 1(1)合并为4 0,使合并后的字节码为:
4 0
1 4(>)
现有的Python虚拟机无法对合并字节码进行识别,从而无法实现源代码的反编译。
本发明实施例提供的脚本加密方法,能够在原始的对应关系表中添加自定义的操作符及其对应的函数,并打乱添加后的对应关系表中的操作符与函数的对应关系,以根据打乱后的对应关系来对源代码进行编译,从而避免通过原始的对应关系表对源代码进行反编译,实现对脚本的保护;在将源代码编译为字节码后,在字节码中混淆进基于自定义操作符的字节码,进一步避免源代码的反编译,实现对脚本的进一步的保护。
相应的,本发明还提供一种脚本加密装置,能够实现上述实施例中的脚本加密方法的所有流程。
参见图2,是本发明提供的脚本加密装置的一个实施例的结构示意图,包括:
添加模块21,用于在原始的操作符及其函数的对应关系表中添加自定义的操作符及其对应的函数;
操作符关系表获取模块22,用于对添加后的对应关系表中的各个操作符和各个函数的对应关系进行调整,获得操作符关系表;以及,
加密模块23,用于根据所述操作符关系表,将脚本中的源代码编译为基于所述操作符的字节码。
进一步地,所述脚本加密装置还包括:
混淆模块,用于在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码。
在一个优选地实施方式中,所述混淆模块具体包括:
随机数产生单元,用于每编译为一段基于所述操作符的字节码时,产生一个对应的随机数;以及,
无效字节码插入单元,用于在检测到所述对应的随机数小于预设的阈值时,在所述字节码之后插入基于自定义操作符的无效字节码。
在另一个优选地实施方式中,所述混淆模块具体包括:
第二检测单元,用于对所述基于所述操作符的字节码进行检测;以及,
合并单元,用于每检测到N段相邻的字节码中的操作符符合预设的合并规则时,将所述N段相邻的字节码合并为基于自定义操作符的合并字节码;其中,N>1。
本发明实施例提供的脚本加密装置,能够在原始的对应关系表中添加自定义的操作符及其对应的函数,并打乱添加后的对应关系表中的操作符与函数的对应关系,以根据打乱后的对应关系来对源代码进行编译,从而避免通过原始的对应关系表对源代码进行反编译,实现对脚本的保护;在将源代码编译为字节码后,在字节码中混淆进基于自定义操作符的字节码,进一步避免源代码的反编译,实现对脚本的进一步的保护。
参见图3,本发明提供的脚本运行方法的一个实施例的流程示意图,包括:
S31、读取脚本中的上述基于操作符的字节码;
S32、根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数;
S33、运行所述基于操作符的字节码。
需要说明的是,在采用上述实施例的方法对脚本中的源代码进行编译后,还需采用专用的虚拟机对编译后的字节码进行解析才能使脚本正常运行。其中,专用的虚拟机是根据脚本的加密方法修改虚拟机代码,并对修改后的虚拟机代码进行编译后获得的。在发布应用程序时,将编译后的字节码和专用的虚拟机打包发布,使得编译后的字节码通过专用的虚拟机执行。
使用专用的虚拟机来运行时,先读取编译后的字节码进行解析,根据操作符关系表解析出字节码中的操作符所对应的函数进行调用,进而运行脚本。例如,在操作符关系表中,定义为:
#define LOAD_FAST 2
#define LOAD_CONST 5
#define COMPARE_OP 1
#define BINARY_ADD 3
编译后的字节码为:
2 0(n)
5 1(1)
1 4(>)
根据操作符关系表对编译后的字节码进行解析,解析为:
LOAD_FAST 0(n)#从局部堆栈中弹出首个变量
LOAD_CONST 1(1)#从常量表中读取第一个常量1
COMPARE_OP 4(>)#比较指令
调用解析出的函数来运行脚本。
在一个优选地实施方式中,所述根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数,具体包括:
对所述基于操作符的字节码进行检测,判断每段字节码是否为预存的基于自定义操作符的无效字节码;
若是,则跳过所述无效字节码;
若否,则根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
需要说明的是,在对字节码进行解析的过程中,读取每段字节码,若该段字节码为预存的基于自定义操作符的无效字节码,例如,NEW_OP_CODE args,则跳过这段字节码,处理下一段字节码。
在另一个优选地实施方式中,所述根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数,具体包括:
对所述基于操作符的字节码进行检测,判断每段字节码否为预存的基于自定义操作符的合并字节码;
若是,则根据预存的合并规则,调用所述合并字节码中的自定义操作符所对应的函数;
若否,则根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
需要说明的是,在对字节码进行解析的过程中,读取每段字节码,若该段字节码为基于自定义操作符的合并字节码,则根据合并规则,调用合并字节码所对应的函数。例如,在检测到一段字节码为4 0时,根据合并规则识别出4 0所对应的字节码2 0和3 1,进而调用2 0和3 1所对应的函数。
本发明实施例提供的脚本运行方法,能够在原始的对应关系表中添加自定义的操作符及其对应的函数,并打乱添加后的对应关系表中的操作符与函数的对应关系,以根据打乱后的对应关系来对源代码进行编译,从而避免通过原始的对应关系表对源代码进行反编译,实现对脚本的保护;在将源代码编译为字节码后,在字节码中混淆进基于自定义操作符的字节码,进一步避免源代码的反编译,实现对脚本的进一步的保护。
相应的,本发明还提供一种脚本运行装置,能够实现上述实施例中的脚本运行方法的所有流程。
参见图4,是本发明提供的脚本运行装置的一个实施例的结构示意图,包括:
读取模块41,用于读取脚本中上述基于操作符的字节码;
操作符识别模块42,用于根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数;以及,
运行模块43,用于运行所述基于操作符的字节码。
在一个优选地实施方式中,所述操作符识别模块具体包括:
无效字节码判断单元,用于对所述基于操作符的字节码进行检测,判断每段字节码是否为预存的基于自定义操作符的无效字节码;
跳过单元,用于在所述无效字节码判断单元判定为是时,跳过所述无效字节码;以及,
第一调用单元,用于在所述无效字节码判断单元判定为否时,根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
在另一个优选地实施方式中,所述操作符识别模块具体包括:
合并字节码判断单元,用于对所述基于操作符的字节码进行检测,判断每段字节码否为预存的基于自定义操作符的合并字节码;
第二调用单元,用于在所述合并字节码判断单元判定为是时,根据预存的合并规则,调用所述合并字节码中的自定义操作符所对应的函数;以及,
第三调用单元,用于在所述合并字节码判断单元判定为否时,根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
本发明实施例提供的脚本运行装置,能够在原始的对应关系表中添加自定义的操作符及其对应的函数,并打乱添加后的对应关系表中的操作符与函数的对应关系,以根据打乱后的对应关系来对源代码进行编译,从而避免通过原始的对应关系表对源代码进行反编译,实现对脚本的保护;在将源代码编译为字节码后,在字节码中混淆进基于自定义操作符的字节码,进一步避免源代码的反编译,实现对脚本的进一步的保护。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
Claims (14)
1.一种脚本加密方法,其特征在于,包括:
在原始的操作符及其函数的对应关系表中添加自定义的操作符及其对应的函数;
对添加后的对应关系表中的各个操作符和各个函数的对应关系进行调整,获得操作符关系表;
根据所述操作符关系表,将脚本中的源代码编译为基于所述操作符的字节码。
2.如权利要求1所述的脚本加密方法,其特征在于,在所述根据所述操作符关系表,将脚本中的源代码编译为基于所述函数的字节码之后,还包括:
在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码。
3.如权利要求2所述的脚本加密方法,其特征在于,所述在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码,具体包括:
每编译为一段基于所述操作符的字节码时,产生一个对应的随机数;
若检测到所述对应的随机数小于预设的阈值,在所述字节码之后插入基于自定义操作符的无效字节码。
4.如权利要求2所述的脚本加密方法,其特征在于,所述在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码,具体包括:
对所述基于所述操作符的字节码进行检测;
每检测到N段相邻的字节码中的操作符符合预设的合并规则时,将所述N段相邻的字节码合并为基于自定义操作符的合并字节码;其中,N>1。
5.一种脚本运行方法,其特征在于,包括:
读取脚本中的如权利要求1至4任一项所述的基于操作符的字节码;
根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数;
运行所述基于操作符的字节码。
6.如权利要求5所述的脚本运行方法,其特征在于,所述根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数,具体包括:
对所述基于操作符的字节码进行检测,判断每段字节码是否为预存的基于自定义操作符的无效字节码;
若是,则跳过所述无效字节码;
若否,则根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
7.如权利要求5所述的脚本运行方法,其特征在于,所述根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数,具体包括:
对所述基于操作符的字节码进行检测,判断每段字节码否为预存的基于自定义操作符的合并字节码;
若是,则根据预存的合并规则,调用所述合并字节码中的自定义操作符所对应的函数;
若否,则根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
8.一种脚本加密装置,其特征在于,包括:
添加模块,用于在原始的操作符及其函数的对应关系表中添加自定义的操作符及其对应的函数;
操作符关系表获取模块,用于对添加后的对应关系表中的各个操作符和各个函数的对应关系进行调整,获得操作符关系表;以及,
加密模块,用于根据所述操作符关系表,将脚本中的源代码编译为基于所述操作符的字节码。
9.如权利要求8所述的脚本加密装置,其特征在于,所述脚本加密装置还包括:
混淆模块,用于在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码。
10.如权利要求9所述的脚本加密装置,其特征在于,所述混淆模块具体包括:
随机数产生单元,用于每编译为一段基于所述操作符的字节码时,产生一个对应的随机数;以及,
无效字节码插入单元,用于在检测到所述对应的随机数小于预设的阈值时,在所述字节码之后插入基于自定义操作符的无效字节码。
11.如权利要求9所述的脚本加密装置,其特征在于,所述混淆模块具体包括:
第二检测单元,用于对所述基于所述操作符的字节码进行检测;以及,
合并单元,用于每检测到N段相邻的字节码中的操作符符合预设的合并规则时,将所述N段相邻的字节码合并为基于自定义操作符的合并字节码;其中,N>1。
12.一种脚本运行装置,其特征在于,包括:
读取模块,用于读取脚本中的如权利要求1至4任一项所述的基于操作符的字节码;
操作符识别模块,用于根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数;以及,
运行模块,用于运行所述基于操作符的字节码。
13.如权利要求12所述的脚本运行装置,其特征在于,所述操作符识别模块具体包括:
无效字节码判断单元,用于对所述基于操作符的字节码进行检测,判断每段字节码是否为预存的基于自定义操作符的无效字节码;
跳过单元,用于在所述无效字节码判断单元判定为是时,跳过所述无效字节码;以及,
第一调用单元,用于在所述无效字节码判断单元判定为否时,根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
14.如权利要求12所述的脚本运行装置,其特征在于,所述操作符识别模块具体包括:
合并字节码判断单元,用于对所述基于操作符的字节码进行检测,判断每段字节码否为预存的基于自定义操作符的合并字节码;
第二调用单元,用于在所述合并字节码判断单元判定为是时,根据预存的合并规则,调用所述合并字节码中的自定义操作符所对应的函数;以及,
第三调用单元,用于在所述合并字节码判断单元判定为否时,根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610191585.9A CN105868589B (zh) | 2016-03-30 | 2016-03-30 | 一种脚本加密方法、脚本运行方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610191585.9A CN105868589B (zh) | 2016-03-30 | 2016-03-30 | 一种脚本加密方法、脚本运行方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105868589A true CN105868589A (zh) | 2016-08-17 |
CN105868589B CN105868589B (zh) | 2019-11-19 |
Family
ID=56627569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610191585.9A Active CN105868589B (zh) | 2016-03-30 | 2016-03-30 | 一种脚本加密方法、脚本运行方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105868589B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106682460A (zh) * | 2016-11-25 | 2017-05-17 | 西北大学 | 一种基于两次变换的代码混淆方法 |
CN107315930A (zh) * | 2017-07-07 | 2017-11-03 | 成都恒高科技有限公司 | 一种保护Python程序的方法 |
CN108363911A (zh) * | 2018-02-11 | 2018-08-03 | 西安四叶草信息技术有限公司 | 一种Python脚本混淆、水印的方法及装置 |
CN108829396A (zh) * | 2018-06-15 | 2018-11-16 | 腾讯科技(深圳)有限公司 | 脚本编译的方法、脚本执行的方法、相关装置及系统 |
CN109101237A (zh) * | 2018-08-01 | 2018-12-28 | 北京顶象技术有限公司 | 代码的加密编译方法及装置 |
CN109767516A (zh) * | 2018-12-14 | 2019-05-17 | 北京摩拜科技有限公司 | 日志设置和打印方法、设置和打印设备、及日志系统 |
CN109783160A (zh) * | 2019-01-29 | 2019-05-21 | 广东九联科技股份有限公司 | 一种快速传送及渲染的网页文件加载系统及方法 |
CN110135133A (zh) * | 2019-04-19 | 2019-08-16 | 肖银皓 | 一种面向微控制器的压缩整合式源代码混淆方法及系统 |
US11550883B2 (en) | 2020-09-08 | 2023-01-10 | Assured Information Security, Inc. | Code protection |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8117433B2 (en) * | 2004-02-19 | 2012-02-14 | Trend Micro Incorporated | Method and apparatus to prevent vulnerability to virus and worm attacks through instruction remapping |
CN102592082A (zh) * | 2010-12-18 | 2012-07-18 | 微软公司 | 通过操作码随机化的安全 |
CN102831342A (zh) * | 2012-07-28 | 2012-12-19 | 北京深思洛克软件技术股份有限公司 | 一种提高安卓系统中应用程序保护强度的方法 |
CN103324872A (zh) * | 2013-07-12 | 2013-09-25 | 上海交通大学 | 基于指令混淆的Android应用程序保护方法及系统 |
CN104573424A (zh) * | 2013-10-23 | 2015-04-29 | 中国银联股份有限公司 | 一种应用程序保护系统和方法 |
-
2016
- 2016-03-30 CN CN201610191585.9A patent/CN105868589B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8117433B2 (en) * | 2004-02-19 | 2012-02-14 | Trend Micro Incorporated | Method and apparatus to prevent vulnerability to virus and worm attacks through instruction remapping |
CN102592082A (zh) * | 2010-12-18 | 2012-07-18 | 微软公司 | 通过操作码随机化的安全 |
CN102831342A (zh) * | 2012-07-28 | 2012-12-19 | 北京深思洛克软件技术股份有限公司 | 一种提高安卓系统中应用程序保护强度的方法 |
CN103324872A (zh) * | 2013-07-12 | 2013-09-25 | 上海交通大学 | 基于指令混淆的Android应用程序保护方法及系统 |
CN104573424A (zh) * | 2013-10-23 | 2015-04-29 | 中国银联股份有限公司 | 一种应用程序保护系统和方法 |
Non-Patent Citations (2)
Title |
---|
DHIRU KHOLIA等: "《Proceedings of the 7th USENIX conference on Offensive Technologies》", 31 December 2013 * |
寂涯网络: "对Python bytecode混淆技术的内存反汇编(3)", 《HTTP://WWW.JYBASE.NET/RUANJIANPOJIE/20120113749_3.HTML》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106682460A (zh) * | 2016-11-25 | 2017-05-17 | 西北大学 | 一种基于两次变换的代码混淆方法 |
CN106682460B (zh) * | 2016-11-25 | 2019-05-31 | 西北大学 | 一种基于两次变换的代码混淆方法 |
CN107315930A (zh) * | 2017-07-07 | 2017-11-03 | 成都恒高科技有限公司 | 一种保护Python程序的方法 |
CN108363911A (zh) * | 2018-02-11 | 2018-08-03 | 西安四叶草信息技术有限公司 | 一种Python脚本混淆、水印的方法及装置 |
CN108363911B (zh) * | 2018-02-11 | 2021-10-29 | 西安四叶草信息技术有限公司 | 一种Python脚本混淆、水印的方法及装置 |
CN108829396A (zh) * | 2018-06-15 | 2018-11-16 | 腾讯科技(深圳)有限公司 | 脚本编译的方法、脚本执行的方法、相关装置及系统 |
CN108829396B (zh) * | 2018-06-15 | 2022-02-01 | 腾讯科技(深圳)有限公司 | 脚本编译的方法、脚本执行的方法、相关装置及系统 |
CN109101237A (zh) * | 2018-08-01 | 2018-12-28 | 北京顶象技术有限公司 | 代码的加密编译方法及装置 |
CN109767516B (zh) * | 2018-12-14 | 2021-06-11 | 汉海信息技术(上海)有限公司 | 日志设置和打印方法、设置和打印设备、及日志系统 |
CN109767516A (zh) * | 2018-12-14 | 2019-05-17 | 北京摩拜科技有限公司 | 日志设置和打印方法、设置和打印设备、及日志系统 |
CN109783160A (zh) * | 2019-01-29 | 2019-05-21 | 广东九联科技股份有限公司 | 一种快速传送及渲染的网页文件加载系统及方法 |
CN109783160B (zh) * | 2019-01-29 | 2022-04-26 | 广东九联科技股份有限公司 | 一种快速传送及渲染的网页文件加载系统及方法 |
CN110135133A (zh) * | 2019-04-19 | 2019-08-16 | 肖银皓 | 一种面向微控制器的压缩整合式源代码混淆方法及系统 |
CN110135133B (zh) * | 2019-04-19 | 2021-08-17 | 佛山市微风科技有限公司 | 一种面向微控制器的压缩整合式源代码混淆方法及系统 |
US11550883B2 (en) | 2020-09-08 | 2023-01-10 | Assured Information Security, Inc. | Code protection |
Also Published As
Publication number | Publication date |
---|---|
CN105868589B (zh) | 2019-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105868589A (zh) | 一种脚本加密方法、脚本运行方法及装置 | |
CN103413075B (zh) | 一种通过虚拟机保护java可执行程序的方法及设备 | |
Gawlik et al. | Towards automated integrity protection of C++ virtual function tables in binary programs | |
CN103413073B (zh) | 一种保护java可执行程序的方法及设备 | |
KR101521765B1 (ko) | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 | |
CN102598017B (zh) | 提高Java字节码的防窜改能力的系统和方法 | |
CN103559449B (zh) | 一种代码改动的检测方法及装置 | |
CN109313677B (zh) | 用于动态可执行验证的方法和装置 | |
CN108363911B (zh) | 一种Python脚本混淆、水印的方法及装置 | |
CN104536797A (zh) | 一种Java程序预编译方法和预编译器 | |
CN105787368A (zh) | 一种基于函数置乱的rop防御方法与装置 | |
KR101861341B1 (ko) | 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법 | |
CN107632832B (zh) | 一种面向dalvik字节码控制流混淆方法 | |
CN105787305A (zh) | 一种抵抗符号执行和污点分析的软件保护方法 | |
EP3495978B1 (en) | Method for detecting vulnerabilities in software | |
CN107908955B (zh) | 一种基于中间语言分析的控制流完整性保护方法及系统 | |
CN105303073A (zh) | 软件代码保护方法 | |
CN109543368B (zh) | 一种基于中间语言解释器的跨平台源码虚拟化保护方法 | |
CN103678961A (zh) | 代码动态生成的方法 | |
CN101901184B (zh) | 检查应用程序漏洞的方法、装置和系统 | |
CN110717181B (zh) | 基于新型程序依赖图的非控制数据攻击检测方法及装置 | |
CN107315930A (zh) | 一种保护Python程序的方法 | |
CN102750220B (zh) | 一种软件源代码安全缺陷分析的方法和装置 | |
CN107545174B (zh) | 一种基于llvm的抵御控制流劫持的系统和方法 | |
CN102855439A (zh) | 一种执行文件自校验方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |