CN105868589B - 一种脚本加密方法、脚本运行方法及装置 - Google Patents

一种脚本加密方法、脚本运行方法及装置 Download PDF

Info

Publication number
CN105868589B
CN105868589B CN201610191585.9A CN201610191585A CN105868589B CN 105868589 B CN105868589 B CN 105868589B CN 201610191585 A CN201610191585 A CN 201610191585A CN 105868589 B CN105868589 B CN 105868589B
Authority
CN
China
Prior art keywords
operator
bytecode
script
function
self
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
CN201610191585.9A
Other languages
English (en)
Other versions
CN105868589A (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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network 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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN201610191585.9A priority Critical patent/CN105868589B/zh
Publication of CN105868589A publication Critical patent/CN105868589A/zh
Application granted granted Critical
Publication of CN105868589B publication Critical patent/CN105868589B/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/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • 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

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 (8)

1.一种脚本加密方法,其特征在于,包括:
在原始的操作符及其函数的对应关系表中添加自定义的操作符及其对应的函数;
对添加后的对应关系表中的各个操作符和各个函数的对应关系进行调整,获得操作符关系表;
根据所述操作符关系表,将脚本中的源代码编译为基于所述操作符的字节码;
在所述根据所述操作符关系表,将脚本中的源代码编译为基于所述函数的字节码之后,还包括:
在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码;
其中,所述在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码,具体包括:
每编译为一段基于所述操作符的字节码时,产生一个对应的随机数;
若检测到所述对应的随机数小于预设的阈值,在所述字节码之后插入基于自定义操作符的无效字节码;或,
对所述基于所述操作符的字节码进行检测;
每检测到N段相邻的字节码中的操作符符合预设的合并规则时,将所述N段相邻的字节码合并为基于自定义操作符的合并字节码;其中,N>1。
2.一种脚本运行方法,其特征在于,包括:
读取脚本中的如权利要求1所述的基于操作符的字节码;
根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数;
运行所述基于操作符的字节码。
3.如权利要求2所述的脚本运行方法,其特征在于,所述根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数,具体包括:
对所述基于操作符的字节码进行检测,判断每段字节码是否为预存的基于自定义操作符的无效字节码;
若是,则跳过所述无效字节码;
若否,则根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
4.如权利要求2所述的脚本运行方法,其特征在于,所述根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数,具体包括:
对所述基于操作符的字节码进行检测,判断每段字节码否为预存的基于自定义操作符的合并字节码;
若是,则根据预存的合并规则,调用所述合并字节码中的自定义操作符所对应的函数;
若否,则根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
5.一种脚本加密装置,其特征在于,包括:
添加模块,用于在原始的操作符及其函数的对应关系表中添加自定义的操作符及其对应的函数;
操作符关系表获取模块,用于对添加后的对应关系表中的各个操作符和各个函数的对应关系进行调整,获得操作符关系表;以及,
加密模块,用于根据所述操作符关系表,将脚本中的源代码编译为基于所述操作符的字节码;
所述脚本加密装置还包括:
混淆模块,用于在所述基于所述操作符的字节码中混淆基于自定义操作符的字节码;
所述混淆模块具体包括:
随机数产生单元,用于每编译为一段基于所述操作符的字节码时,产生一个对应的随机数;以及,
无效字节码插入单元,用于在检测到所述对应的随机数小于预设的阈值时,在所述字节码之后插入基于自定义操作符的无效字节码;或,
第二检测单元,用于对所述基于所述操作符的字节码进行检测;以及,
合并单元,用于每检测到N段相邻的字节码中的操作符符合预设的合并规则时,将所述N段相邻的字节码合并为基于自定义操作符的合并字节码;其中,N>1。
6.一种脚本运行装置,其特征在于,包括:
读取模块,用于读取脚本中的如权利要求1所述的基于操作符的字节码;
操作符识别模块,用于根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数;以及,
运行模块,用于运行所述基于操作符的字节码。
7.如权利要求6所述的脚本运行装置,其特征在于,所述操作符识别模块具体包括:
无效字节码判断单元,用于对所述基于操作符的字节码进行检测,判断每段字节码是否为预存的基于自定义操作符的无效字节码;
跳过单元,用于在所述无效字节码判断单元判定为是时,跳过所述无效字节码;以及,
第一调用单元,用于在所述无效字节码判断单元判定为否时,根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
8.如权利要求6所述的脚本运行装置,其特征在于,所述操作符识别模块具体包括:
合并字节码判断单元,用于对所述基于操作符的字节码进行检测,判断每段字节码否为预存的基于自定义操作符的合并字节码;
第二调用单元,用于在所述合并字节码判断单元判定为是时,根据预存的合并规则,调用所述合并字节码中的自定义操作符所对应的函数;以及,
第三调用单元,用于在所述合并字节码判断单元判定为否时,根据预存的操作符关系表,调用所述字节码中的操作符所对应的函数。
CN201610191585.9A 2016-03-30 2016-03-30 一种脚本加密方法、脚本运行方法及装置 Active CN105868589B (zh)

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 CN105868589A (zh) 2016-08-17
CN105868589B true 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)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106682460B (zh) * 2016-11-25 2019-05-31 西北大学 一种基于两次变换的代码混淆方法
CN107315930A (zh) * 2017-07-07 2017-11-03 成都恒高科技有限公司 一种保护Python程序的方法
CN108363911B (zh) * 2018-02-11 2021-10-29 西安四叶草信息技术有限公司 一种Python脚本混淆、水印的方法及装置
CN108829396B (zh) * 2018-06-15 2022-02-01 腾讯科技(深圳)有限公司 脚本编译的方法、脚本执行的方法、相关装置及系统
CN109101237A (zh) * 2018-08-01 2018-12-28 北京顶象技术有限公司 代码的加密编译方法及装置
CN109767516B (zh) * 2018-12-14 2021-06-11 汉海信息技术(上海)有限公司 日志设置和打印方法、设置和打印设备、及日志系统
CN109783160B (zh) * 2019-01-29 2022-04-26 广东九联科技股份有限公司 一种快速传送及渲染的网页文件加载系统及方法
CN110135133B (zh) * 2019-04-19 2021-08-17 佛山市微风科技有限公司 一种面向微控制器的压缩整合式源代码混淆方法及系统
US11550883B2 (en) 2020-09-08 2023-01-10 Assured Information Security, Inc. Code protection

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7493483B2 (en) * 2004-02-19 2009-02-17 International Business Machines Corporation Method to prevent vulnerability to virus and worm attacks through instruction remapping
US20120159193A1 (en) * 2010-12-18 2012-06-21 Microsoft Corporation Security through opcode randomization
CN102831342B (zh) * 2012-07-28 2016-01-06 北京深思数盾科技有限公司 一种提高安卓系统中应用程序保护强度的方法
CN103324872B (zh) * 2013-07-12 2016-04-27 上海交通大学 基于指令混淆的Android应用程序保护方法及系统
CN104573424A (zh) * 2013-10-23 2015-04-29 中国银联股份有限公司 一种应用程序保护系统和方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
对Python bytecode混淆技术的内存反汇编(3);寂涯网络;《http://www.jybase.net/ruanjianpojie/20120113749_3.html》;20120113;第1页 *

Also Published As

Publication number Publication date
CN105868589A (zh) 2016-08-17

Similar Documents

Publication Publication Date Title
CN105868589B (zh) 一种脚本加密方法、脚本运行方法及装置
US9460281B2 (en) Method of securing non-native code
US8984299B1 (en) Apparatus for code obfuscation and method thereof
CN108153518B (zh) 一种java程序反混淆方法及终端
CN103413075B (zh) 一种通过虚拟机保护java可执行程序的方法及设备
CN106326694A (zh) 一种基于C源代码的混淆的Android应用加固方法
CN108363911B (zh) 一种Python脚本混淆、水印的方法及装置
KR101234591B1 (ko) Jni를 이용한 안드로이드 난독화 방법
CA3023939C (en) Method and apparatus for dynamic executable verification
KR101521765B1 (ko) 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법
CN104866734B (zh) 一种dex文件的保护方法及装置
WO2015149214A1 (en) Method, apparatus, and computer-readable medium for obfuscating execution of application on virtual machine
CN109948308A (zh) 代码安全保护方法、装置、电子设备和计算机可读存储介质
US7036111B2 (en) Code verification system and method
Drape Intellectual property protection using obfuscation
CN110717181B (zh) 基于新型程序依赖图的非控制数据攻击检测方法及装置
CN113779578A (zh) 移动端应用的智能混淆方法和系统
Yu et al. Access control to prevent attacks exploiting vulnerabilities of webview in android OS
CN102984134B (zh) 安全防御系统
KR102567924B1 (ko) 웹 어셈블리에서의 간접호출 명령어 보호를 위한 장치 및 방법
Zhang et al. Progressive control flow obfuscation for android applications
CN103824020B (zh) 自动实现软件程序免杀的方法
Backes et al. Seamless in-app ad blocking on stock android
Banescu Characterizing the strength of software obfuscation against automated attacks
Wang et al. Field experience with obfuscating million‐user iOS apps in large enterprise mobile development

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