CN1447225A - 搅乱的源程序、源程序转换方法和设备,以及源转换程序 - Google Patents

搅乱的源程序、源程序转换方法和设备,以及源转换程序 Download PDF

Info

Publication number
CN1447225A
CN1447225A CN03107399A CN03107399A CN1447225A CN 1447225 A CN1447225 A CN 1447225A CN 03107399 A CN03107399 A CN 03107399A CN 03107399 A CN03107399 A CN 03107399A CN 1447225 A CN1447225 A CN 1447225A
Authority
CN
China
Prior art keywords
constant data
source
data
source code
target
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
Application number
CN03107399A
Other languages
English (en)
Other versions
CN1242323C (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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Publication of CN1447225A publication Critical patent/CN1447225A/zh
Application granted granted Critical
Publication of CN1242323C publication Critical patent/CN1242323C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6209Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2143Clearing memory, e.g. to prevent the data from being stolen

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

源程序转换工具511,其用被可逆的转换过程转换为难以解密的状态的替用常数数据的初始化部分,替代包含在源代码S1中的常数数据的初始化部分,并产生源代码S2,其具有从所述替用常数数据中恢复原始常数数据的反向过程的源,所述源插入到要被参考的所述常数数据之前的位置。

Description

搅乱的源程序、源程序转换方法和设备,以及源转换程序
技术领域
本发明涉及搅乱源程序的过程内容的技术,特别是用软件方法设计搅乱它的技术。
背景技术
在由软件执行其过程的信息处理系统中,一般来说,开发者用程序语言生成程序(源代码),并通过编译过程,将它翻译为机器语言的执行形式(目标)。经过这个过程所产生的结果,被叫做一般用户正常使用的软件,这个软件被保存在一般用户使用的信息处理单元的目标存储部(例如磁盘或PROM),执行时被读出并由CPU执行,因而能实现所希望的过程。
在这里,变得有必要搅乱(不可读性)过程程序的内容,以使它的过程不能被用户和含有恶意的攻击者分析。一个原因是,一般来说,软件是开发者的一种包含创造性/新发明的智力资产,而对智力所有权的侵犯,会以这样的方法形成,即经过分析,类似的操作性功能,就变得能容易地实现,并可能不支付合理的补偿而使用,等等。下面考虑另一个原因。
假定例如仅是已登记支付补偿或同意付费的合法用户能被允许执行的这样一种服务功能,已安排在个人计算机(PC)上。另一方面,如果假定,进行这种合法用户认证过程的程序的执行形式被分析过,并且为实现这个过程,已被其他人知道,通过实现并完成给出的同样的合法用户认证结果的过程,它的服务功能就会被不合法使用,而付费则被逃避,因此,用户认证/付费功能变得没有意义。由此看来,执行上述合法用户认证过程的程序内容,必须保护/隐蔽。
常规的搅乱这种程序内容的方法,是用硬件方法和软件方法,来搅乱目标的过程内容的。
用硬件方法使一般用户不能访问目标,是例如,用覆盖的方法遮掩存储部和处理部,一般用户不能除去这种覆盖,因而目标不能被读出,等等。另外,在某些情况下,采用并入这种专用设计的干扰,一旦这种覆盖被去除,存储部内的目标自动地被删除或破坏。
至于用软件技术搅乱目标内容的方法,在JP-P1998-161864A(文献1)中有所描述。在这篇文献1所述技术中,通过对源代码进行编译所得的字节代码的一部分,被加密保存在用户的计算机的磁盘中,它的解码密钥则由付费中心管理。另一方面,通过使用从付费中心请求到的解码密钥,对字节代码的加密部分解码用的解码部,以及用来解释/执行已解码的字节代码的解释程序,被装在用户的计算机上。在解码部的已解码的字节代码,被直接或通过主存储器的工作区,输送给解释程序,并被解释/执行。这就能消除已解码的字节数据存在于磁盘上,对程序内容的搅乱得以实现。
关于描述以软件技术搅乱目标内容的另一文献,有JP-P1999-259574A(文献2)。在这篇文献2中,论及制作形式的软件为图像文件的内容等,和游戏软件,加密和解码适合于利用合并在OS(操作系统)功能扩充区中的程序来进行。就是说,利用软件技术,将一个专门的隐蔽机制,并入系统管理部去管理,从而使一般用户不能容易地访问OS,并设计这样一种方案,即目标只固定地操作这个功能,一般用户难以对此分析。
如上所述,现有技术对程序内容的搅乱,处理的是目标,而对成为其基础的源代码的搅乱没有多少考虑,就有效地保护软件而论,无须多说,在目标级的搅乱是重要的;但是,在源级进行搅乱,能实现更强有力的保护。这是因为怀有恶意的人对源代码进行攻击,也是很可能发生的。
但是,即使在源级进行搅乱,如果假定同时也在目标级搅乱,那就要在从被搅乱的源代码生成目标时采取任何一种测度,这就导致开发成本上升。
发明内容
考虑到这些情况提出了本发明,它的一个目的是通过软件技术在源级实现程序内容的隐蔽。
本发明的另一目的是提供能生成被搅乱的目标的源代码,只通过编译,而完全不需要采用特殊的测度。
本发明的第一被搅乱的源程序具有这样的结构,其中:常数数据的初始化部分,以被可逆的转换过程转换为难以解密的状态的替用数据的初始化部分替代;将从所述替用常数数据恢复原始常数数据的反向过程的源,插入到在所述常数数据被参考之前的一位置。
本发明的第二被搅乱的源程序具有这样的结构,其中:包含在主程序的源代码中的常数数据的初始化部分,用被可逆的转换过程转换为难以解密的状态的替用数据的初始化部分替代;第一源从主存储器插入被参考的所述常数数据之前的位置,所述第一源执行:所述替用常数数据的初始过程,原始常数数据的恢复过程,即对上述初始化过程被执行的替用常数数据执行反向过程,和被执行所述初始化过程的替用常数数据的擦除过程;和将执行从主存储器擦除所述被恢复的常数数据的擦除过程的第二源,插入到被参考的所述被恢复的常数数据之后的位置。
在本发明的第一源程序转换方法中,被搅乱的源程序的生成是通过下列步骤:将包含在主程序的源代码中的常数数据的初始化部分,用被可逆的转换过程转换为难以解密的状态的替用数据的初始化部分替代;将从所述替用常数数据恢复原始常数数据的反向过程的源,插入被参考的所述常数数据之前的位置。在一个实施例中,常数数据放置在由用户插入主程序的源代码中的开始标记和结束标记之间,作为转换过程的目标,并且,所述反向过程的源,插入由用户插入主程序的源代码中的反向插入位置标记的位置。
在本发明的第二源程序转换方法中,被搅乱的源程序的生成是通过下列步骤:将包含在主程序的源代码中的常数数据的初始化部分,用被可逆的转换过程转换为难以解密的状态的替用数据的初始化部分替代;将第一源从主存储器插入被参考的所述常数数据之前的位置,所述第一源执行:所述替用常数数据的初始过程,原始常数数据的恢复过程,即对上述初始化过程被执行的替用常数数据进行反向转换的过程,和被执行所述初始化过程的替用常数数据的擦除过程;和从主存储器中将执行擦除所述被恢复常数数据的擦除过程的第二源,插入到已被参考的所述被恢复常数数据之后的位置。在一个实施例中,常数数据放置在由用户插入主程序的源代码中的开始标记和结束标记之间,作为转换过程的目标,将所述第一源插入由用户插入主程序的源代码中的目标实用开始位置标记的位置,和将所述第二源插入由用户插入主程序的源代码中的目标实用结束位置标记的位置。
本发明的第一源程序转换装置包括:第一装置,其用于将包含在主程序的源代码中的常数数据的初始化部分,用被可逆的转换过程转换为难以解密的状态的替用数据的初始化部分替代;和第二装置,其用于将从所述替用常数数据恢复原始常数数据的反向过程的源插入要被参考的所述常数数据之前的位置。在一个实施方案中,所述第一装置将常数数据放置在由用户插入主程序的源代码中的开始标记和结束标记之间,作为转换过程的目标,而所述第二装置将所述反向过程的所述源插入到由用户插入主程序的源代码中的反向插入位置标记的位置。
本发明的第二源程序转换装置包括:第一装置,其用于将包含在主程序的源代码中的常数数据的初始化部分,用被可逆的转换过程转换为难以解密的状态的替用数据的初始化部分替代;第二装置,其用于插入第一源,其用于执行:所述替用常数数据的初始过程,原始常数数据的恢复过程,即对上述初始化过程被执行的替用常数数据进行反向转换的过程,和被执行所述初始化过程的替用常数数据的擦除过程;将第一源从主存储器插入要被参考的所述常数数据之前的位置;和第三装置,其用于将执行擦除所述被恢复常数数据的擦除过程的第二源,从主存储器插入已被参考的所述被恢复常数数据之后的位置。在一个实施方案中,所述第一装置将常数数据放置在由用户插入主程序的源代码中的开始标记和结束标记之间,作为转换过程的目标,所述第二装置将所述第一源插入由用户插入主程序的源代码中的目标实用开始位置标记的位置,所述第三装置将所述第二源插入由用户插入主程序的源代码中的目标实用结束位置标记的位置。
在本发明中,常数数据的初始化部分,用被可逆的转换过程转换为难以解密的状态的替用数据的初始化部分替代,因此,包含源代码等的源程序规定了似乎是属于技术决窍的执行参数,使它能够在源级水平上得到保护。
从替用常数数据恢复原始常数数据的反向过程的源被插入要参考的所述常数数据之前的位置,或者执行所述替用常数数据的初始化过程和原始常数数据的恢复过程的第一源,即对上述初始化过程被执行的替用常数数据进行反向转换的过程的第一源,被插入到要被参考的所述常数数据之前的位置,因此,只利用编译而不必采用任何专门的调节,就能生成对要被搅乱的目标执行按原始计划由主源代码规定的处理过程。
另外,通过将执行把经过初始化过程的替用常数数据从主存储器中擦除过程加入第一源,以及将执行从主存储器中擦除所述被恢复常数数据的擦除过程的第二源插入被参考的被恢复常数数据之后的位置,在目标级的保护能做得更强。
附图说明
本发明的这个目的和其他目的,特征和优点,在阅读下面的详细描述和附图以后,将变得更加清楚。
图1是关于本发明第一实施例的信息处理系统的方块图;
图2是本发明第一实施例中的源代码的一个示例说明图;
图3是本发明第一实施例中的加标记的源代码的一个示例说明图;
图4是本发明第一实施例中的用于启动源程序转换工具的命令的一个示例说明图;
图5是本发明第一实施例中的源程序转换工具输出的,被搅乱的源代码的一个示例说明图;
图6是本发明第一实施例中的源程序转换工具的处理流程图;
图7是本发明第一实施例中的软件运行方的处理流程图;
图8关于本发明第二实施例的信息处理系统的方块图;
图9是本发明第二实施例中的加标记的源代码的一个示例说明图;
图10是本发明第二实施例中的源程序转换工具输出的,被搅乱的源代码的一个示例说明图;
图11是本发明第二实施例中的源程序转换工具的处理流程图;
图12是本发明第二实施例中的软件运行方的处理流程图。
具体实施方式
下面,将参考附图,描述本发明的实施例。(第一实施例)
在本发明中,出自成为保护目标的程序的代码部分(规定处理过程的部分)是不作为搅乱的目标,但程序的数据部分(规定处理中用的常数数据数据组的值的部分)的源程序数据,基本上处于一种在其中难以解密的状态。一般来说,在开发者希望密封的源程序中的数据组(常数表数据等),变成多种类型常数数据的序列,因此,在下面的说明中,所述序列被用作所要说明的搅乱目标。当然,在本发明中,不仅是由多种类型常数数据组成的序列,一种类型的常数数据也被作为搅乱目标。
应用这个实施例的一个信息处理系统的示例表示在图1中,在图1中,上半部表示软件开发方的配置,下半部表示软件运行方的配置。
参考图1。程序生成单元501以及与它相连的存储部502至505(例如磁盘单元)和输入/输出单元506提供在软件开发方。输入/输出单元506包括输入单元,例如用于由软件开发者输入数据和向程序生成单元501输入命令的键盘;以及输出数据等的显示器,它们是从程序生成单元501输出至开发者的。程序生成单元501包括源程序转换工具511和目标生成部512。
源程序转换工具511是一个工具,它从包含成为保护目标的数组的源程序生成具有包括处于已隐蔽状态的所述数组的源的源程序,并且,在信息处理单元执行时间,它至少在第一次参考所述数组以前,对处于所述已隐蔽状态的所述数组进行解码,这个源程序转换工具511具有输入部521,分析部522,密钥保存部523,对应管理部524,转换处理部525,插入替代—语句生成部526,插入替代—语句保存部527和源合成部528。并且,插入替代—语句生成部526包括数组定义—语句生成部531,反向—语句生成部532和固定形式—语句生成部533,插入替代—语句保存部527包括数组定义替代—语句保存部541,反向插入位置插入—语句保存部542和固定形式—语句保存部543。
类似这种源程序转换工具511,可通过计算机例如工作站和个人计算机,以及源转换程序实现。源转换程序,它被记录在计算机可读的记录媒体例如磁盘和半导体存储器(在图中未表示)中,在起动计算机等的时候,将它装入计算机,并且,通过控制它的计算机操作,配置源程序转换工具511的每个功能部,都能在它的计算机中生成。
另一方面,目标保存部552例如磁盘和编档自恢复型程序用的PROM,以及具有主存储器553和CPU 554的用户的计算机551提供在软件用户方。用户的计算机551是一般的个人计算机,便携式信息终端等。
下面,将详细说明本实施例各部的功能和操作。首先,将说明软件开发方的操作。
开发者通过高级编程语言开发规定的最初希望操作的软件源代码S。下一步,他/她生成源程序,这个源程序具有预定的保护目标指令标记,插入它的源代码中希望密封的序列的定义部分的一个位置,指示上述位置确定的序列是保护目标,这个源程序还具有预定的反向功能插入位置标记,该标记被插入在首次参考的它的序列之前的位置,指示上述位置是反向功能的插入位置。希望搅乱的序列数目是可选择的,万一对多个序列进行搅乱,保护目标指令标记和反向功能插入位置标记,则逐个序列地插入。此后,为了说明的方便,要密封的序列数目取作(1),把这个序列作为序列A。如上所述的标记可使用一般的文本编辑程序完成。用这种方法生成的加标记的源代码考虑为S1。源代码S1被保存作为输入文件,从源程序转换工具511输入至存储部502。
用高级编程语言C作为例子,开发者开发的源代码S的一个示例表示在图2中,开发者标记这个源代码S用的源程序S1的一个示例,表示在图3中。伴随由五个整数元素组成的数组data 1[]的初始化定义部分,和参考这个数组的代码部分,被包括在图2的源代码S中,在图3的示例中,保护目标指令标记563被插入数组data 1[]的定义部分,反向功能插入位置标记564被插入首次参考的数组data 1[]之前的位置。这个示例的保护目标指令标记563由指示保护目标开始的开始标记561和指示其结束的结束标记562构成,开始标记561包括编码符号名565。由于编码符号名565用作转换后数组标识符,所以这个使用,使它在执行转换过程的文件(源代码)中变成是唯一的。相同的编码符号名565也用于相应的反向功能插入位置标记564,以使一个标记相应于另一标记。
通过将上述的标记源代码S1输入到源程序转换工具511,自动执行的过程是:(1)执行数据内数组A定义部分的可逆的转换过程,以便得到它的结果数组A1;和(2)将执行反向操作的代码插入到使用数组A之前的位置,用这个插入导出反向功能,以及输出转换的源代码S2。
所谓可逆的转换过程是这样的f(),就执行了某个数组A的转换过程f()所得到的序列A1=f(A)而论,这个找到g(A1)=A的反向过程是存在的。在这里,作为转换过程f(),输入数据和输出的数据的多少是相同的。可以采用简单的方法,例如,通过每个数组元素计算表达式,在相邻元素伙伴之间进行计算,序列中顺序的颠倒例如顺序的搅乱,取隐蔽的常数和序列的第一元素的计算结果作为转换A1后的第一元素,进一步取它的和序列A的第二元素的计算结果,作为在转换A1之后序列的第二元素等。另外,可以看出,这种处理过程的目的是由于难以使原始序列恢复/解码,更实际的是因为利用转换内容的一对加密处理和解码处理,进行推断/分析是困难的,因为作为一对转换处理和反向处理是较为复杂的。作为加密算法的例子,例如DEC等是众所周知的,通过采用某个保密密钥的预定计算方法,顺序地进行计算,可从序列A求出序列A1=f(A,key),同样,采用基于相同保密密钥对序列A1进行解码计算,可求出A1=g(A1,key)。所得到的序列A1,是一个由与序列A相同数目和相同数据类型组成的序列。
图4表示开发者从输入/输出单元506输入一个命令的示例,以使源程序转换工具511执行标记的源代码S1。在图4中,protect_conv是使源程序转换工具511的名称,sample1.c是编排源代码S1的输入文件的名称,和sample2.c是输出转换结果的源代码S2的输出文件的名称。另外,(PROTECT KEY=1234567)指示由外部选择给出的加密密钥。
通过使源程序转换工具511执行加标记的源代码S1所得到的源代码S2的一个示例,表示在图5中。在图5中,数组data 1p,是一个将可逆的转换f(A,key)连同隐蔽的加密密钥protect_key=1234567一起,加到原始数组data 1以后所得到的数组,函数deprotect()行中的描述,是用于指示通过利用数组data 1p中的密钥protect_key=1234567,做反向的操作g(A1,key),将结果放置到数组data 1。描述反向函数说明方向的代码和表征,在预排列的源文件deprotect_func.c中的主体过程由#include“deprotect_func.c”装入。
图6是表示源程序转换工具511的处理过程示例的流程图。此后,将参考图1和图3至图6详细地源程序转换工具511的功能的操作。
当源程序转换工具511被如图4所示的命令起动时,输入部521并入它的命令内容(步骤S501)。出自命令的并入内容,输入文件名传送至分析部522和源合成部528,输出文件名传送至源合成部528,加密密钥传送至密钥保存部523,并且分别都将它们保存起来。
分析部522从存在于存储部502中的输入文件名的文件中,逐个语句地顺序读出图3所示加标记的源代码S1(步骤S502),以便分析它的语句(步骤S503)。作为分析结果,如果在它的语句中存在保护目标指令标记563(步骤S504中的yes),一组转换前数组标识符[data 1],一组转换后数组标识符[data 1P],它的类型(int),和元素数(5),被保存在对应管理部524(步骤S505),并且,由保护目标指令标记563指示的数组标识符(data 1),它的类型(int)和元素值(10,20,30,40,50),被传送至转换处理部525。转换处理部525通过预先建立的加密技术和保存在密钥保存部523中的加密密钥,使用转换f(),对序列的每个元素进行转换和解密,并将具有转换之后元素值的转换后序列,连同数组标识符(data 1)一起输出至数组定义—语句生成部531(步骤S506)。数组定义—语句生成部531利用从转换处理部525传送来的数组标识符(data 1)检索对应管理部524,以便得到转换后数组标识符(data 1p)和类型(int),由此生成两个语句,一个是用于对图5第四行所示转换后数组(data 1p)进行定义和初始化的语句,另一个是用于对表图5第五行所示转换前数组(data 1)进行定义的语句,以及从转换处理部525传送来的数组标识符(data 1)和转换后数组元素值(步骤S507),并将这两个语句保存到存储器的数组定义替代一语句保存部541,作为定义替代语句(步骤S508)。
如果分析的语句是一个包括反向功能插入—位置标记564的语句(步骤S509的‘是’),分析部522将包括在它的标记中的转换后数组标识符(data 1p)传送至反向—语句生成部532。反向—语句生成部532用它的数组标识符(data 1p)检索对应管理部524,以便得到转换前数组标识符(data 1),进一步从密钥保存部523得到加密密钥,以便生成反向功能的存取语句,其中转换前和转换后数组标识符以及密钥,作为图5第九行所示的参数(步骤S510),并将反向插入位置插入—语句保存部542中的这个语句保存到存储器中作为插入反向位置的语句(步骤S511)。
在数组定义—语句生成部531的过程完成,如果保护目标指令标记包含在分析语句中之后,在反向—语句生成部532的过程完成,如果反向功能插入位置指令标记包含在分析语句中之后,或者如果不包含标记,则立即,由分析部522调查是否有剩余语句存在于输入文件中(步骤S512),如果还有语句留在输入文件中(步骤S512的‘否’),则重覆下一语句的类似处理过程。如果包含最后语句的所有语句的执行过程被完成(步骤S512的‘是’),固定形式—语句生成部533就起动。
固定形式—语句生成部533生成:图5的第一行语句,用于并入指定反向函数说明性方向的源文件deprotect_func.c,该反向函数是反向—语句生成部532生成的,和主体代码;图5的第三行语句,用于指示存储在密钥保存部523中的加密密钥;还有固定—形式—方法语句,例如第二行所示的注释语句,并将它们保存在固定形式—语句保存部543中(步骤S513)。
当由固定形式—语句生成部533执行的过程完成时,分析部522起动源合成部528。源合成部528合成源代码S1和保存在各个保存部541和543中的源,以生成源代码S2(步骤S514)。具体地说,将保持在固定形式—语句保存部543中的语句,输出到存储部503中的输出文件,存储部503有输入部521通知的输出文件名,下一步,按它的标题语句开始的顺序,从输入部521通知的输入文件,输入加标记的源代码S1,并且,如果目标保护指令标记和反向函数插入位置指令标记不包含在它的语句中,则按现实情况向目标文件输出它的语句;如果目标保护指令标记包含在它的语句中,则输出保持在数组定义替代—语句保存部541的语句,代替它的语句;如果反向功能插入位置指令标记包含在它的语句中,则输出保持在反向插入位置插入—语句保存部542的语句,代替它的语句。因此,图5所示的源代码S2在输出文件中生成。
如从图5的源代码S2明显地看到的,另一常数数据{357,6031,73,651,8267}代替图2所示原始源代码S1中的常数数据{10,20,30,40,50},要知道希望保护的原始常数数据是不可能的,若不分析反向函数的计算方法和得到用于解码的保密密钥的话。因此,能在源级层次上保护源程序中的常数数据。
下面,将说明应用于用户计算机的,由上述生成的源代码S2生成目标的事例过程。
倘若从源代码S2生成目标,开发者起动目标生成部512。目标生成部512根据编档在存储部503中的源代码S2,和这个源代码S2的#include语句指示的存储部504中的源文件deprotect_func.c,借助于使用编译程序的编译操作,生成目标(执行形式)E2。以这种方法生成的目标E2具有,通过目标自身拥有的反向过程,在它的执行时间,将它自身目标中的转换位置恢复为原始内容的功能,因而在本发明书中,它被称为自恢复型目标。
这只是与上述data 1p[]={357,6031,73,651,8267}对应的数据数组,放置在保持该目标E2中的常数数据的数据部,不可能知道希望保护的原始数据数组data 1[5]{10,20,30,40,50},不分析反向函数的计算方法和得到解码所使用的保密密钥protect_key。因此,程序的数据数组data 1的保护同样能在目标级得以实现。
以这种方法开发的自恢复型目标E2可传送至用户方,并保持在用户的计算机551的目标保存部552。但是,如何传送和编档,无需限于直接在目标保存部552中编档的形式,也可以有在分配给用户的CD-ROM和软磁盘中编档的形式,或者采用例如通过网络传送文件的方法,把它分配给用户,然后用户在目标保存部552例如硬盘进行编档。
下面,将参考图1和表示在计算机应用方的过程流程图7,说明自恢复型目标E2在用户的计算机55 1的目标保存部552中编档时的操作。
当自恢复型目标E2的启动请求由用户的计算机551发出(步骤S52 1)时,以与通常应用程序相同的方式,将自恢复型目标E2通过上述用户计算机的OS,从目标保存部552装入主存储器553(步骤S522),控制被移至它的执行开始点。因此,自恢复型目标E2被执行(步骤S523)。在这个执行期间,在第一次参考为搅乱而进行数据转换的序列A1之前,执行序列A1的反向过程g(A1,key),将它恢复到原始序列A(步骤S524)。因此,按原来的计划,由源代码S规定的过程被执行。上述过程是在用户程序中数据的正常操作范围内,依赖于OS的部分几乎不存在。所以,能保护独立的平台形式的目标。
依照这样的实施例,特别希望保护的源程序中的数据部分可通过软件方式的技术来隐蔽。只要通过编译生成的软件程序,被搅乱了的目标能够生成,也能够保护独立的平台形式的目标。
另外,加密过程中使用的密钥protect_key能够在程序中进行描述;但是,作为另一种方法,不把它置于执行形式,而是在执行时由外部给出,保护的强度可增强。
[第二实施例]
本实施例基本上与第一实施例相同,其提供的源代码能够减小被分析的危险,通过使数组[data 1]应被保护的时间减至最小,更安全地进行目标级的保护,它的转换后数组[data 1p]保存在主存储器。
本实施例应用的信息处理系统的一个示例表示在图8中。在图8中,上半部表示软件开发方的配置,下半部表示软件应用方的配置。
参考图8,程序生成单元601,以及连接到这里的存储部602至605(例如磁盘单元)和输入/输出部606提供在软件开发方。输入/输出部606包括:输入单元例如键盘,用于由软件开发者输入数据和命令至程序生成单元601;和显示器,用于输出从程序生成单元601向开发者输出的数据等。另外,程序生成单元601还包含源程序转换工具611和目标生成部612。
源程序转换工具611是一个工具,它从包含成为保护目标的数组的源程序,生成具有包括处于隐蔽状态的所述数组的源的源程序;并且,在信息处理单元的执行时间,它至少在参考所述数组之前,对处于已被隐蔽的所述状态的所述数组进行解码;以及使转换前和后数组在主存储器的生存期减至最小。这个源程序转换工具611具有输入部621,分析部622,密钥保存部623,对应管理部624,转换处理部625,插入替代—语句生成部626,插入替代—语句保存部627和源合成部628。还有,插入替代—语句生成部626包括转换前数组定义—语句生成部631,转换后数组初始化—语句生成部632,反向—语句生成部633,转换前数组区破坏函数生成部634,固定形式—语句生成部635和转换后数组区破坏函数生成部636;插入替代—语句保存部627包括数组定义替代—语句保存部641,数组运行开始—时间插入—语句保存部642,数组运行结束—时间插入—语句保存部643和固定形式—语句保存部644。
类似于这样的源程序转换工具611,可用计算机例如工作站和个人计算机,以及源转换程序实现。记录在计算机可读记录媒体,例如磁盘和图中未示的半导体存储器的源转换程序,在启动计算机等的时间被装入计算机,通过控制计算机的操作,构成源程序转换工具6 11的每个功能部在计算机中生成。
另一方面,用于编档自—恢复—型程序的目标保存部652例如磁盘和PROM,以及具有主存储器653和CPU 654的用户的计算机651提供在软件用户方。用户的计算机651通常是个人计算机,便携式信息终端等。
下面,将详细地说明本实施例的各个部的功能和操作。首先,将说明软件开发方的操作。
开发者用高级语言开发一个表示原来希望操作的软件的源代码S。下一步,他/她分别备制的源程序有:预定的保护目标指令标记,其插入希望密封的源代码S序列的定义部分的位置,指示由上述位置定义的序列是保护目标;预定的目标运行开始位置标记,其插入被参考的序列之前的位置,指示上述位置是序列的运行开始位置;和预定的目标运行结束位置标记,其插入被参考的序列之后的位置,指示上述位置是序列的运行结束位置。希望密封的序列数目是可选择的,倘若进行多个序列的搅乱,保护目标指令标记,目标运行开始位置标记和目标运行结束位置标记逐个序列地插入。此后,为了便于说明,密封序列的数目取为(1),把它的序列作为序列A。上述标记可用通常的文本编辑来制作。以这种方法生成的标记源代码作为S1。源代码S1作为输入文件,从源程序转换工具611保存到可参考的存储部602。
如果开发者用高级编程语言C开发的源代码S1是类似于第一实施例的图2所示的代码,那末,开发者用S1标记源代码S的源代码S 1的一个示例表示在图9。在图9示例中,分别将目标保护指令标记663插入至数组data 1[]的定义部分,目标运行开始—位置标记664插入进行被参考的数组data 1[]之前的位置,和目标运行结束—位置标记666插入到被参考的数组data 1[]之后的位置。这个示例的目标保护指令标记663由指示目标开始的开始标记661和指示它的结束的结束标记662组成,而开始标记661包括编码符号名665。由于编码符号名665用作转换后数据标识符,所以这个名称的使用,在执行转换过程的文件(源代码)中,变成是唯一的。编码符号名665用于相应的目标运行开始—位置标记664和目标运行结束—位置标记666,以使一个标记与另一个标记相对应。
将上述加标记源代码S1输入源程序转换工具611,过程自动执行:(1)进行数据定义部分的数组A的可逆的转换过程,以获得它的结果数据;(2)在所用的数组A之前,插入执行反向操作以恢复数组A的代码,并在反向计算之后,通过清零或置换以随机数等,撤消(擦除)数组A1区;和(3)将通过清零或以随机数等替代,撤消(擦除)数组A区,所用的代码,插入数组A之后的位置,和输出被转换的源代码S2。这个可逆的转换过程,与第一实施例的相同。
倘若要起动源程序转换工具611执行加标记的源代码S1,开发者从输入/输出单元506输入如图4中所示的命令,这类似于第一实施例。用这种命令使源程序转换工具611执行加标记的源代码S1,所得到的源代码S2的一个示例,表示在图10中。在图10中数组data 1p是将可逆的转换f(A,key)和保密密钥protect_key=1234567一起,加到原始数组data 1以后,所得到的数组;函数deprotect()行中的说明,是指令利用数组data 1p的密钥保护密钥=1234567,进行反向的操作g(A1,key),将结果置入数据data 1。这个用来描述反向函数的说明性方向和主体过程的代码,在预先设计的源文件deprotect_func.c中规定,并装载为#include“deprotect_func.c”。到这一步,第二实施例与第一实施例相同。往下int data 1p[5]={357,6031,73,651,8267}是一个语句,其中data 1p由自动数组的初始启动程序以C程序语言描述。函数protect_cleanp(data 1p)行中的说明,是指令通过清零或以随机数等替代,在对data 1p的数组反向计算之后,消除data 1p的数组,类似地,函数protect_cleanup(data 1p)行中的说明,是指令通过清零或以随机数等替代,在data 1的数组最后使用之后,消除data 1的数组。这个用来描述破坏函数的说明性方向的主体过程的代码,在预先设计的源文件deprotect_func.c中规定,并装载为#include“deprotect_func.c”。
图11表示源程序转换工具611的过程示例的流程图,以后,将参考图4和图8至图11详细地说明源程序转换工具611的功能和操作。
当源程序转换工具611由如图4所示的命令启动时,输入部621输入命令的内容(步骤S601)。在输入命令内容之后,输入文件名传送至分析部622和源合成部628,输出文件名传送至源合成部628,加密密钥传送至密钥保存部623,并分别将它们都保存起来。
分析部622从保存在存储部602的输入文件名的文件中逐个语句地读出如图9所示的标记源代码S1(步骤S602),以便分析它的语句(步骤S603)。作为分析结果,如果目标保护指令标记663是存在在语句中(步骤S604的‘是’),则将一组转换前数据标识符[data 1],转换后数据标识符[data 1p],它的类型[int],元素数目[5],和一列元素值{10,20,30,40,50},保存到相应的对应管理部624(步骤S602),由目标保护指令标记663指示的数组标识符[data 1]传送至转换前数组定义—语句生成部631。转换前数组定义—语句生成部631用传送的数组标识符[data 1]检索对应管理部624,以获得数组的类型和元素数目的信息,生成图10第四行所示的转换前数组[data 1]的定义语句(步骤S606),并将它保存到数组定义替代—语句保存部641存储器中,作为数组定义替代语句(步骤S607)。
如果被分析的语句是包括目标运行开始—位置标记664的语句(步骤S608中的‘是’),则分析部622将它的标记指示的转换后数据标识符[data 1p]传送至转换处理部625。转换处理部625用后[data 1p]检索对应管理部624,以便得到数组的类型[int],元素数[5],和元素值[10,20,30,40,50],通过预先建立的加密技术和保存在密钥保存部623中的加密密钥,利用转换f(),转换和加密序列的每个元素,并将通过同时放置转换后元素值[357,6031,73,651,8267]而得的转换后序列,连同数组标识符[data 1p]一起,传送至转换后数组初始化—语句生成部632(步骤S609)。转换后数组初始化—语句生成部632,用从转换处理部625传送来的数组标识符[data 1p],检索对应管理部624,以获得数组的类型[int]和元素的数目[5],并根据数组标识符[data 1p],和从转换处理部625传送来的转换后数组元素值[357,6031,73,651,8267],生成对图10第8行所示的转换后数组[data 1p]进行定义和初始化的语句,将它传送至反向—语句生成部633(步骤S610)。反向—语句生成部633,用传送的语句中的数组标识符[data 1p],检索对应管理部624,以获得转换前数据标识符[data 1],进一步从密钥保存部623得到加密的密钥,生成转换函数的存取语句,其中,转换前和转换后的数组标识符和密钥,作为图10第9行所示的参数,并将它连同转换后数组初始化语句,一起传送至转换后数组区破坏函数生成部636(步骤S611)。转换后数组区破坏函数生成部636取用转换后数据标识符作为参数,如图10中第10行所示,以生成为破坏转换后数组data 1p区用的转换后数组区破坏函数的访问语句(步骤S612),并将这个函数的访问语句,转换后数组初始化语句,和从反向—语句生成部633传送来的反向函数访问语句保存起来,作为数组运行开始—时间插入—语句保存部642中的数组运行开始时间插入语句(步骤S613)。
如果被分析的语句是包含目标运行结束—位置标记666(步骤S614中的‘是’),分析部622就以它的标记指示的转换后数据标识符[data 1p],检索对应管理部624,以获得转换前数据标识符[data 1],取用转换前数据标识符作为参数,如图10中第13行中所示,生成转换前数组区破坏函数的访问语句,以消除转换前数组data 1(步骤S615),并将该函数的这个访问语句保存在数组运行结束—时间插入—语句保存部643中,作为数组运行结束—时间插入语句(步骤S616)。
在转换前数组定义—语句生成部631的过程完成之后,如果目标保护指令标记包含在被分析的语句中,则在转换后数组区破坏函数生成部636的过程完成之后,如果目标运行开始—位置标记包含在被分析的语句中,则在转换前数组区破坏函数生成部634的过程完成之后,如果目标运行结束—位置包含在被分析语句中,或者直接地不包含标记,分析部622调查是否有剩余的语句存在于输入文件中(步骤S617),如果它的语句保留在输入文件中(步骤S617中的NO),则对下一语句重复同样的过程。如果对全部语句包括最后一个语句的处理过程执行完毕(步骤S617中的yes),则固定形式—语句生成部635的过程被启动。
固定形式—语句生成部635生成图10的第一行,合并规定说明性方向的源文件deprotect_func.c和反向函数的主体,以及说明性方向和破坏函数的主体,图10的第3行语句,是指示保存在密钥保存部623中的保密密钥,除此之外,固定形式方式语句例如注释语句,表示在第2行,并且,将它们保存在固定形式—语句保存部644中(步骤S618)。
当由固定形式—语句生成部635执行的过程完成时,分析部622启动源合成部628。源合成部628综合源代码S1和保存在各个保存部641至644的源,产生源代码S2(步骤S619)。具体地说,它向存储部603中具有由输入部621通知的文件名的输出文件,输出保存在固定形式—语句保存部644中的语句,然后从输入部621所通知的以其标题语句开始排序的输入文件中,输入标记源代码S1,并按现实情况,如果目标保护指令标记,和目标运行开始和结束标记未包含在它的语句中,则向输出文件输出它的语句,如果目标运行开始—位置标记包含在它的语句中,则以保存在数组运行开始—时间插入—语句保存部642中的语句代替它的语句,如果目标运行结束—时间插入—语句标记包含在它的语句中,则以保存在数组运行结束—时间插入—语句保存部643中的语句代替它的语句。因此,图10表示的源代码被生成在输出文件中。
从图10的源代码S2可以看出,另一常数数据{357,6031,73,651,8267}代替了在图2中所示原始源代码S1中的常数数据{10,20,30,40,50},不可能知道希望保护的原始常数数据{10,20,30,40,50},如果不去分析反向功能的计算方法,并获得解码时用的保密密钥protect_key的话。从而,能够在源级别的层次上,保护在程序中的常数数据。
下面将说明从以上述方法产生的源代码S2生成目标,由用户的计算机运行的过程。
如果从源代码S2生成目标,开发者启动目标生成部612。目标生成部612通过编译程的编译操作,从编档在存储部603的源代码S2,生成自恢复型目标E2(执行形式),以及存储部604中由这个源代码S2的#inclde语句指令的源文件deprotect_func.c。在这个实施例中,数组data 1p用C程序语言说明的自动数组的初始化启动程序来描述,因而与此相应的数据数组,不放在保存常数数据的数据部中,建立数组初始化的代码被生成。因此分析变得比第一实施例更为困难。还有在执行deprotect(),数组data 1被用于建立数组数据之后,它就被破坏,数组data 1在参考其全部之后,也以同样方法被破坏。这就使数据组data 1应被保护时间,以及变为其计算的基础的原来的数组data 1p在存储器存在的时间减少,降低被分析的危险,程序中的更强的保护得以实现。
以这种方法开发的自恢复型目标E2,被保存在用户的计算机651的目标保存部652中,与第一实施例类似。
下面将参考图8和图9表示的软件使用方的处理流程,解释自恢复型目标E2在用户的计算机651和目标保存部652中编档的操作。
当自恢复型目标E2的启动请求出现在用户的计算机651上时(步骤S631),自恢复型目标E2,通过上述用户的计算机651的OS(类似于通用应用程序),从目标保存部652装载到主存储器653(步骤S632),控制被偏移至那里的执行开始点。因而自恢复型目标E2被执行(步骤S633)。在这个执行期间,序列A1的初始化在参考原始序列之前进行(步骤S634),然后对它的序列A1执行反向过程g(A1,key),以恢复原始序列A(步骤S635),然后,作为计算基础的序列A1,被破坏函数从主存储器653中擦除(步骤S636),在这些都完成之后,参考被恢复的数组A(步骤S637)。在数组A的最后使用之后,数组A被破坏函数从主存储器653中擦除(步骤S638)。因此,按原来的计划,由源代码S规定的过程被执行,上述过程是在用户程序的正常操作范围内,依赖于OS的部分几乎不存在。
按照这样的实施例,希望保护的源程序中的数据部分,特别能通过软件技术而被隐蔽。还有,只要编译所生成的软件程序,被搅乱的目标就能生成,也能执行独立平台形式的目标。另外,数组应当保护的时间和它的数组在转换之后存在于主存储器的时间,被减至最少,因而被分析的危险减少,能变成更强的保护。
除此以外,在加密过程中使用的密钥protect_key也能在程序中描述,但是,作为另一种方法,不把它置于执行形式,而是在执行时由外部给出,保护的强度可增强。
根据本发明,如上所述,源程序包括常数数据等等,它规定似乎是属于技术决窍的执行参数,所以源程序能在源级上被保护。这是因为被以可逆的转换过程转换为难以解密的状态的替用数据的初始化部分,在源代码上替代了常数数据的初始化部分。
同时,只需要编译而不必采用任何专门测度,源代码就能生成希望搅乱的目标,它执行由主源代码按原来的计划规定的过程,是能实现的。这是因为从替用常数数据恢复原始常数数据的反向过程的源,插入被参考的常数数据之前的位置,或者实现所述替用常数数据的初始化过程,和通过对已进行上述初始化过程的替用常数数据,执行反向过程,而实现原始常数数据的恢复过程,所用的第一源,插入被参考的常数数据之前的位置。
此外,能获得较强的对象级保护的源代码。这是因为源被加入执行下列过程:在已做过初始化的替用常数数据被用于反向过程之后,将它从主存储器中擦除,和在参考过已恢复的常数数据之后,将它的已恢复的常数数据,从主存储器擦除,因而在目标执行时,应当保护的常数数据和变成它的生成基础的替用常数数据,在主存储器中存在的周期被缩短。
还有,在本发明中,如果开发者安排的源代码,具有由预定标记指示的常数数据,它被当作保护的目标,那么,反向函数的插入位置,和由预定标记指示的目标初始化开始和结束位置,由转换过程生成替用常数数据,将它插入至源,以及反向函数和破坏函数的插入,等等,都被执行,被搅乱的源代码自动地生成,因此,与生成被搅乱的源代码有关的开发者的人力,工时和制造费用,都会减少,产生缺陷的可能性也会降低。

Claims (16)

1.一种被搅乱的源程序,其特征在于包括:
替用常数数据的初始化部分,其处于被可逆的转换过程转换的难以解密的状态,其替代常数数据的初始化部分,和
其中,从替用常数数据中恢复原始常数数据的反向过程的源被插入在要被参考的所述常数数据之前的位置。
2.一种被搅乱的源程序,其特征在于:
替用常数数据的初始化部分,其处于被可逆的转换过程转换的难以解密的状态,其替代包含在主程序的源代码中的常数数据的初始化部分,和
其中,从主存储器中,将第一源,其用于执行:所述替用常数数据的初始化过程,原始常数数据的恢复过程,即对上述初始化过程被执行的替用常数数据执行反向过程,以及将被执行所述初始化过程的替用常数数据的擦除过程,插入被参考的所述常数数据之前的位置,和
其中,从主存储器中,将执行擦除所述被恢复的常数数据的擦除过程的第二源,插入被参考的所述被恢复的常数数据之后的位置。
3.一种源程序转换方法,其特征在于包括步骤:
用被可逆的转换过程转换为难以解密的状态的替用常数数据的初始化部分,替代包含在主程序的源代码中的常数数据的初始化部分;和
将从所述替用常数数据恢复原始常数数据的反向过程的源,插入到要被参考的所述常数数据之前的位置。
4.根据权利要求3所述的源程序转换方法,其特征在于:
将常数数据放置在由用户插入主程序的源代码中的开始标记和结束标记之间,作为转换过程的目标;和将反向过程的源插入到由用户插入主程序的源代码中的反向插入位置标记的位置。
5.一种源程序转换方法,其特征在于包括步骤:
用被可逆的转换过程转换为难以解密的状态的替用常数数据的初始化部分,替代包含在主程序的源代码中的常数数据的初始化部分;
将第一源从主存储器插入到要被参考的所述常数数据之前的位置,所述第一源用于执行:所述替用常数数据的初始化过程,原始常数数据的恢复过程,即对上述初始化过程被执行的替用常数数据进行反向转换的过程,和被执行所述初始化过程的替用常数数据的擦除过程;以及
将执行擦除所述被恢复的常数数据的擦除过程的第二源,从主存储器插入到被参考的所述被恢复的常数数据之后的位置。
6.根据权利要求5所述的源程序转换方法,其特征在于进一步包括步骤:
将常数数据放置在由用户插入主程序的源代码中的开始标志和结束标记之间,作为转换过程的目标;
将所述第一源插入由用户插入主程序的源代码中的目标使用开始位置标记的位置;和
将所述第二源插入由用户插入主程序的源代码中的目标使用结束位置标记的位置。
7.一种源程序转换装置,其特征在于包括:
第一装置,其用被可逆的转换过程转换为难以解密的状态的替用常数数据的初始化部分,替代包含在主程序的源代码中的常数数据的初始化部分;以及
第二装置,其将从所述替用常数数据中恢复原始常数数据的反向过程的源,插入到要被参考的所述常数数据之前的位置。
8.根据权利要求7所述的源程序转换方法,其特征在于:
其中,所述第一装置是这样的装置,其将常数数据放置在由用户插入主程序的源代码中的开始标志和结束标记之间,作为转换过程的目标;和
其中,所述第二装置是这样的装置,其将反向过程的源插入到由用户插入主程序的源代码中的反向插入位置标记的位置。
9.一种源程序转换装置,其特征在于包括:
第一装置,其用被可逆的转换过程转换为难以解密的状态的替用数据的初始化部分,替代包含在主程序的源代码中的常数数据的初始化部分;
第二装置,其将第一源从主存储器插入到要被参考的所述常数数据之前的位置,所述第一源执行:所述替用常数数据的初始化过程,原始常数数据的恢复过程,即对上述初始化过程被执行的替用常数数据进行反向转换的过程,和被执行所述初始化过程的替用常数数据的擦除过程;以及
第三装置,其将执行擦除所述被恢复的常数数据的擦除过程的第二源,从主存储器插入到被参考的所述被恢复的常数数据之后的位置。
10.根据权利要求9所述的源程序转换装置,其特征在于:
其中,所述第一装置是这样的装置,其将常数数据放置在由用户插入主程序的源代码中的开始标志和结束标记之间,作为转换过程的目标;
其中,所述第二装置是这样的装置,其将所述第一源插入由用户插入主程序的源代码中的目标使用开始位置标记的位置;和
其中,所述第三装置是这样的装置,其将所述第二源插入到由用户插入主程序的源代码中的目标使用结束位置标记的位置。
11.一种源转换程序,其特征在于它使计算机运行作为:
第一装置:用被可逆的转换过程转换为难以解密的状态的替用常数数据的初始化部分,替代包含在主程序的源代码中的常数数据的初始化部分;和
第二装置:将从所述替用常数数据中恢复原始常数数据的反向过程的源,插入到要被参考的所述常数数据之前的位置。
12.根据权利要求11所述的源转换程序,其特征在于:
其中,所述第一装置是这样的装置,其将常数数据放置在由用户插入主程序的源代码中的开始标记和结束标记之间,作为转换过程的目标;和
其中,所述第二装置是这样的装置,其将所述反向过程的所述源插入到由用于插入主程序的源代码中的反向插入位置标记的位置。
13.一种源转换程序,其特征在于它使计算机运行作为:
第一装置:用被可逆的转换过程转换为难以解密的状态的替用常数数据的初始化部分,替代包含在主程序的源代码中的常数数据的初始化部分;
第二装置:其将第一源从主存储器插入到要被参考的所述常数数据之前的位置,所述第一源执行:所述替用常数数据的初始化过程,原始常数数据的恢复过程,即对上述初始化过程被执行的替用常数数据进行反向转换的过程,和被执行所述初始化过程的替用常数数据的擦除过程;以及
第三装置:将执行擦除所述被恢复的常数数据的擦除过程的第二源,从主存储器插入到被参考的所述被恢复的常数数据之后的位置。
14.根据权利要求13所述的源转换程序,其特征在于:
其中,所述第一装置是这样的装置,其将常数数据放置在由用户插入主程序的源代码中的开始标记和结束标记之间,作为转换过程的目标;
其中,所述的第二装置是这样的装置,其将所述第一源插入到由用户插入主程序的源代码中的目标使用开始位置标记的位置;和
其中,所述的第三装置是这样的装置,其将所述第二源插入到由用户插入主程序的源代码中的目标使用结束位置标记的位置。
15.一种记录媒体,其中存有被搅乱的源程序,其特征在于:
所述被搅乱的源程序包括:
用被可逆的转换过程转换为难以解密的状态的替用常数数据的初始化部分,替代常数数据的初始化部分;和
将从所述替用常数数据中恢复原始常数数据的反向过程的源,插入到要被参考的所述常数数据之前的位置。
16.一种记录媒体,其中存有被搅乱的源程序,其特征在于:
所述被搅乱的源程序包括:
用被可逆的转换过程转换为难以解密的状态的替用常数数据的初始化部分,替代包含在主程序的源代码中的常数数据的初始化部分;
其中,将第一源从主存储器插入到要被参考的所述常数数据之前的位置,所述第一源执行:所述替用常数数据的初始化过程,原始常数数据的恢复过程,即对上述初始化过程被执行的替用常数数据进行反向转换的过程,和被执行所述初始化过程的替用常数数据的擦除过程;和
其中,将执行擦除所述被恢复的常数数据的擦除过程的第二源,从主存储器插入到被参考的所述被恢复的常数数据之后的位置。
CNB031073999A 2002-03-25 2003-03-25 源程序转换方法和装置 Expired - Fee Related CN1242323C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2002082931 2002-03-25
JP2002082931A JP2003280754A (ja) 2002-03-25 2002-03-25 隠蔽化ソースプログラム、ソースプログラム変換方法及び装置並びにソース変換プログラム

Publications (2)

Publication Number Publication Date
CN1447225A true CN1447225A (zh) 2003-10-08
CN1242323C CN1242323C (zh) 2006-02-15

Family

ID=27800400

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB031073999A Expired - Fee Related CN1242323C (zh) 2002-03-25 2003-03-25 源程序转换方法和装置

Country Status (4)

Country Link
US (1) US20030188187A1 (zh)
EP (2) EP1349036A3 (zh)
JP (1) JP2003280754A (zh)
CN (1) CN1242323C (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111538962A (zh) * 2020-03-18 2020-08-14 西安电子科技大学 程序控制流混淆方法、系统、存储介质、云服务器及应用

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100568228B1 (ko) * 2003-05-20 2006-04-07 삼성전자주식회사 고유번호를 이용한 프로그램 탬퍼 방지 방법과 난독처리된 프로그램 업그레이드 방법, 상기 방법을 위한 장치
GB2405958A (en) * 2003-08-20 2005-03-16 Macrovision Europ Ltd Code obfuscation and controlling a processor by emulation
US7591021B2 (en) * 2003-09-05 2009-09-15 Microsoft Corporation Object model document for obfuscating object model therein
US7363620B2 (en) * 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions for application program obfuscation
US7424620B2 (en) * 2003-09-25 2008-09-09 Sun Microsystems, Inc. Interleaved data and instruction streams for application program obfuscation
US8220058B2 (en) * 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7415618B2 (en) * 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
US20050069138A1 (en) * 2003-09-25 2005-03-31 Sun Microsystems, Inc., A Delaware Corporation Application program obfuscation
US7353499B2 (en) * 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
US8694802B2 (en) * 2004-04-30 2014-04-08 Apple Inc. System and method for creating tamper-resistant code
US7841009B1 (en) * 2004-07-09 2010-11-23 Angel Secure Networks System and method for defending against reverse engineering of software, firmware and hardware
EP1873676B1 (en) * 2005-03-25 2013-11-20 Panasonic Corporation Program converting device, secure processing device, computer program, and recording medium
JP4850830B2 (ja) * 2005-06-01 2012-01-11 パナソニック株式会社 コンピュータシステム及びプログラム生成装置
WO2007072568A1 (ja) * 2005-12-22 2007-06-28 Fujitsu Limited プログラム処理装置、プログラム処理方法、プログラム及びコンピュータ読取可能な記録媒体
US10031830B2 (en) * 2006-10-13 2018-07-24 International Business Machines Corporation Apparatus, system, and method for database management extensions
US8145655B2 (en) * 2007-06-22 2012-03-27 International Business Machines Corporation Generating information on database queries in source code into object code compiled from the source code
US9305180B2 (en) * 2008-05-12 2016-04-05 New BIS Luxco S.à r.l Data obfuscation system, method, and computer implementation of data obfuscation for secret databases
CN102047220B (zh) * 2008-05-23 2014-12-17 爱迪德加拿大公司 生成软件应用程序的白盒实现的系统和方法
US8776016B2 (en) * 2009-10-29 2014-07-08 Red Hat, Inc. Integration of structured profiling data with source data in the eclipse development environment
US8561032B2 (en) * 2009-11-04 2013-10-15 Red Hat, Inc. Visualizing thread life time in eclipse
US8789024B2 (en) * 2009-11-04 2014-07-22 Red Hat, Inc. Integration of visualization with source code in the Eclipse development environment
US8930717B2 (en) 2011-03-01 2015-01-06 Angel Secure Networks, Inc. Secure processing module and method for making the same
US9058482B2 (en) 2011-03-01 2015-06-16 Angel Secure Networks, Inc. Controlling user access to electronic resources without password
JP5371122B2 (ja) * 2011-03-14 2013-12-18 Necエンジニアリング株式会社 ログ情報漏洩防止方法およびログ情報漏洩防止装置
EP2506174B1 (en) * 2011-03-30 2019-01-09 Irdeto B.V. Enabling a software application to be executed on a hardware device
WO2014051608A1 (en) * 2012-09-28 2014-04-03 Hewlett-Packard Development Company, L.P. Application randomization
US9270660B2 (en) 2012-11-25 2016-02-23 Angel Secure Networks, Inc. System and method for using a separate device to facilitate authentication
JP6286329B2 (ja) * 2014-09-19 2018-02-28 株式会社沖データ 画像形成装置及び情報提供方法
CN105824681A (zh) * 2016-03-30 2016-08-03 上海斐讯数据通信技术有限公司 一种提高源文件运行效率的装置和方法
EP3355218A1 (en) 2017-01-26 2018-08-01 Gemalto Sa Method to secure a software code
EP3355219A1 (en) * 2017-01-26 2018-08-01 Gemalto Sa Method to secure a software code
DE102017204020A1 (de) 2017-03-10 2018-09-13 Siemens Aktiengesellschaft Verfahren zur rechnergestützten Obfuskation von Programmcode
JP6907847B2 (ja) * 2017-09-14 2021-07-21 日本電気株式会社 ソースプログラム保護システム及び方法
CN114924749A (zh) * 2022-06-01 2022-08-19 国网冀北电力有限公司信息通信分公司 一种智能终端代码混淆方法、装置、电子设备及存储介质

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1341310C (en) * 1988-07-15 2001-10-23 Robert Filepp Interactive computer network and method of operation
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
ES2236999T3 (es) * 1993-11-18 2005-07-16 Digimarc Corporation Video con informacion digital oculta en banda.
NO302388B1 (no) * 1995-07-13 1998-02-23 Sigurd Sigbjoernsen Fremgangsmåte og anordning for å beskytte programvare mot bruk uten tillatelse
JPH1063555A (ja) * 1996-08-19 1998-03-06 Hitachi Ltd ファイル管理方法
US6052780A (en) * 1996-09-12 2000-04-18 Open Security Solutions, Llc Computer system and process for accessing an encrypted and self-decrypting digital information product while restricting access to decrypted digital information
US6668325B1 (en) * 1997-06-09 2003-12-23 Intertrust Technologies Obfuscation techniques for enhancing software security
US6334189B1 (en) * 1997-12-05 2001-12-25 Jamama, Llc Use of pseudocode to protect software from unauthorized use
JPH11259574A (ja) 1998-03-13 1999-09-24 Nippon Telegr & Teleph Corp <Ntt> ライセンス管理方法及びシステム及びユーザ端末装置及びライセンス管理プログラムを格納した記憶媒体
US7233948B1 (en) * 1998-03-16 2007-06-19 Intertrust Technologies Corp. Methods and apparatus for persistent control and protection of content
JP3734206B2 (ja) * 1998-05-01 2006-01-11 インターナショナル・ビジネス・マシーンズ・コーポレーション エージェント対話管理方法、コンピュータ及び記憶媒体
US6442663B1 (en) * 1998-06-19 2002-08-27 Board Of Supervisors Of Louisiana University And Agricultural And Mechanical College Data collection and restoration for homogeneous or heterogeneous process migration
JP3636915B2 (ja) * 1999-02-22 2005-04-06 ソニー株式会社 付加情報重畳方法、付加情報検出方法、付加情報重畳装置および付加情報検出装置
US6865747B1 (en) * 1999-04-01 2005-03-08 Digital Video Express, L.P. High definition media storage structure and playback mechanism
US6327686B1 (en) * 1999-04-22 2001-12-04 Compaq Computer Corporation Method for analyzing manufacturing test pattern coverage of critical delay circuit paths
US7287166B1 (en) * 1999-09-03 2007-10-23 Purdue Research Foundation Guards for application in software tamperproofing
US6813506B1 (en) * 1999-11-18 2004-11-02 Lg Electronics Inc. Method for coding and transmitting transport format combination indicator
US7005733B2 (en) * 1999-12-30 2006-02-28 Koemmerling Oliver Anti tamper encapsulation for an integrated circuit
US6968543B2 (en) * 2000-03-10 2005-11-22 Fujitsu Limited Information processing apparatus
GB2361560B (en) * 2000-04-17 2002-12-18 Robert Kaplan Method and apparatus for transferring or receiving data via the internet securely
US7363266B1 (en) * 2000-04-27 2008-04-22 General Electric Capital Corporation Systems and methods for asset valuation
WO2002001333A2 (en) * 2000-06-27 2002-01-03 Microsoft Corporation System and method for providing an individualized secure repository
US6986130B1 (en) * 2000-07-28 2006-01-10 Sun Microsystems, Inc. Methods and apparatus for compiling computer programs using partial function inlining
WO2003013004A2 (en) * 2001-07-27 2003-02-13 Koninklijke Philips Electronics N.V. Signal coding
US6968072B1 (en) * 2001-12-06 2005-11-22 Pixim, Inc. Image sensor with built-in steganographic and watermarking functions
US7036118B1 (en) * 2001-12-20 2006-04-25 Mindspeed Technologies, Inc. System for executing computer programs on a limited-memory computing machine
US7177900B2 (en) * 2003-02-19 2007-02-13 International Business Machines Corporation Non-invasive technique for enabling distributed computing applications to exploit distributed fragment caching and assembly
US7366914B2 (en) * 2003-08-29 2008-04-29 Intel Corporation Source code transformation based on program operators
US6989773B2 (en) * 2004-02-13 2006-01-24 Hewlett-Packard Development Company, L.P. Media data encoding device

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111538962A (zh) * 2020-03-18 2020-08-14 西安电子科技大学 程序控制流混淆方法、系统、存储介质、云服务器及应用

Also Published As

Publication number Publication date
EP1349036A2 (en) 2003-10-01
EP2098938A1 (en) 2009-09-09
CN1242323C (zh) 2006-02-15
JP2003280754A (ja) 2003-10-02
EP1349036A3 (en) 2004-08-18
US20030188187A1 (en) 2003-10-02

Similar Documents

Publication Publication Date Title
CN1242323C (zh) 源程序转换方法和装置
US9350547B2 (en) Systems and methods for watermarking software and other media
US8935539B2 (en) System and method for revising boolean and arithmetic operations
RU2439669C2 (ru) Способ предотвращения обратного инжиниринга программного обеспечения, неавторизованной модификации и перехвата данных во время выполнения
CN110598379B (zh) 一种实现字符串混淆的方法、设备及存储介质
RU2009105072A (ru) Методики кодирования и декодирования цифрового видео с переменным разрешением
CN1647443A (zh) 初始化、维护、更新和恢复利用数据访问控制功能的集成系统中的安全操作
JP7285850B2 (ja) コンパイルデバイス及び方法
CN1609801A (zh) 通过应用程序分解将高保证特征集成到应用程序中
CN1766529A (zh) 导航系统
EP1349035B1 (en) Self-restoration type program, program producing method and apparatus, information processing apparatus and program
CN1991870A (zh) 数据删改防止方法及数据删改防止系统
US8677149B2 (en) Method and system for protecting intellectual property in software
CN1291328C (zh) 将文件分割存储和还原处理的方法和系统
US20120096562A1 (en) Method for protecting the source code of a computer program
US20080118060A1 (en) Method of decoding/encoding content file
CN1862492A (zh) 可执行代码拷贝的唯一标识的创建方法及其管理
CN1862493A (zh) 用于创建可执行代码的副本的唯一标识及其管理的方法
EP1526531A3 (en) Information recording processing apparatus, information reproduction processing apparatus, information recording medium, information recording processing method, information reproduction processing method, and computer program
CN113282294A (zh) 基于安卓平台Java字符串混淆的方法和装置
US20080301654A1 (en) Program processing apparatus, program processing method and computer readable information recording medium
CN105095698A (zh) 基于最近执行的程序代码的程序代码模糊处理
TWI687838B (zh) 檔案保護方法及其檔案處理系統
CN114816362A (zh) 一种用于保护java程序的代码混淆处理系统及方法
CN114115896A (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
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20060215

Termination date: 20110325