CN101203859B - 程序难破解化装置和难破解化方法 - Google Patents

程序难破解化装置和难破解化方法 Download PDF

Info

Publication number
CN101203859B
CN101203859B CN2006800224218A CN200680022421A CN101203859B CN 101203859 B CN101203859 B CN 101203859B CN 2006800224218 A CN2006800224218 A CN 2006800224218A CN 200680022421 A CN200680022421 A CN 200680022421A CN 101203859 B CN101203859 B CN 101203859B
Authority
CN
China
Prior art keywords
piece
camouflage
program
instruction
programmed instruction
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
CN2006800224218A
Other languages
English (en)
Other versions
CN101203859A (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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial 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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Publication of CN101203859A publication Critical patent/CN101203859A/zh
Application granted granted Critical
Publication of CN101203859B publication Critical patent/CN101203859B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/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)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)

Abstract

提供一种程序难破解化装置,生成非法解析者不能容易地取得被隐匿信息的难破解化程序。程序难破解化装置存储包含含有应隐匿的被隐匿信息的隐匿处理指令群的原始程序,生成多个处理指令,在执行依照确定的处理顺序的处理时、该多个处理指令通过最后的处理可得到与基于所述隐匿处理指令群的处理相同的结果,代替所述隐匿处理指令群,在从所述原始程序的开始到所述隐匿处理指令群出现之间,插入所述多个处理指令的每个,以按所述处理顺序执行,并生成至少1个包含伪装处理指令的伪装块,在所述原始程序中,插入所述伪装块与控制成绕过所述伪装块的控制指令。

Description

程序难破解化装置和难破解化方法
技术领域
本发明涉及一种将保持并执行秘密信息的程序变换为难以非法解析秘密信息的程序的技术。 
背景技术
以前,作为防止非法解析/篡改处理加密密钥等被隐匿信息的程序的方法,考虑如下程序难破解化(obfuscated)方法,即通过将程序的控制构造/处理等变换为与原来程序不同的形式,变为解析困难的程序(例如参照非专利文献1)。这里,所谓被隐匿信息是不想让第三者知道的信息。 
在非专利文献1中,公开了如下方法,即例如执行不影响程序输出结果的复制生成型伪装代码的插入,生成难破解化程序。 
这里,说明基于伪(pseudo)分支指令与伪装块插入的难破解化程序的生成方法。 
设难破解化前的原始程序由指令群1、指令群2和指令群3构成,顺序执行3个指令群。 
在该难破解化方法中,向原始程序追加与原始程序的执行无关的虚拟(dummy)变量,在执行代码中插入几个改写虚拟变量的值的程序指令群。另外,将用虚拟变量的值确定分支目的地的伪分支指令群追加到指令群1与指令群2之间。此时,伪分支指令设定根据程序执行时确定的虚拟变量的值、真假总是恒定的值(例如始终为‘真’的值)的分支条件。并且,将分支条件为真时的分支目的地设为指令群2,将分支条件为假时的分支目的地设为伪装块。 
如此难破解化的程序按指令群1、伪分支指令、指令群2、指令群3的顺序执行。追加的伪装块虽然存在于程序中,但在不执行使用调试工具等强制变更程序计数器等的特别操作的正常系统执行时,不 加以执行。 
另外,说明基于伪分支指令插入的难破解化程序的生成方法。 
设难破解化前的原始程序由指令群1、指令群2和指令群3构成,顺序执行3个指令群。 
在该方法中,向原始程序追加虚拟变量。接着,向指令群1与指令群2之间追加利用虚拟变量的值确定分支目的地的伪分支指令。此时,伪分支指令设定根据程序执行时确定的虚拟变量的值、真假必然恒定的值(例如始终为‘真’的值)的分支条件。此时,将分支条件为真时的分支目的地设为指令群2,将分支条件为假时的分支目的地设为指令群3。 
如此难破解化的程序按指令群1、伪分支指令、指令群2、指令群3的顺序执行。 
在非专利文献1中,公开了通过执行上述难破解化,从程序推定算法变困难,推定特定模块的位置变困难。例如,在想要保护加密密钥不会根据加密算法的程序而被非法解析的情况下,可使加密算法的模块位置推定变困难。 
但是,即便在使用这种方法使程序的控制构造变复杂的情况下,程序中的某处也存在加密密钥等被隐匿信息。从而,若收集全部程序中存在的常数数据,则其中之一变为被隐匿信息。 
因此,例如在加密算法的情况下,若是可获得明文与密文的组的非法解析者,则只要将程序中存在的常数数据假定为加密密钥,调查加密明文后得到的密文与实际的密文是否一致,则迟早可发现对应的加密密钥。 
在非专利文献1中,对该问题,还描述如下方法,即通过将包含被隐匿信息的程序指令置换为多个程序指令群,使程序难以破解。例如,描述了:在‘d0=1234’的程序指令中,‘1234’为被隐匿信息的情况下,将‘d0=1234’的程序指令置换为‘d0=230’、‘d0=d0+1000’、‘d0=d0+4’这样的程序指令群,将它们分散配置。若使用这种方法,则即使收集程序中存在的常数数据,也不能从中发现被隐匿信息。另外,分割被隐匿信息,将生成的多个程序指令称为 分割秘密。 
非专利文献1:鴨志田、松本、井上,“耐タンパ一ソフトウエアの構成手法に関すゐ考察”,ISEC97-59 
非专利文献2:Johannes Koebler,Uwe Schoening,Jacobo Toran,“The Grapph Isomorphism Problem”,Birkhaauser,1993 
非专利文献3:戸田誠之助,‘グラフ同型性判定問題’,日本大学文理学部厳書(2001年) 
如上所述,以前,存在将包含被隐匿信息的第一程序指令置换为具有与其相同功能的第二程序指令群(这里为多个分割秘密)的难破解化。 
但是,考虑非法解析者从使用分割秘密难破解化的程序中发现多个分割秘密的情况。例如,考虑着眼于第二程序指令群中使用的变量,从难破解化后的程序中收集使用该变量的式子的方法。例如,在所述将被隐匿信息‘d0=1234’置换为4个处理‘d0=230’、‘d0=d0+1000’、‘d0=d0+4’的情况下,非法解析者通过从程序中收集使用d0的变量的处理,可发现构成第二程序指令群的分割秘密,从发现的多个分割秘密中取得被隐匿信息‘d0=1234’。 
发明内容
因此,本发明的目的在于提供一种程序难破解化装置和难破解化方法,生成非法解析者不能容易地取得被隐匿信息的难破解化程序。 
为了实现上述目的,本发明是一种程序难破解化装置,根据由1个以上正当程序指令构成、并包含含有应隐匿的被隐匿信息的隐匿处理指令群的原始程序,生成程序解析困难的程序,其特征在于,具备:存储部件,存储所述原始程序;处理指令生成部件,生成多个处理指令,若执行依照确定的处理顺序的处理,则该多个处理指令通过最后的处理可得到与基于所述隐匿处理指令群的处理相同的结果;处理指令插入部件,代替所述隐匿处理指令群,在从所述原始程序的开始到所述隐匿处理指令群出现之间,插入所述多个处理指令的每个,以按所述处理顺序执行;伪装块生成部件,生成至少1个包含扰乱所述多 个处理指令的伪装处理指令的伪装块;和伪装块插入部件,在所述原始程序中,插入所述伪装块与控制成绕过所述伪装块的控制指令。 
发明效果 
根据上述构成,由于程序难破解化装置将包含伪装处理指令的伪装块插入原始程序中,所以即便原始程序的非法解析者发现多个处理指令,也由于其中包含伪装处理指令,所以难以取得得到被隐匿信息所需的多个处理指令。即,非法解析者不能容易地取得被隐匿信息。 
这里,也可以是,所述隐匿处理指令群是包含所述被隐匿信息作为运算对象的隐匿运算式,所述处理指令是对秘密变量代入运算结果的运算式,所述伪装处理指令是将所述秘密变量作为运算对象的伪装运算式,所述处理指令生成部件生成多个运算式,若执行依照确定的处理顺序的处理,则该多个运算式通过最后的处理得到与基于所述隐匿运算式的运算相同的值,所述处理指令插入部件具备:置换部,将所述原始程序包含的被隐匿信息置换为所述秘密变量;和插入部,在从所述原始程序的开始到所述隐匿处理指令群出现之间,插入所述多个运算式的每个,以按所述运算顺序执行。 
根据该构成,由于程序难破解化装置将包含伪装运算式的伪装块插入原始程序中,所以即便原始程序的非法解析者发现多个运算式,也由于其中包含伪装运算式,所以难以取得得到被隐匿信息所需的多个运算式。即,非法解析者不能容易地取得被隐匿信息。 
这里,也可以是,所述伪装块插入部件在所述伪装块生成部件生成的至少1个伪装块中,插入以所述正当程序指令、所述处理指令和其它伪装块中的某一个作为分支目的地的分支指令。 
根据该构成,由于程序难破解化装置在1个伪装块中,插入从所述1个伪装块、分支到原始程序中包含的正当程序指令和其它伪装块中之一的分支指令,所以可使原始程序的解析变困难。 
这里,也可以是,所述原始程序按执行顺序排列包含1个以上所述正当程序指令的多个原始块,所述处理指令插入部件,将所述多个处理指令的每个,插入到从最初执行的原始块起至具有所述隐匿处理指令群的原始块为止的某一个中,所述伪装块插入部件具备:第1生 成部,将所述多个原始块和所述伪装块的每个作为节点,根据所述原始块的执行顺序、所述原始块中包含的分支指令、和所述伪装块中包含的分支指令,生成图;判定部,判定生成的图的难易度是否满足规定条件;第2生成部,在判定为满足规定条件的情况下,将所述伪装块与所述控制指令插入到所述原始程序中,在判断为不满足规定条件的情况下,将以所述多个原始块和其它伪装块中的1个块为分支目的地的条件分支指令,插入到1个伪装块中;和控制部,进行控制,以便执行所述第1生成部、所述判定部与所述第2生成部的处理,直到满足所述规定条件。 
根据该构成,由于程序难破解化装置根据插入了伪装块的原始程序来生成图,所以可将插入了伪装块的原始程序处理为子图同构问题。就子图同构问题而言,当存在提供的2个图(子图与整体图)时,可知难以从整体图中发现部分图。由此,难以根据插入了伪装块的原始程序,从图中发现未插入伪装块的原始程序。 
这里,也可以是,所述程序难破解化装置还具备接受部件,该接受部件接受难破解化的强度的指定,满足所述规定条件是指,根据连结节点间的边缘数量和节点数量算出的值(边缘数量)-(节点数量),为由与指定的所述强度相对应的图的难易度确定的规定数量以上,所述判定部根据所述第1生成部生成的图,取得边缘数量与节点数量,判定值(边缘数量)-(节点数量)是否为所述规定数量以上。 
根据该构成,程序难破解化装置可使用值(边缘数量)-(节点数量)作为图的强度基准,生成图。 
这里,也可以是,所述程序难破解化装置还具备接受部件,该接受部件接受难破解化的强度的指定,满足所述规定条件是指,图中的闭路的数量为由与指定的所述强度相对应的图的难易度确定的规定数量以上,所述判定部根据所述第1生成部生成的图,取得闭路数量,判定取得的闭路数量是否为所述规定数量以上。 
根据该构成,程序难破解化装置可使用闭路数量作为图的强度基准,生成图。 
这里,也可以是,满足所述规定条件是指图不是平面图,所述判 定部判定所述第1生成部生成的图是否是平面图,在判定为不是平面图的情况下,为满足所述规定条件。 
根据该构成,程序难破解化装置可使用不是平面图这一情况,作为图的强度基准,生成图。 
这里,也可以是,所述程序难破解化装置还具备接受部件,该接受部件接受难破解化的强度的指定,满足所述规定条件是指,由第1规定数量以上的节点数量构成的闭路的数量,为由与指定的所述强度相对应的图的难易度确定的第2规定数量以上,所述判定部根据所述第1生成部生成的图,取得由第1规定数量以上的节点数量构成的闭路的数量,判定取得的闭路数量是否为所述第2规定数量以上。 
根据该构成,程序难破解化装置可使用闭路数量作为图的强度基准,生成图。 
这里,也可以是,所述伪装块插入部件,对于所述原始块,在所述原始块中插入条件分支指令,该条件分支指令包含在所述运算式按所述运算顺序执行的情况下、真假值为恒定值的比较式,并且通过所述比较式真假值成为所述恒定值时的该条件分支指令的分支目的地,为接着执行的下一原始块,在所述伪装块被插入到紧挨着所述原始块的后面的情况下,将所述条件分支指令作为所述控制指令。 
根据该构成,程序难破解化装置通过将真假值为恒定值的条件分支指令插入原始块中,可使原始程序的解析变困难。 
这里,也可以是,所述原始程序按执行顺序排列包含1个以上所述正当程序指令的多个原始块,所述处理指令插入部件,将所述多个处理指令的每个,插入到从最初执行的原始块起至具有所述隐匿处理指令群的原始块为止的某一个中,所述伪装块插入部件具备:第1生成部,将所述多个原始块和所述伪装块的每个作为节点,根据所述原始块的执行顺序、所述原始块中包含的分支指令、和所述伪装块中包含的分支指令,生成图;判定部,判定生成的图的强度是否满足规定条件;第2生成部,在判定为满足规定条件的情况下,将所述伪装块与所述控制指令插入到所述原始程序中,在判断为不满足规定条件的情况下,将以所述多个原始块和其它伪装块中的1个块为分支目的地 的条件分支指令插入到1个伪装块中,或在1个原始块中,将1个伪装块作为分支目的地,将总是不分支到所述分支目的地的条件分支指令插入所述原始块中;和控制部,进行控制,以便执行所述第1生成部、所述判定部与所述第2生成部,直到满足所述规定条件。 
根据该构成,由于程序难破解化装置根据插入了伪装块的原始程序生成图,所以可将插入了伪装块的原始程序处理为子图同构问题。由此,难以根据插入了伪装块的原始程序从图中发现未插入伪装块的原始程序。 
这里,也可以是,处理指令生成部件生成所述多个处理指令,以仅在按所述处理顺序执行的情况下,得到与所述隐匿处理指令群的处理相同的结果。 
根据该构成,由于程序难破解化装置生成的所述多个运算式仅在按正确的运算顺序执行的情况下才算出所述被隐匿信息,所以非法解析者只要未取得正确的运算顺序,就不能取得被隐匿信息。即,程序难破解化装置可使原始程序的解析变困难。 
这里,也可以是,所述伪装块插入部件具备:分割部,将所述原始程序分割成由1个以上正当程序指令构成的多个分割块;被替换块生成部,根据除了包含所述原始程序中最后执行的正当程序指令的分割块之外的1个以上分割块的每个,对分割块生成包含表示接着执行的分割块的分支指令的被替换块;块替换部,替换除了包含所述原始程序中最初执行的正当程序指令的被替换块之外的其它被替换块的每个、以及包含所述原始程序中最后执行的正当程序指令的分割块的配置顺序;和插入部,将所述伪装块插入到所述原始程序中,将位于紧挨着所述伪装块插入之处的前面的被替换块中包含的分支指令,作为所述控制指令。 
根据该构成,由于程序难破解化装置替换除了位于原始程序开头的分割块之外的其它分割块的位置,所以可使原始程序的解析变困难。 
这里,也可以是,所述分割部还将所述伪装块分割成由1个以上程序指令构成的多个伪装分割块,所述被替换块生成部还根据所述伪 装分割块的每个,对伪装分割块生成包含表示其它伪装分割块的分支指令的伪装被替换块,所述插入部将所述伪装被替换块的每个,插入到所述原始程序中。 
根据该构成,由于程序难破解化装置将构成伪装块的1个以上伪装分割块的每个插入所述原始程序中,所以可使原始程序的解析变困难。 
这里,也可以是,所述被替换块生成部还根据所述伪装块,对所述伪装块生成包含表示1个分割块或其它伪装块的分支指令的伪装被替换块,所述插入部将所述伪装被替换块的每个,插入到所述原始程序中。 
根据该构成,由于程序难破解化装置将伪装块插入所述原始程序中,所以可使原始程序的解析变困难。 
这里,也可以是,所述原始程序事先被分割成包含1个以上所述正当程序指令的多个分割块,所述多个分割块按执行顺序排列,所述处理指令插入部件,在从最初执行的分割块到具有所述隐匿处理指令群的分割块之间,插入所述多个处理指令的每个,所述伪装块插入部件具备:被替换块生成部,根据除了包含所述原始程序中最后执行的正当程序指令的分割块之外的1个以上分割块的每个,对分割块生成包含表示接着执行的分割块的分支指令的被替换块;块替换部,替换除了包含所述原始程序中最初执行的正当程序指令的被替换块之外的其它被替换块的每个、以及包含所述原始程序中最后执行的正当程序指令的分割块的配置顺序;和插入部,将所述伪装块插入到所述原始程序中,将位于紧挨着所述伪装块插入之处的前面的被替换块中包含的分支指令,作为所述控制指令。 
根据该构成,由于程序难破解化装置替换除了位于原始程序开头的分割块之外的其它分割块的位置,所以可使原始程序的解析变困难。 
附图说明
图1是表示程序难破解化装置10的构成框图。 
图2是表示难破解化对象程序201的构成一例的图。 
图3是表示根据难破解化对象程序201生成的多个基本块的构成一例的图。 
图4是表示根据基本块的每个生成的多个分割后块的构成一例的图。 
图5是表示根据各分割后块生成的图的图。 
图6是表示等效程序指令插入后块的图。 
图7是表示作为节点数量可取的范围的图。 
图8是表示伪装块主体的构成一例的图。 
图9是表示伪装等效程序指令插入后伪装块的构成一例的图。 
图10是表示标签插入后等效程序指令插入后块、标签插入后等效程序指令非插入块、和标签插入后等效程序指令插入后伪装块的构成一例的图。 
图11是表示TMP块的构成一例的图。 
图12是使用标签插入后等效程序指令插入后块、标签插入后等效程序指令非插入块和TMP块生成的图。 
图13是表示在TMP块1101j中插入条件分支指令后的新的TMP块1301j的构成一例的图。 
图14是表示使用新的TMP块1301j再生成的图的图。 
图15是表示伪分支指令插入后块的构成一例的图。 
图16是表示被替换块的构成一例的图。 
图17是表示根据难破解化对象程序201生成的难破解化程序1500的构成一例的图。 
图18是表示程序难破解化装置10的动作概要的流程图。 
图19是表示等效程序生成处理的动作的流程图。 
图20是表示伪装块插入后程序的生成处理的动作的流程图。 
图21是表示伪分支指令插入后程序的生成处理的动作的流程图。 
图22是表示规定数量与图的强度之间的关系的图。 
符号说明 
10程序难破解化装置 
100存储部 
101输入部 
102块分割部 
103等效程序指令生成部 
104等效程序生成部 
105伪装块插入后程序生成部 
106伪分支指令插入后程序生成部 
107被替换块群生成部 
108配置顺序替换部 
201难破解化对象程序 
202变量说明部 
203处理部 
具体实施方式
1.第1实施方式 
下面,参照附图说明作为本发明第1实施方式的程序难破解化装置10。 
1.1程序难破解化装置10的构成 
程序难破解化装置10如图1所示,由存储部100、输入部101、块分割部102、等效程序指令生成部103、等效程序生成部104、伪装块插入后程序生成部105、伪分支指令插入后程序生成部106、被替换块群生成部107、配置顺序替换部108构成。 
下面,说明各构成要素。在下面的说明中,首先说明构成要素的动作,之后,通过具体表示对难破解化对象程序的一例实施基于各构成要素的处理的实例,进一步明确该构成要素。 
1.1.1输入部101 
输入部101接收保持被隐匿信息的难破解化对象程序、和表示包含难破解化对象程序中的被隐匿信息的程序指令位置的位置信息。 
输入部101将接收到的难破解化对象程序与位置信息存储在存 储部100上。 
输入部101将指示难破解化对象程序的分割的分割指令输出到块分割部102。 
这里,难破解化对象程序例如是使用作为被隐匿信息的加密密钥进行密文的解密的程序。位置信息是保持接收到的难破解化对象程序中的秘密信息的程序指令的行序号。 
下面,示出具体例。 
图2表示输入部101接收的难破解化对象程序的一例。 
图2中,难破解化对象程序201由函数func构成。函数func由变量说明(declaration)部202和处理部203构成。处理群A实际上是由反复指令(for语句、while语句、do-while语句)、选择指令(if语句、switch语句)、无条件分支指令(goto语句、break语句、continue语句、return语句)以外的程序指令构成的程序指令群,由N个程序指令—一即指令a_1、指令a_2、...、指令a_N构成,但图中简化。指令a_1、指令a_2、...、指令a_N例如是变量加常数的程序指令、即‘x+=10;’等程序指令。处理群B、处理群D、处理群F、处理群G、处理群H也一样。设处理群H最后的程序指令是‘return;’。由于C语言的术语是公知的,所以省略详细说明。 
处理群C、处理群E是除包含的指令数量是(N-1)个以外、由种类与处理群A相同的程序指令构成的程序指令群。 
处理部203中包含保持被隐匿信息的程序指令204。程序指令204是包含该难破解化对象程序201的被隐匿信息‘512’的程序指令‘a=b+512;’。 
输入部101接收难破解化对象程序201与位置信息(这里为程序指令204的行序号),将接收到的难破解化对象程序201与位置信息存储在存储部100上。 
输入部101将指示难破解化对象程序201的分割的分割指令输出到块分割部102。 
下面,在使用具体例说明的情况下,使用难破解化对象程序201进行说明。 
1.1.2存储部100 
存储部100存储输入部101接收到的难破解化对象程序与位置信息。 
具体而言,存储部100存储输入部101接收到的难破解化对象程序201、与表示包含该难破解化对象程序201的被隐匿信息‘512’的程序指令‘a=b+512;’的位置的位置信息。 
1.1.3块分割部102 
块分割部102若从输入部101接收分割指令,则读出存储部100中存储的难破解化对象程序,分割读出的难破解化对象程序中包含的处理部,生成1个以上分割后块。 
块分割部102将接收到的难破解化对象程序中包含的处理部分割成1个以上基本块,之后,详细分割分割后的基本块的每个,生成1个以上分割后块。这里,基本块是由1个以上程序指令构成的程序指令群,是在程序指令群的开头以外不与其它程序指令群合流、在程序指令群的最后以外不分支到其它程序指令群的程序指令群。另外,省略对于涉及编译器的术语的详细说明。 
(1)基本块的生成 
块分割部102若从输入部101接收难破解化对象程序,则将接收到的难破解化对象程序中包含的处理部分割成1个以上基本块。这里,所谓基本块是如下块,其开始位置为处理部的开头(难破解化对象程序的入口的程序指令、即、难破解化对象程序最先执行的程序指令)、处理合流的程序指令,或构成分支的程序指令的下一程序指令,其结束位置为接着处理合流的程序指令的前一个程序指令、处理部的最后(程序的出口指令、即难破解化对象程序最后执行的程序指令)、或构成分支的程序指令。 
关于基本块生成的进一步细节由于在编译器领域内是公知的,所以这里省略说明。 
由此,块分割部102可分割难破解化对象程序,生成多个基本块。另外,构成难破解化对象程序的全部块指令被块分割部102包含于任一基本块中。 
(2)分割后块的生成 
块分割部102对生成的各基本块,按如下方式进行分割,生成1个以上分割后块。 
块分割部102使用基本块中包含的程序指令数m、事先提供的规定数N,将基本块分割成([(m-1)/N]+1)个分割后块。分割时,各块的程序指令数尽可能均等。这里,运算[a/b]是实施除法a/b、取得从算出结果中舍弃小数点以下之后的整数的运算式。例如,[5/2]=2。 
(3)具体例 
图3是表示将图2所示的难破解化对象程序分割成基本块之后的结果。 
图3中的基本块301a~301c是分割图2的函数func的处理部203而生成的基本块。 
基本块301a包含:从包含函数func入口的程序指令(函数中最先执行的程序指令)的处理群A开始,至之后最初出现的条件分支指令(for语句、while语句、do-while语句、if语句、switch语句)、即程序指令‘if(条件1)goto labelF;’为止的程序指令。这里,将该条件分支指令设为基本块301a的最后,是因为基本块在块的最后以外不分支。 
基本块301b包含从基本块301a最后的程序指令的下一程序指令起,至之后最初合流的位置、即紧挨着‘labelF’的之前的程序指令‘a=b+512;’为止的程序指令。这里,将紧挨着合流位置的之前的程序指令设为基本块301b的最后是因为基本块在块的开头以外不合流。另外,设在‘labelF;’合流是因为在‘labelF;’的位置处理移动的路径可以有2个以上。即,一个是在基本块301a执行后因条件分支而处理移动的情况,另一个是在基本块301b执行后处理移动的情况。 
基本块301c包含从基本块301b的最后程序指令的下一程序指令起、至之后构成函数func的出口的程序指令(函数中最后执行的程序指令)为止。 
下面,图4示出将图3所示的各基本块分割成分割后块之后的结 果。 
包含处理群A、处理群B、处理群C的基本块301a包含的程序指令数量合计为3N个。这是因为这里设处理群A、处理群B中包含的程序指令的个数分别为N个,处理群C中包含的程序指令为N-1个,而且基本块301a中包含程序指令‘if(条件1)goto labelF;’。 
将3N代入式[(m-1)/N]+1)的m中,可知由基本块301a生成的分割后块数量为3个。将基本块301a分割成3个后生成的是分割后块401a~401c。 
下面,同样分割包含2N个程序指令的基本块301b,生成的分割后块为分割后块401d~401e。并且,同样分割包含3N个程序指令的基本块301c,生成的分割后块为分割后块401f~401h。 
在本实施例中,示出进一步分割基本块、生成分割后块的构成,但也可将基本块本身处理为分割后块。 
1.1.4等效程序指令生成部103 
等效程序指令生成部103生成具有与包含被隐匿信息的程序指令相同功能的指令群。在下面的说明中,将构成该指令群的各指令称为等效程序指令。 
在本实施例中,为了简化,示出生成根据多个程序指令算出作为被隐匿信息的常数的程序指令群、并将生成的程序指令群的每个设为等效程序指令的情况。 
等效程序指令生成部103确定等效程序指令中使用的变量名(秘密信息用变量名)、制作图、确定等效程序指令的插入对象块、和生成插入到等效程序指令插入对象块中的等效程序指令。 
(1)确定秘密信息用变量名 
等效程序指令生成部103确定等效程序指令中使用的变量的名称。 
首先,等效程序指令生成部103解析难破解化对象程序,调查该程序中使用的全部变量名。接着,生成与使用的任一变量名都不重复的变量名,将生成的变量名确定为秘密信息用变量名。 
(2)制作图 
等效程序指令生成部103制作表示难破解化对象程序的构造的图(graph)。 
等效程序指令生成部103将块分割部102生成的分割后块的每个视为节点,在第一节点包含向第二节点的分支指令(基于goto语句、break语句、continue语句、return语句的无条件分支指令、或基于for语句、while语句、do-while语句、if语句、switch语句的条件分支指令)的情况下,或在第一节点的最后程序指令是无条件分支指令以外的程序指令,而对应于所述最后程序指令的程序上的程序指令的后一个程序指令包含于第二节点中的情况下,视为在第一节点与第二节点之间存在边缘,生成由节点与边缘构成的图。关于图的术语已知,所以这里省略说明。关于图生成的进一步细节在编译器领域是公知的,所以这里省略说明。 
在这种图中,第一节点称为第二节点的先行块,第二节点称为第一节点的后续块。 
并且,这里,将包含了含有由位置信息表示的被隐匿信息的程序指令的节点称为秘密保有节点。另外,将包含构成程序入口的程序指令(程序的最先执行的程序指令)的节点称为开始节点,将包含构成程序出口的程序指令(程序的最后执行的程序指令)的节点称为结束节点。 
(3)确定等效程序指令的插入对象块 
等效程序指令生成部103根据生成的图,确定插入等效程序指令的分割后块。 
等效程序指令生成部103首先将对应于秘密保有节点的块设为第1等效程序指令插入对象块。接着,在第1等效程序指令插入对象块的先行块只有1个的情况下,等效程序指令生成部103将该先行块设为第2等效程序指令插入对象块。下面,同样在第n等效程序指令插入对象块的先行块只有1个的情况下,等效程序指令生成部103将该先行块设为第(n+1)等效程序指令插入对象块。在第n等效程序指令插入对象块的先行块有多个的情况下,等效程序指令生成部103中止处理,将等效程序指令数设为n。下面将在该步骤的任一操作中、 未选为等效程序指令插入对象块的分割后块,称为等效程序非插入块。 
在利用这种方法确定了等效程序指令插入对象块的情况下,当在不执行使用调试工具等强制变更程序计数器等特别操作的正常系统中执行时,在执行第1等效程序指令插入对象块之前,必然执行第2等效程序指令插入对象块。这进一步可通过第1等效程序指令插入对象块的先行块仅是第2等效程序指令插入对象块这一情况而了解。下面一样,在执行第(n-1)等效块之前,必然执行第n等效程序指令插入对象块。总之,可知当执行第1等效程序指令插入对象块时,之前必然按顺序执行第n、第(n-1)、...、第2等效程序指令插入对象块。实际上插入等效程序指令的处理,由等效程序生成部104来执行,其详细动作如后所述。 
(4)生成等效程序指令 
等效程序指令生成部103生成插入到等效程序指令插入对象块中的等效程序指令。等效程序指令生成部103生成数量与等效程序指令数n相同的等效程序指令。这里,将等效程序指令数量设为N,下面,描述从第1等效程序指令至第N等效程序指令的生成步骤。 
(A)生成第1等效程序指令 
等效程序指令生成部103随机选择整数RA_0,生成将选择到的整数RA_0设定为秘密信息用变量的第1等效程序指令‘(秘密信息用变量)=RA_0;’。 
(B)生成第t(t=2、3、...N-1)等效程序指令 
等效程序指令生成部103随机选择作为0以外的整数的RA_t、RB_t,使用选择到的0以外的整数RA_t、RB_t与第t运算符,生成第t(t=2、3、...N-1)等效程序指令‘(秘密信息用变量)=(秘密信息用变量)(第t运算符)RA_t+RB_t;’。这里,第t运算符是表示乘法的‘*’或表示除法的‘/’中的某个运算符,随机选择是哪个。 
(C)生成第N等效程序指令 
等效程序指令生成部103随机选择作为0以外的整数的RA_N,使用选择到的0以外的整数RA_N、第一值、与运算符‘*’,生成 第N等效程序指令‘(秘密信息用变量)=(秘密信息用变量)*RA_N+(第一值)’。 
这里,在下面描述第一值的算出方法。 
等效程序指令生成部103取得存储部100存储的位置信息,取得由所取得的位置信息所示的程序指令中包含的被隐匿信息的值。 
等效程序指令生成部103算出执行顺序排列第1~第(N-1)等效程序指令的程序指令群 
‘(秘密信息用变量)=RA_0; 
(秘密信息用变量)=(秘密信息用变量)(第2运算符)RA_2+RB_2; 
(秘密信息用变量)=(秘密信息用变量)(第3运算符)RA_3+RB_3; 
(秘密信息用变量)=(秘密信息用变量)(第(N-1)运算符)RA_(N-1)+RB_(N-1);’ 
时得到的秘密信息用变量的值,作为第二值。 
等效程序指令生成部103将 
式1:(第一值)=(被隐匿信息的值)-{(第二值)*RA_N} 
得到的值设为第一值。 
利用这种方法,在生成第1~第N等效程序指令的情况下,当顺序处理 
‘(秘密信息用变量)=RA_0; 
(秘密信息用变量)=(秘密信息用变量)(第2运算符)RA_2+RB_2; 
(秘密信息用变量)=(秘密信息用变量)(第3运算符)RA_3+RB_3; 
(秘密信息用变量)=(秘密信息用变量)(第(N-1)运算符)RA_(N-1)+RB_(N-1); 
(秘密信息用变量)=(秘密信息用变量)*RA_N+(第一值);’ 
构成的程序指令群时,在处理的最后,秘密信息用变量变为被隐匿信息的值。 
根据该生成方法,可知例如替换第t等效程序指令与第(t+1)等效程序指令,按第1、2、...、t-1、t+1、t、t+2、...、N的顺序执行等 效程序指令后的值,与执行第1~第N等效程序指令之后的值不同。 
这里,作为等效程序指令,示出使乘法与加法组合的运算,但不限于此。只要是使用数量与等效程序指令数量n相同的等效程序指令取得被隐匿信息的值的运算,则可以使用任何运算。 
(5)具体例 
等效程序指令生成部103首先使用图2所示的难破解化对象程序201,调查难破解化对象程序201的函数func中使用的自变量的变量名、和变量说明部202说明的变量名,将与这些变量名不重复的变量名设为秘密信息用变量名。这里,设秘密信息用变量名为‘dkey’。 
接着,等效程序指令生成部103使用图4所示的分割后块401a~401h,如下所示生成图G100。这里,将分割后块401a~401h的每个说明为节点501a~501h。 
分割后块401a的最后程序指令不是无条件分支指令。另外,分割后块401a的下一程序指令是分割后块401b的程序指令。从而,等效程序指令生成部103对节点501a与节点501b设定边缘502a。 
同样,等效程序指令生成部103设定边缘502b~502g。 
分割后块401c中具有条件分支到分割后块401f的标签‘1abelF:’的条件分支指令‘if(条件1)goto labelF;’。从而,等效程序指令生成部103对节点501c与节点501f设定边缘502h。 
等效程序指令生成部103通过执行上述动作,生成表示难破解化对象程序201的构造的图G100。图5示出生成的图G100。 
在该图中,节点501a是开始节点,节点501h是结束节点,节点501e是秘密保有节点。 
接着,等效程序指令生成部103根据图5所示的图G100,如下确定插入等效程序指令的分割后块。 
等效程序指令生成部103将对应于作为秘密保有节点的节点501e的分割后块401e,设为第1等效程序指令插入对象块。由于在节点501e中先行块仅为节点501d,所以等效程序指令生成部103将对应于节点501d的分割后块401d设为第2等效程序指令插入对象块。下面,同样,等效程序指令生成部103将对应于节点501c的分 割后块401c设为第3等效程序指令插入对象块,将对应于节点501b的分割后块401b设为第4等效程序指令插入对象块,将对应于节点501a的分割后块401a设为第5等效程序指令插入对象块。由于在第5等效程序指令插入对象块中没有先行块,所以等效程序指令生成部103将等效程序指令数量设为‘5’。 
接着,等效程序指令生成部103生成数量与等效程序指令数量‘5’相同的等效程序指令。这里,等效程序指令生成部103接着生成第1~第5等效程序指令。 
等效程序指令生成部103选择整数‘18’,生成第1等效程序指令‘dkey=18;’。 
下面,等效程序指令生成部103分别确定第2~第4等效程序指令。 
这里,等效程序指令生成部103分别顺序将第2运算符~第4运算符设为‘/’、‘*’、‘/’,将随机的值RA_2~RA_4分别设为值‘2’、值‘4’、值‘5’,将随机的值RB 2~RB 4分别设为值‘54’、值‘-32’、值‘+8’,分别如下生成第2~第4等效程序指令。 
‘dkey=dkey/2+54;’, 
‘dkey=dkey*4-32;’, 
‘dkey=dkey/5+8;’ 
接着,等效程序指令生成部103生成第5等效程序指令。 
这里,等效程序指令生成部103将随机的值RA_N设为值‘9’。并且,等效程序指令生成部103执行如下的程序指令群,算出第二值。 
‘dkey=18; 
dkey=dkey/2+54; 
dkey=dkey*4-32; 
dkey=dkey/5+8;’ 
若顺序执行该程序指令群,则‘dkey’的值依次变为值‘18’、值‘63’、值‘220’、值‘52’,等效程序指令生成部103将值‘52’设为第二值。 
等效程序指令生成部103通过将被隐匿信息的值‘512’、与第 二值‘52’、RA N的值‘9’代入 
式1:(第一值)=(被隐匿信息的值)-{(第二值)*RA_N}, 
算出第一值‘44’。 
等效程序指令生成部103生成第5等效程序指令‘dkey=dkey*9+44;’。 
综上所述,第1~第5等效程序指令依次变为 
‘dkey=18;’, 
‘dkey=dkey/2+54;’, 
‘dkey=dkey*4-32;’, 
‘dkey=dkey/5+8;’, 
‘dkey=dkey*9+44;’。 
可确认依次执行这些程序指令时的dkey的值变为被隐匿信息的值‘512’。 
1.1.5等效程序生成部104 
等效程序生成部104将被隐匿信息置换为秘密信息用变量,将等效程序指令生成部103生成的各个等效程序指令,插入等效程序指令插入对象块中,生成等效程序插入后块。 
等效程序生成部104生成由所生成的等效程序插入后块、和未插入等效程序指令的分割后块构成的等效程序。等效程序是将包含被隐匿信息的指令置换成等效程序指令群、但具有与执行置换前的程序相同功能的程序。 
后面,在以后的说明中,将未插入等效程序指令的分割后块称为等效程序非插入块。 
等效程序生成部104执行秘密信息用变量的追加、被隐匿信息的置换与等效程序指令的插入。 
(1)秘密信息用变量的追加 
等效程序生成部104向难破解化对象程序的变量说明部追加等效程序指令生成部103生成的秘密信息用变量,生成新的变量说明部。 
(2)被隐匿信息的置换 
等效程序生成部104取得存储部100存储的位置信息,将取得的位置信息所示的程序指令中包含的被隐匿信息的值置换成秘密信息用变量。这里,等效程序生成部104将秘密保有节点中包含的被隐匿信息的值置换成秘密信息用变量。 
(3)等效程序指令的插入 
等效程序生成部104将等效程序指令生成部103生成的等效程序指令的每个,插入等效程序指令生成部103确定的任一等效程序指令插入对象块中。下面,说明详细动作。 
等效程序生成部104将第t(t=1、2、...、N)等效程序指令插入第(N-t+1)等效程序指令插入对象块中,生成第(N-t+1)等效程序指令插入后块。 
即,等效程序生成部104将第1等效程序指令插入第N等效程序指令插入对象块中,生成第N等效程序指令插入后块。下面,同样,将第t(t=2、3、...、N)等效程序指令插入第(N-t+1)等效程序指令插入对象块中,生成第t等效程序指令插入后块。 
这里,将第N等效程序指令插入到将被隐匿信息置换为秘密信息用变量后的程序指令之前。这是因为由于秘密信息用变量变为被隐匿信息的值,所以可可靠地执行通过将被隐匿信息置换成秘密信息用变量所生成的程序指令。 
在下面的说明中,将未插入等效程序指令的分割后块称为等效程序非插入块。 
由此,等效程序生成部104可生成由1个以上等效程序插入后块与1个以上等效程序非插入块构成的等效程序。 
另外,可知,通过执行第1~第N等效程序插入后块,对秘密信息用变量设定被隐匿信息的值。 
这是因为如上所述,第1等效程序指令插入对象块是具有被隐匿信息的分割后块。并且,当执行第1等效程序指令插入对象块时,之前必然按顺序执行第N、第(N-1)、...、第2等效程序指令插入对象块。另一方面,如(3.4)中所述,若按顺序执行第1、第2、...、第N等效程序指令,则秘密信息用变量的值变为被隐匿信息的值。因此, 等效程序生成部104如上所述,通过生成第1~第N等效程序插入后块,当执行第1等效程序指令插入后块时,之前必然执行第N、第(N-1)、...、第2等效程序指令插入后块,必然按顺序执行其中包含的第1、第2、...、第(N-1)等效程序指令。从而,当执行位于第1等效程序指令插入后块中的第N等效程序指令时,秘密信息用变量变为被隐匿信息的值。 
因此,等效程序生成部104生成的等效程序,在由不执行使用调试工具等强制变更程序计数器等的特别操作的正常系统执行的情况下,当执行包含第1等效程序指令的第N等效程序插入后块时,秘密信息用变量的值变为执行第1等效程序指令时秘密信息用变量取的值。另外,当执行包含第2等效程序指令的第(N-1)等效程序插入后块时,顺序执行第1~第2等效程序指令时的秘密信息用变量的值,变为顺序执行第1等效程序指令与第2等效程序指令时秘密信息用变量取的值。下面,同样,当执行包含第t(t=3、4、...N)等效程序指令的第(N-t+1)等效程序指令插入后块时,秘密信息用变量变为顺序执行第1~第t等效程序指令时秘密信息用变量取的值。 
(4)具体例 
等效程序生成部104向难破解化对象程序的变量说明部追加等效程序指令生成部103生成的秘密信息用变量‘dkey’,如图6所示,生成新的变量说明部601。变量说明部601为,向变量说明部202中加入了秘密信息用变量‘dkey’的说明语句的说明部。此时,等效程序生成部104在向难破解化对象程序的变量说明部追加秘密信息用变量‘dkey’时,将变量‘dkey’的变量类型变为可表示作为被隐匿信息的‘512’的类型(例如,由于若使用8比特正整数类型,则仅能表示0~255,不能表示512,所以避免使用。)。这里,设变量‘dkey’的变量类型为int类型。 
接着,等效程序生成部104将位置信息所示的程序指令(这里为图2所示的程序指令204)中的被隐匿信息的值‘512’置换为秘密信息用变量‘dkey’,如图6所示,生成新的程序指令603。 
接着,等效程序生成部104将第1等效程序指令‘dkey=18;’ 插入作为第5等效程序指令插入对象块的节点501a中,生成第5等效程序指令插入后块602a。同样,将第2等效程序指令‘dkey=dkey/2+54;’插入作为第4等效程序指令插入对象块的节点501b中,生成第4等效程序指令插入后块602b。下面,同样生成第3等效程序指令插入后块602c、第2等效程序指令插入后块602d、第1等效程序指令插入后块602e。 
这里,后面将未插入等效程序指令的节点501f~501h设为等效程序指令非插入块603f~603h。 
图6中,显示了使用了等效程序指令插入后块602a~602e、和等效程序指令非插入块603f~603h的图表。 
1.1.6伪装块插入后程序生成部105 
伪装块插入后程序生成部105生成作为为了得到正常系统的执行结果不必要的、或根本不执行的程序指令群的伪装块。伪装块具体而言,是只要不在程序执行中使用调试工具等强制变更程序计数器或变量的值,就不执行的程序指令群。 
伪装块插入后程序生成部105生成由所生成的伪装块、等效程序指令插入后块与等效程序指令非插入块构成的伪装块插入后程序。 
伪装块插入后程序生成部105执行伪装块数量的取得、伪装块主体的生成、伪装等效程序指令插入后伪装块的生成、与附带伪装分支指令的伪装块的生成。 
(1)伪装块数量的取得 
伪装块插入后程序生成部105事先存储要生成的伪装块数量。 
伪装块插入后程序生成部105取得存储的伪装块数量。伪装块数量的值例如为‘1000’等。为了简化,将伪装块数量设为值‘4’。 
这里,说明伪装块数量的确定。节点数量(这里为伪装块数量)与难破解化强度之间的关系如图7所示,随着节点数量变大,难破解化强度首先呈指数函数增加(图7所示的函数G110),从某个时刻起,随着节点数量增大,难破解化强度呈指数函数减少(图7所示的函数G120)。期望伪装块数量例如从图7所示的t1~t2的区间中选择。尤其是期望将对应于t1的节点数量设为伪装块数量。 
(2)伪装块主体的生成 
伪装块插入后程序生成部105生成个数由取得的伪装块数量表示的伪装块主体。 
伪装块插入后程序生成部105从块分割部102生成的分割后块中,随机选择1个以上分割后块。 
伪装块插入后程序生成部105生成与由从选择的1个以上分割后块的每个的程序指令群中、去除了分支指令(无条件分支指令和条件分支指令)后的程序指令群相同的程序指令群构成的程序指令群,作为伪装块主体。 
(3)伪装等效程序指令插入后伪装块的生成 
伪装块插入后程序生成部105对生成的伪装块主体的每个,生成伪装等效程序指令。伪装块插入后程序生成部105将生成的伪装等效程序指令,分别插入对应的伪装块主体的每个中,生成伪装等效程序指令插入后伪装块。伪装等效程序指令是使用与等效程序生成部104使用的第t(t=2、3、...N)等效程序指令相同的变量、运算符的程序指令。 
伪装块插入后程序生成部105对生成的全部伪装块主体执行以下动作,生成伪装等效程序指令插入后伪装块。 
伪装块插入后程序生成部105随机选择0以外的整数RA和RB,使用选择到的RA和RB,生成伪装等效程序指令‘(秘密信息用变量)=(秘密信息用变量)(运算符)(RA)+(RB);’。这里,运算符是表示乘法的‘*’或表示除法的‘/’中的某个运算符,随机选择是哪个。伪装块插入后程序生成部105将生成的伪装等效程序指令,插入对应的伪装块主体的开头。 
如此生成的伪装等效程序指令,是使用与上述等效程序指令相同的秘密信息用变量的程序指令,是在仅着眼于秘密信息用变量的情况下、不能与等效程序指令区别的程序指令。因此,要着眼于秘密信息用变量来收集等效程序指令的非法解析者,不能区别伪装等效程序指令与等效程序指令。 
(4)附带伪装分支指令的伪装块的生成 
伪装块插入后程序生成部105事先存储作为对应于用户期望的难破解化强度确定的数的、规定数。在本实施方式中,规定数例如是‘13’。 
伪装块插入后程序生成部105向生成的伪装等效程序指令插入后伪装块的每个中,插入无条件分支指令和条件分支指令中的至少1个分支指令,生成附带伪装分支指令的伪装块。 
伪装块插入后程序生成部105向等效程序指令非插入块的每个的开头中插入不同的标签,生成标签插入后等效程序指令非插入块。 
伪装块插入后程序生成部105向生成的各个伪装等效程序指令插入后伪装块的开头追加不同的标签,生成标签插入后伪装等效程序指令插入后伪装块。 
这里,插入各块中的标签的标签名与程序中已使用的标签名不重复。另外,在已赋予标签的情况下,不插入新的标签。 
接着,伪装块插入后程序生成部105向标签插入后伪装等效程序指令插入后伪装块的最后追加无条件分支指令。后面,将向标签插入后伪装等效程序指令插入后伪装块的最后追加了无条件分支指令的块,称为TMP块。 
另外,在生成TMP块时,追加的无条件分支指令的分支目的地,为从标签插入后伪装等效程序指令插入后伪装块的每个、标签插入后等效程序指令插入后块的每个、标签插入后等效程序非插入块的每个中随机选择的块的开头。在下面的说明中,将通过该动作生成的全部TMP块构成的块的集合称为TMP块群。 
接着,伪装块插入后程序生成部105将构成TMP块群的TMP块的每个、标签插入后等效程序插入后块的每个、标签插入后等效程序指令非插入块的每个视为节点,在第一节点包含至第二节点的分支指令的情况下,视为第一节点与第二节点之间存在边缘,另外,在第一节点的最后程序指令是无条件分支指令以外的程序指令、最后的程序指令的后一个的程序指令对应的节点是第二节点的情况下,视为在第一节点与第二节点之间存在边缘,生成由节点与边缘构成的图。 
接着,伪装块插入后程序生成部105使用生成的图,取得节点数 量和边缘数量。伪装块插入后程序生成部105算出式子‘(边缘数量)-(节点数量)’,判定算出的值是否为规定数量以上。 
在判定为算出结果为规定数量以上的情况下,伪装块插入后程序生成部105中止处理。后面,将中止时刻的、构成TMP块群的TMP块称为伪装块。 
在判定为不是规定数量以上的情况下,伪装块插入后程序生成部105执行以下动作。 
伪装块插入后程序生成部105从构成TMP块群的TMP块中,随机选择插入条件分支指令的TMP块。接着,向选择到的TMP块中插入条件分支指令,生成新的TMP块。这里,插入的条件分支指令的分支条件,为比较秘密信息用变量与随机确定的值的条件式,条件分支指令的分支目的地,为对应于构成所生成的图的任一节点的块的开头。插入条件分支指令的位置,为插入对象块具有的最先的分支指令之前的位置。在插入对象块不具有分支指令的情况下,为追加到插入对象块的最后的位置。 
伪装块插入后程序生成部105将插入条件分支指令而生成的新的TMP块,与不执行插入未施加变更的TMP块构成的块群设为新的TMP块群,再次执行图生成,执行上述所示的动作。 
(5)具体例 
伪装块插入后程序生成部105取得事先存储的伪装块数量‘4’。 
伪装块插入后程序生成部105如图8所示,生成个数由所取得的伪装块数量表示的伪装块主体701i~701l。 
伪装块插入后程序生成部105从块分割部102生成的分割后块中选择1个分割后块401c,使用从选择到的分割后块401c中去除作为分支指令的‘if(条件1)goto labelF;’之后的程序指令群C,生成伪装块主体701i。 
伪装块插入后程序生成部105从块分割部102生成的分割后块中选择1个分割后块401h,使用选择到的分割后块401h,生成伪装块主体701j。伪装块主体701k、701l也是一样的生成方法,所以这里省略说明。 
接着,伪装块插入后程序生成部105生成对于所生成的伪装块主体701i~701l的每个的伪装等效程序指令。伪装块插入后程序生成部105将所生成的伪装等效程序指令的每个,插入伪装块主体701i~701l中,生成图9所示的伪装等效程序指令插入后伪装块801i~801l。 
例如,伪装块插入后程序生成部105生成对应于伪装块主体701i的伪装等效程序指令‘dkey=dkey*34+7;’,将生成的伪装等效程序指令插入伪装块主体701i中,由此生成伪装等效程序指令插入后伪装块801i。 
伪装等效程序指令插入后伪装块801j~801l也是同样的生成方法,这里省略说明。 
接着,伪装块插入后程序生成部105在等效程序指令插入后块602a~602e、等效程序指令非插入块603f~603h、伪装等效程序指令插入后伪装块801i~801l的每个的开头中,插入标签,并生成标签插入后等效程序指令插入后块1001a~1001e、标签插入后等效程序指令非插入块1002f~1002h、和标签插入后伪装等效程序指令插入后伪装块1003i~1003l。图10中,示出生成的各块的一例。这里,块B1000由标签插入后等效程序指令插入后块1001a~1001e与标签插入后等效程序指令非插入块1002f~1002h构成,从上位向下位顺序执行,或在执行标签插入后等效程序指令插入后块1001a~1001c之后,由分支指令分支到标签插入后等效程序指令非插入块1002f,执行标签插入后等效程序指令非插入块1002f~1002h。另外,块B1001由标签插入后伪装等效程序指令插入后伪装块1003i~1003l构成。 
图10中,标签插入后等效程序指令插入后块1001a~1001e是在等效程序指令插入后块602a~602e各块的开头中分别插入不重复的标签后生成的标签插入后等效程序指令插入后块。 
标签插入后等效程序指令非插入块1002f~1002h是在等效程序指令非插入块603f~603h各块的开头中分别插入不重复的标签后生成的标签插入后等效程序指令非插入块。由于等效程序指令非插入块603f的开头从一开始就存在标签‘labelF:’,所以不插入标签。 
标签插入后伪装等效程序指令插入后伪装块1003i~1003l是在伪 装等效程序指令插入后伪装块801i~801l各块的开头中分别插入不重复的标签后生成的标签插入后伪装等效程序指令插入后伪装块。 
接着,伪装块插入后程序生成部105根据生成的标签插入后伪装等效程序指令插入后伪装块1003i~1003l,生成TMP块1101i~1101l。图11中,示出生成的TMP块1101i~1101l的一例。 
例如,伪装块插入后程序生成部105从标签插入后等效程序指令插入后块1001a~1001e、标签插入后等效程序指令非插入块1002f~1002h、和标签插入后伪装等效程序指令插入后伪装块1003i~1003l中,选择标签插入后等效程序指令插入后块1001a。伪装块插入后程序生成部105生成无条件分支指令‘goto labelA;’,以无条件分支到所选择的标签插入后等效程序指令插入后块1001a,并将生成的无条件分支指令插入标签插入后伪装等效程序指令插入后伪装块1003i的最后,生成TMP块1101i。 
TMP块1101j~1101l也是同样的生成方法,所以这里省略说明。 
接着,伪装块插入后程序生成部105如下所示,生成图12所示的图G200。这里,将标签插入后等效程序指令插入后块1001a~1001e的每个,说明为节点1201a~1201e,将标签插入后等效程序指令非插入块1002f~1002h的每个说明为节点1201f~1201h,将TMP块1101i~1101l的每个说明为节点1201i~1201l。 
标签插入后等效程序指令插入后块1001a的最后的程序指令不是无条件分支指令。另外,标签插入后等效程序指令插入后块1001a的下一程序指令,是标签插入后等效程序指令插入后块1001b的程序指令。从而,伪装块插入后程序生成部105在节点1201a与节点1201b中设置边缘1202a。 
同样,伪装块插入后程序生成部105设置边缘1202b~1202g。 
在标签插入后等效程序指令插入后块1001c中,存在条件分支到标签插入后等效程序指令非插入块1002f的标签‘labelF:’的条件分支指令‘if(条件1)goto labelF;’。由此,伪装块插入后程序生成部105在节点1201c和1201f中设置边缘1202h。 
TMP块1101i的最后程序指令是无条件分支指令的程序指令 ‘goto labelA;’,是无条件分支到标签插入后等效程序指令插入后块1001a的标签‘labelA:’的程序指令。从而,伪装块插入后程序生成部105在节点1201i和1201a中设置边缘1202i。 
同样,伪装块插入后程序生成部105设置边缘1202j~1202k。 
伪装块插入后程序生成部105通过执行上述动作,可生成图G200。 
接着,伪装块插入后程序生成部105使用图12所示的图G200,判定‘(边缘数量)-(节点数量)’的值是否为规定数量‘13’以上。 
这里,因为‘(边缘数量)-(节点数量)’的值为0,所以伪装块插入后程序生成部105判定为不是规定数量以上,执行以下动作。 
伪装块插入后程序生成部105从TMP块1101i~1101l中,随机选择TMP块1101j,将条件分支指令插入选择到的TMP块1101j中,生成图13所示的新的TMP块1301j。 
伪装块插入后程序生成部105当生成TMP块1301j时,首先生成插入到选择的TMP块1101j中的条件分支指令。这里,将秘密信息用变量设为‘dkey’,将随机的值设为值‘273’,将‘dkey’与值‘273’的比较设为条件式。并且,从节点1201a~1201l的节点中,将节点1201d随机选择节点。伪装块插入后程序生成部105将生成的条件分支指令的条件分支目的地,设为对应于选择的节点1201d的块、即标签插入后等效程序指令插入后块1001d的开头。对应于如此生成的条件分支指令的程序指令,是程序指令‘if(dkey>273)gotolabelD;’。接着,伪装块插入后程序生成部105在TMP块1101j的最后程序指令、即也是无条件分支指令的程序指令‘goto label B;’之前的一个程序指令中,插入生成的程序指令,生成TMP块1301j。 
以上的动作结束之后,伪装块插入后程序生成部105将由生成的TMP块1301j、未执行变更的TMP块——即TMP块1101i、1101k和1101l构成的块群,设为新的TMP块群,制作图。 
这里,图14示出使用了新的TMP块群的图G210。与图G200的不同之处在于节点1201j变为节点1205j,在节点1205j与节点1201b中设置边缘1202j,在节点1205j与节点1201d中设置边缘1302j。TMP 块1301j与节点1205j对应。 
1.1.7伪分支指令插入后程序生成部106 
伪分支指令插入后程序生成部106在伪装块插入后程序生成部105生成的标签插入后等效程序指令插入后块中,插入伪分支指令,生成伪分支指令插入后块。这里,插入到标签插入后等效程序指令插入后块中的伪分支指令,是在未执行使用调试工具等强制变更程序计数器等的特别操作的正常系统程序执行时、真假必然为恒定值的分支条件分支指令。 
伪分支指令插入后程序生成部106生成由所生成的伪分支指令插入后块的每个、标签插入后等效程序指令非插入块的每个、伪装块插入后程序生成部105生成的伪装块的每个构成的伪分支指令插入后程序。 
伪分支指令插入后程序生成部106,通过对第N标签插入后等效程序指令插入后块至第1标签插入后等效程序指令插入后块,执行等效指令插入后块秘密信息用变量值的确定、与伪分支指令的插入,生成伪分支指令插入后程序。 
下面,说明伪分支指令插入后程序生成部106根据第t(t=1、2、...、N)标签插入后等效程序指令插入后块、生成伪分支指令插入后块的情况。 
伪分支指令插入后程序生成部106取得第1等效程序指令至第(N-t+1)等效程序的等效程序。 
伪分支指令插入后程序生成部106依次执行所取得的第1~第(N-t+1)等效程序,算出等效指令插入后块秘密信息用变量值。 
接着,伪分支指令插入后程序生成部106随机选择常数m和比较运算符,生成条件式‘dkey(比较运算符)m’。 
伪分支指令插入后程序生成部106使用所生成的条件式,生成伪分支指令‘if(dkey(比较运算符)m)then第1分支目的地else第2分支目的地’。伪分支指令插入后程序生成部106将所生成的伪分支指令追加到第t标签插入后等效程序指令插入后块,生成伪分支指令插入后块。追加条件分支指令的位置为块的最后。 
这里,说明伪分支指令的生成方法。 
伪分支指令插入后程序生成部106将算出的等效指令插入后块秘密信息用变量值代入变量‘dkey’中,判定条件式的真伪。 
在判定为条件式为真的情况下,伪分支指令插入后程序生成部106将第1分支目的地设为下一块,将第2分支目的地设为从标签插入后等效程序指令插入后块的每个、标签插入后等效程序指令非插入块的每个、伪装块的每个中,随机选择的1个块。 
在判定为条件式为假的情况下,伪分支指令插入后程序生成部106将第1分支目的地设为从标签插入后等效程序指令插入后块的每个、标签插入后等效程序指令非插入块的每个、伪装块的每个中随机选择的1个块,将第2分支目的地设为下一块。 
伪分支指令插入后程序生成部106选择各块,使第1分支目的地与第2分支目的地不重复。 
下面示出具体例。 
这里,说明根据标签插入后等效程序指令插入后块1001a~1001e生成图15所示的伪分支指令插入后块1401a~1401e的具体例。 
伪分支指令插入后程序生成部106首先如下所述根据第N(这里N=5)标签插入后等效程序指令插入后块1001a,生成伪分支指令插入后块1401a。 
伪分支指令插入后程序生成部106取得第1等效程序指令‘dkey=18;’,使用取得的第1等效程序指令,算出等效指令插入后块秘密信息用变量值‘18’。 
伪分支指令插入后程序生成部106随机选择常数m(这里为‘46’)和比较运算符(这里为‘<’),生成条件式‘dkey<46’。 
伪分支指令插入后程序生成部106将算出的等效指令插入后块秘密信息用变量值‘18’代入变量‘dkey’中,判定条件式的真伪。 
此时,条件式为真,伪分支指令插入后程序生成部106选择下一块(这里为标签名为‘labelB’的块),作为第1分支目的地,选择标签名为‘labelC’,作为第2分支目的地,生成作为伪分支指令的程序指令‘if(dkey<46)goto labelB;else goto labelC;’。 
伪分支指令插入后程序生成部106将生成的伪分支指令插入第5标签插入后等效程序指令插入后块1001a的最后,生成伪分支指令插入后块1401a。 
伪分支指令插入后块1401b~1401e也是同样的生成方法,所以这里省略说明。 
1.1.8被替换块群生成部107 
被替换块群生成部107从由标签插入后等效程序非插入块的每个、伪装块的每个、伪装分支指令插入后块的每个所构成的块群中,抽取1个以上块,该块具有当不执行使用调试工具等强制变更程序计数器等的特别操作的正常系统执行时、不使用goto语句移动到其它块的路径。 
被替换块群生成部107对于抽取到的1个以上块的每个,将移动到其它块的路径置换为使用了goto语句的分支。 
被替换块群生成部107抽取包含构成程序出口的程序指令的块,在抽取到的块的最后指令为程序指令‘return;’、‘exit();’以外的程序指令的情况下,向块的最后追加程序指令‘return;’。 
被替换块群生成部107生成由实施变更后的块的每个、未进行置换的块的每个构成的被替换块群。 
在后面的说明中,将被替换块群中包含的块称为被替换块。 
下面示出具体例。 
图16示出被替换块群生成部107根据标签插入后等效程序指令非插入块1002f~1002h、伪装块的每个、伪装分支指令插入后块1401a~1401e生成的被替换块群。 
被替换块群生成部107从标签插入后等效程序指令非插入块1002f~1002h、伪装块的每个、伪装分支指令插入后块1401a~1401e中,抽取具有不使用goto语句移动到其它块的路径的块(这里为标签插入后等效程序指令非插入块1002f、和1002g)。 
被替换块群生成部107对于抽取到的标签插入后等效程序指令非插入块1002f,在移动到其它块(这里为下一块。)的路径中插入作为无条件分支指令的程序指令‘goto labelG;’,生成被替换块1501f。 
对抽取到的标签插入后等效程序指令非插入块1002g也一样,被替换块群生成部107插入作为无条件分支指令的程序指令‘gotolabelH;’,生成被替换块1501g。 
被替换块群生成部107抽取包含构成程序出口的程序指令的块(这里为标签插入后等效程序指令非插入块1002h)。此时,标签插入后等效程序指令非插入块1002h中包含处理群H,处理群H是指令群H。由于该指令群H的最后程序指令是‘return;’,所以被替换块群生成部107不向块的最后追加程序指令‘return;’,生成被替换块1501h。即,标签插入后等效程序指令非插入块1002h与被替换块1501h相同。 
另外,伪分支指令插入后块1401a~1401e的每个的向其它块的分支使用goto语句,所以被替换块群生成部107不向伪分支指令插入后块1401a~1401e的每个施加变更,生成被替换块1501a~1501e。 
伪装块同样将伪装块本身设为被替换块,被替换块群生成部107生成被替换块1501j~1501l。 
1.1.9配置顺序替换部108 
配置顺序替换部108随机替换被替换块群生成部107生成的被替换块群中包含的各被替换块中、去除构成开始节点的被替换块的其它被替换块的配置顺序。 
配置顺序替换部108生成由等效程序生成部104生成的新的变量说明部与替换了配置顺序后的被替换块群构成的难破解化程序。 
配置顺序替换部108将生成的难破解化程序分配到执行该难破解化程序的外部装置。 
下面示出具体例。 
配置顺序替换部108执行图16所示的被替换块1501b~1501l的替换。这里,配置顺序替换部108顺序执行替换,以构成被替换块1501a、被替换块1501g、被替换块1501d、被替换块1501c、被替换块1501e、被替换块1501l、被替换块1501f、被替换块1501b、被替换块1501h、被替换块1501k、被替换块1501i、被替换块1501j。 
配置顺序替换部108根据执行了替换后的被替换块群与等效程 序生成部104生成的变量说明部601,生成图17所示的难破解化程序1500。 
1.2程序难破解化装置10的动作 
这里,说明程序难破解化装置10的动作。 
1.2.1动作概要 
这里,用图18所示的流程图来说明程序难破解化装置10对难破解化对象程序进行难破解化的动作概要。 
程序难破解化装置10的输入部101接收难破解化对象程序和位置信息(步骤S5)。 
输入部101将接收到的难破解化对象程序与位置信息存储到存储部100中。 
块分割部102从存储部100中读出难破解化对象程序,将读出的难破解化对象程序中包含的处理部分割成1个以上的基本块。之后,块分割部102详细分割分割后的基本块的每个,生成1个以上分割后块(步骤S10)。 
程序难破解化装置10实施等效程序生成处理,生成等效程序(步骤S15)。 
程序难破解化装置10实施伪装块插入后程序的生成处理,生成伪装块插入后程序(步骤S20)。 
程序难破解化装置10的伪分支指令插入后程序生成部106,在标签插入后等效程序指令插入后块中,插入伪分支指令,生成伪分支指令插入后块。伪分支指令插入后程序生成部106,生成由所生成的伪分支指令插入后块的每个、标签插入后等效程序指令非插入块的每个、伪装块插入后程序生成部105生成的伪装块的每个构成的伪分支指令插入后程序(步骤S25)。 
被替换块群生成部107,从标签插入后等效程序非插入块的每个、伪装块的每个、伪装分支指令插入后块的每个构成的块群中,抽取1个以上块,该块具有当正常系统执行时、不使用goto语句移动到其它块的路径。被替换块群生成部107对于抽取到的1个以上块的每个,将移动到其它块的路径置换为使用goto语句的分支。另外,被替换 块群生成部107抽取包含构成程序出口的程序指令的块,在抽取到的块的最后指令为程序指令‘return;’、‘exit();’以外的程序指令的情况下,向块的最后追加程序指令‘return;’。被替换块群生成部107生成由实施变更后的块的每个与未进行置换的块的每个构成的被替换块群(步骤S30)。 
配置顺序替换部108随机替换被替换块群生成部107生成的被替换块群中包含的各被替换块中、去除构成开始节点的被替换块的其它被替换块的配置顺序。配置顺序替换部108生成由等效程序生成部104生成的新的变量说明部与替换了配置顺序后的被替换块群构成的难破解化程序(步骤S35)。 
配置顺序替换部108将生成的难破解化程序分配到执行该难破解化程序的外部装置(步骤S40)。 
1.2.2等效程序生成处理的动作 
这里,用图19所示的流程图来说明图18所示的等效程序生成处理(步骤S15)的动作。 
等效程序指令生成部103解析难破解化对象程序,调查该程序中使用的全部变量名。接着,生成与使用的任一变量名均不重复的变量名,将生成的变量名确定为秘密信息用变量名(步骤S100)。 
等效程序指令生成部103将块分割部102生成的分割后块的每个视为节点,生成图。 
等效程序指令生成部103根据图生成步骤中生成的图,取得插入等效程序指令的第1~第N等效程序指令插入对象块(步骤S105)。这里,N为1以上的整数。 
等效程序指令生成部103生成对应于取得的1个以上等效程序指令插入对象块的每个的等效程序指令(步骤S110)。 
等效程序生成部104将等效程序指令生成部103确定的秘密信息用变量,追加到难破解化对象程序的变量说明部,生成新的变量说明部(步骤S115)。 
等效程序生成部104取得存储部100存储的位置信息,将取得的位置信息所示的程序指令中包含的被隐匿信息的值置换成秘密信息 用变量(步骤S120)。 
等效程序生成部104将第t(t=1、2、...、N)等效程序指令插入到第(N-t+1)等效程序指令插入对象块中,生成第(N-t+1)等效程序指令插入后块。等效程序生成部104生成由1个以上等效程序插入后块与1个以上等效程序非插入块构成的等效程序(步骤S125)。 
1.2.3伪装块插入后程序的生成处理的动作 
这里,用图20所示的流程图来说明图18所示的伪装块插入后程序的生成处理(步骤S20)的动作。 
伪装块插入后程序生成部105通过取得所存储的伪装块数量,确定伪装块数量(步骤S200)。 
伪装块插入后程序生成部105从块分割部102生成的分割后块中随机选择1个以上分割后块,生成与由从选择的1个以上分割后块的每个的程序指令群中、去除了分支指令(无条件分支指令和条件分支指令)后的程序指令群相同的程序指令群构成的程序指令群,作为伪装块主体(步骤S205)。伪装块插入后程序生成部105仅以取得的伪装块数的量执行该步骤。 
伪装块插入后程序生成部105对生成的伪装块主体的每个,生成伪装等效程序指令,并将生成的伪装等效程序指令插入对应的伪装块主体中,生成个数由伪装块数量表示的伪装等效程序指令插入后伪装块(步骤S210)。 
伪装块插入后程序生成部105向等效程序生成部104生成的等效程序指令插入后块的每个的开头中,插入不同的标签,生成标签插入后等效程序指令插入后块。伪装块插入后程序生成部105在程序指令非插入块的每个的开头中插入不同的标签,生成标签插入后等效程序指令非插入块。伪装块插入后程序生成部105向生成的伪装等效程序指令插入后伪装块的每个的开头追加不同的标签,生成标签插入后伪装等效程序指令插入后伪装块(步骤S215)。 
伪装块插入后程序生成部105向标签插入后伪装等效程序指令插入后伪装块的每个的最后,追加无条件分支指令,生成个数由伪装块数量表示的TMP块。伪装块插入后程序生成部105生成由所生成 的1个以上TMP块构成的TMP块群(步骤S220)。 
伪装块插入后程序生成部105将构成TMP块群的TMP块的每个、标签插入后等效程序插入后块的每个、标签插入后等效程序指令非插入块的每个作为节点,生成图(步骤S225)。 
伪装块插入后程序生成部105判定值‘(边缘数量)-(节点数量)’是否为规定数以上(步骤S230)。 
在判定为算出结果为规定数以上的情况下(步骤S230为‘是’),伪装块插入后程序生成部105结束处理。 
在判定为不是规定数以上的情况下(步骤S230为‘否’),伪装块插入后程序生成部105从构成TMP块群的TMP块中,随机选择插入条件分支指令的TMP块,向选择到的TMP块中插入条件分支指令,生成新的TMP块,更新(生成)新的TMP块群(步骤S235),返回步骤S225。 
1.3第1实施方式的效果 
根据该构成,可使从难破解化的程序找出秘密信息变困难。 
首先,等效程序指令生成部103,利用等效程序生成部104,将包含秘密信息的指令置换成等效程序指令,配置在程序上的不同位置上。利用这种构成,即便非法解析者收集到程序中包含的全部常数值,也不能发现秘密信息。另外,通过跨跃分割后块将等效程序指令配置在难破解化后的程序的不同位置上,可使非法解析者发现等效程序指令变困难。 
并且,伪装块插入后程序生成部105中,通过在伪装块中插入了使用与等效程序指令相同变量的程序指令——即伪装等效程序指令,即便非法解析者收集到使用了程序中特定变量的处理,也由于其中包含等效程序指令与伪装等效程序指令,而难以收集等效程序指令。 
并且,等效程序指令生成部103使多个运算组合,生成等效程序指令。从而,即便非法解析者发现程序中包含的等效程序指令的集合,只要不能按正确顺序变换排列所发现的集合的等效程序指令,则不能算出被隐匿信息的值。例如,若等效程序指令是程序指令‘(秘密信息用变量名)=RA_0;’、‘(秘密信息用变量名)+=RA_2;’‘(秘密 信息用变量名)+=RA_3;’,则即便使第2与第3处理的顺序颠倒,也可算出相同的被隐匿信息的值,但在实施例所述的方法中,不会产生这种事情。 
并且,在非法解析者知道难破解化对象程序(难破解化之前的程序)的算法和该难破解化方法自身的情况下,考虑使用该信息来进行非法解析。说明其细节。 
例如,DES、AES等加密程序广泛公开算法,非法解析者容易知道难破解化对象程序的算法。即便这种难破解化对象程序中,也要求保护作为被隐匿信息的加密密钥不被非法解析。 
可认为知道难破解化对象程序的算法的非法解析者可制作难破解化前的程序的图(例如图5的图)。另外,可认为可解析难破解化后的程序,并制作难破解化后的程序的图(例如图12的图)。 
知道这两个图的非法解析者考虑如下非法解析,通过从难破解化后的程序的图中发现相当于难破解化前的程序的图的图,从而发现从难破解化后的程序中去除了伪装块后的部分。 
在本实施方式中,伪装块插入后程序生成部105中,通过对伪装块执行伪装分支指令的插入,使难破解化后的程序的图构成变复杂,所以上述非法解析变困难。 
并且,通过利用配置顺序替换部108使难破解化后的程序的图构造变复杂,可使上述非法解析变困难。 
另外,在具有加密密钥的加密化程序中,程序难破解化装置将上述加密密钥作为被隐匿信息,对加密化程序进行难破解化,所以非法解析者难以解析加密密钥。由此,在加密化应保护著作权的数据、生成加密化数据的情况下,难以非法取得加密密钥,所以非法解析加密化数据也变困难。 
1.4变形例1 
在上述第1实施方式中,程序难破解化装置10使用TMP块群生成图,但不限于此。 
程序难破解化装置10也可具备将伪装块插入后程序生成部105与伪分支指令插入后程序生成部106设为1个构成要素的伪分支指令 插入后程序生成部106a,代替具备伪装块插入后程序生成部105与伪分支指令插入后程序生成部106,使用伪分支指令插入后程序,生成图。 
1.4.1伪分支指令插入后程序生成部106a 
伪分支指令插入后程序生成部106a执行伪装块数量的取得、伪装块主体的生成、伪装等效程序指令插入后伪装块的生成、附带伪装分支指令的伪装块的生成、TMP块群的生成与伪分支指令插入后程序的生成。 
另外,涉及伪分支指令插入后程序生成部106a执行的伪装块数量的取得、伪装块主体的生成、伪装等效程序指令插入后伪装块的生成的动作,与涉及伪装块插入后程序生成部105所示的伪装块数量的取得、伪装块主体的生成、和伪装等效程序指令插入后伪装块的生成的动作一样,所以这里省略说明。 
下面,说明TMP块群的生成与伪分支指令插入后程序的生成。 
(1)TMP块群的生成 
伪分支指令插入后程序生成部106a向等效程序生成部104生成的等效程序指令插入后块的每个的开头插入不同的标签,生成标签插入后等效程序指令插入后块。 
伪分支指令插入后程序生成部106a向等效程序指令非插入块的每个的开头插入不同的标签,生成标签插入后等效程序指令非插入块。 
伪分支指令插入后程序生成部106a向生成的各个伪装等效程序指令插入后伪装块的开头追加不同的标签,生成标签插入后伪装等效程序指令插入后伪装块。 
这里,插入各块中的标签的标签名,与程序中已使用的标签名不重复。另外,在已赋予标签的情况下,不执行新的标签的插入。 
接着,伪分支指令插入后程序生成部106a向标签插入后伪装等效程序指令插入后伪装块的最后追加无条件分支指令,生成TMP块。 
伪分支指令插入后程序生成部106a对标签插入后伪装等效程序指令插入后伪装块的每个生成TMP块,由此生成TMP块群。 
接着,伪分支指令插入后程序生成部106a,根据第t(t=1、2、...、N)标签插入后等效程序指令插入后块,生成伪分支指令插入后块。生成方法与上述第1实施方式所示的伪分支指令插入后程序生成部106执行的生成方法一样,所以省略说明。 
接着,伪分支指令插入后程序生成部106a将伪分支指令插入后程序中包含的各块视为节点,生成图。图的生成方法与上述第1实施方式所示的伪装块插入后程序生成部105所示的图的生成方法一样,所以省略说明。 
伪分支指令插入后程序生成部106a取得生成的图中包含的闭路数量,判定取得的闭路数量是否为事先确定的规定数量以上。这里,所谓闭路是指从构成起点的节点起至构成终点的节点的路径中、起点与终点为相同节点的路径。这里,规定数量是对应于用户期望的难破解化强度而确定的数量,例如为‘13’。 
在判定为不是规定数量以上的情况下,伪分支指令插入后程序生成部106a从标签插入后等效程序指令插入后块的每个、标签插入后等效程序指令非插入块的每个、TMP块的每个中,随机选择插入条件分支指令的1个块。伪分支指令插入后程序生成部106a将条件分支指令插入选择到的块中,生成新的块。 
这里,在选择到的块是第t(t=1、2、...、N)标签插入后等效程序指令插入后块的情况下,伪分支指令插入后程序生成部106a依次执行第1~第(N-t+1)等效程序,算出等效指令插入后块秘密信息用变量值。伪分支指令插入后程序生成部106a随机选择常数m,将算出的值代入秘密信息用变量dkey,确定比较运算符,使条件式‘dkey(比较运算符)m’为假,生成使用了确定后的比较运算符的伪分支指令‘if(dkey(比较运算符)m)then分支目的地’。这里,分支目的地为TMP块的开头。另外,条件分支指令的插入位置为块的最后。 
在选择到的块是标签插入后等效程序指令非插入块的情况下,依次执行第1~第N等效程序,算出等效指令插入后块秘密信息用变量值。后面的动作与上述一样,所以省略说明。另外,条件分支指令的插入位置为块的最后。 
在选择到的块是TMP块的情况下,由于与上述所示的伪装块插入后程序生成部105生成新的TMP块一样,所以省略说明。另外,条件分支指令的插入位置为插入对象块具有的最先的分支指令之前的位置。在插入对象块不具有分支指令的情况下,设为追加到插入对象块的最后的位置。 
伪分支指令插入后程序生成部106a使用插入条件分支指令后生成的新的块、与不插入不实施变更的各块,再次执行图生成,执行上述所示的动作。 
在判定为是规定数量以上的情况下,伪分支指令插入后程序生成部106a判定生成的图是否是平面图(不包含交叉的图)。 
在判定为不是平面图的情况下,伪分支指令插入后程序生成部106a结束动作。 
在判定为是平面图的情况下,伪分支指令插入后程序生成部106a从标签插入后等效程序指令插入后块的每个、标签插入后等效程序指令非插入块的每个、TMP块的每个中,随机选择插入条件分支指令的1个块。伪分支指令插入后程序生成部106a将条件分支指令插入选择到的块中,生成新的块。伪分支指令插入后程序生成部106a使用插入条件分支指令后生成的新的块、与不插入不实施变更的各块,再次执行图生成,执行上述所示的动作。 
另外,就平面图而言,由于是图理论领域公知的,所以这里省略说明。 
另外,伪分支指令插入后程序生成部106a也可计数生成的图的边缘数量、节点数量,代替取得闭路数量,将由式‘(边缘数量)-(节点数量)+1’算出的值用作闭路数量的近似值。 
1.4.2动作概要 
这里,用图18所示的流程图,仅说明变形例1中的程序难破解化装置对难破解化对象程序进行难破解化的动作概要的变更点。 
变形例1中的程序难破解化装置在执行图18所示的步骤S5~S15之后,执行伪分支指令插入后程序的生成处理,代替执行步骤S20中的伪装块插入后程序的生成处理。 
变形例1中的程序难破解化装置在执行伪分支指令插入后程序的生成处理之后,省略步骤S25,执行步骤S30以后的处理。 
1.4.3伪分支指令插入后程序的生成处理 
这里,用图21所示的流程图来说明伪分支指令插入后程序的生成处理的动作。 
伪分支指令插入后程序生成部106a通过取得所存储的伪装块数量,确定伪装块数量(步骤S300)。 
伪分支指令插入后程序生成部106a从分割后块中随机选择1个以上的分割后块,生成与由从选择到的1个以上分割后块的每个的程序指令群中、去除了分支指令(无条件分支指令和条件分支指令)后的程序指令群相同的程序指令群构成的程序指令群,作为伪装块主体(步骤S305)。伪分支指令插入后程序生成部106a仅以取得的伪装块数的量执行该步骤。 
伪分支指令插入后程序生成部106a对生成的伪装块主体的每个,生成伪装等效程序指令,并将生成的伪装等效程序指令插入对应的伪装块主体中,生成个数由伪装块数量表示的伪装等效程序指令插入后伪装块(步骤S310)。 
伪分支指令插入后程序生成部106a向等效程序指令插入后块的每个的开头中插入不同的标签,生成标签插入后等效程序指令插入后块,在程序指令非插入块的每个的开头中插入不同的标签,生成标签插入后等效程序指令非插入块,并向生成的伪装等效程序指令插入后伪装块的每个的开头追加不同的标签,生成标签插入后伪装等效程序指令插入后伪装块(步骤S315)。 
伪分支指令插入后程序生成部106a向标签插入后伪装等效程序指令插入后伪装块的每个的最后,追加无条件分支指令,生成个数由伪装块数量表示的TMP块。伪分支指令插入后程序生成部106a生成由所生成的1个以上TMP块构成的TMP块群(步骤S320)。 
伪分支指令插入后程序生成部106a算出对应于第t(t=1、2、...、N)标签插入后等效程序指令插入后块的等效指令插入后块秘密信息用变量值(步骤S325)。算出方法与上述第1实施方式所示的伪分支指 令插入后程序生成部106执行的处理方法一样,所以省略说明。 
伪分支指令插入后程序生成部106a根据算出的变量值的每个,生成插入第t(t=1、2、...、N)标签插入后等效程序指令插入后块中的伪分支指令,将生成的伪分支指令插入到插入对象的第t(t=1、2、...、N)标签插入后等效程序指令插入后块中,生成伪分支指令插入后块。伪分支指令插入后程序生成部106a生成由伪分支指令插入后块的每个、标签插入后等效程序指令非插入块的每个、伪装块(TMP块)的每个构成的伪分支指令插入后程序(步骤S330)。 
伪分支指令插入后程序生成部106a将伪分支指令插入后程序中包含的各块作为节点,生成图(步骤S335)。 
伪分支指令插入后程序生成部106a取得生成的图中包含的闭路数量,判定取得的闭路数量是否为事先确定的规定数量以上(步骤S340)。 
在判定为是规定数量以上的情况下(步骤S340为‘是’),伪分支指令插入后程序生成部106a判定生成的图是否是平面图(不包含交叉的图)(步骤S345)。 
在判定为不是平面图的情况下(步骤S345为‘否’),伪分支指令插入后程序生成部106a结束动作。 
在判定为闭路数量不是规定数量以上的情况下(步骤S340为‘否’)、以及判定为是平面图的情况下(步骤S345为‘是’),伪分支指令插入后程序生成部106a从伪分支指令插入后块的每个、标签插入后等效程序指令非插入块的每个、伪装块(TMP块)的每个中,随机选择插入条件分支指令的1个块。伪分支指令插入后程序生成部106a在选择到的块中插入条件分支指令,生成新的块(步骤S350),返回步骤S335。 
1.4.4变形例1的效果 
在图理论的领域中,作为子图同构判定问题,已知判定两个图G1、G2中G1是否包含于G2中的问题是困难的。这在非专利文献2中记述。 
因此,即便知道G1包含于G2中,也难以判定G1包含于G2的 何处。另外,作为子图同构判定问题困难的条件,已知程序不是树构造、程序不是平面图。 
从而,若根据从难破解化后的程序的图发现难破解化前的程序的图的子图同构判定问题变困难的指标,构筑难破解化后的程序的图,则可使在先所述的非法解析变困难。 
变形例1的程序难破解化装置可构筑使子图同构判定问题变困难的难破解化后的程序的图。 
变形例1的程序难破解化装置也可构成为取得由事先提供的范围的节点数量构成的闭路数量,代替取得全部的闭路数量。 
另外,变形例1的程序难破解化装置也可构成为事先调查难破解化前的程序中包含的闭路,再调查构成各个闭路的节点数,仅计数由数量与调查到的节点数量相同的节点构成的闭路数量,以代替取得全部的闭路数量。根据这种构成,变形例1的程序难破解化装置可粗略了解图的闭路数量的倾向,可缩短计算闭路数量的处理时间。 
另外,除闭路数量的判定或平面图的判定外,也可将非专利文献3(44~50)中所示的图同型判定问题的计算复杂性指标用于判定。图同型判定问题可认为是子图同构判定问题的特别情况,所以若使用这种指标,可生成子图同构判定较困难的难破解化后的程序的图。 
另外,这里,描述了在生成伪装块且子图同构判定不困难的情况下追加伪装分支的情况,但也可事先制作子图同构判定变困难的难破解化后的图,追加伪装分支指令,以与该图一致。 
1.4.5其它变形例 
伪分支指令插入后程序生成部106a在伪分支指令插入后程序的生成中,使用闭路数量的判定或平面图的判定双方,但不限于此。 
伪分支指令插入后程序生成部106a也可仅使用闭路数量的判定和平面图的判定中的1个判定,生成伪分支指令插入后程序。 
1.5变形例2 
在变形例1中,也可如下变更图21所示的步骤S330和步骤S350的动作。 
1.5.1步骤S330的变更 
伪分支指令插入后程序生成部106a插入相当于程序结束处理的程序指令‘return;’、‘exit();’,作为插入的分支指令。 
1.5.2步骤S350的变更 
伪分支指令插入后程序生成部106a插入相当于程序结束处理的程序指令‘return;’、‘exit();’,作为插入的分支指令。 
1.5.2变形例2的效果 
当知道难破解化前的程序算法的非法解析者执行根据难破解化后的程序的图找出难破解化前的程序的图的解析时,考虑通过将难破解化前的程序与难破解化后的程序的结束节点相对应来进行解析。例如,若发现图5所示的图的节点501h与图12中的节点1201h的对应关系,则从难破解化后的程序的图发现难破解化前的程序的解析变容易。 
根据变形例2,因为结束节点的候补增加,所以从难破解化后的程序发现结束节点变困难。 
1.6变形例3 
当知道难破解化前的程序算法的非法解析者执行根据难破解化后的程序的图找出难破解化前的程序的图的解析时,考虑通过将难破解化前的程序与难破解化后的程序的开始节点相对应来进行解析。例如,若发现图5所示的图的节点501a与图12中的节点1201a的对应关系,则从此进行解析。变形例3是使程序的开始节点的抽取变困难的变形例,变形例3的程序难破解化装置将上述第1实施方式所示的配置顺序替换部108变更为下面所示的配置顺序替换部108a。 
1.6.1配置顺序替换部108a 
配置顺序替换部108a对难破解化对象程序,调查程序中使用的变量名和自变量中使用的变量名,将与这些变量名不重复的变量名作为对难破解化对象程序指定开始节点用的新的自变量、即开始节点指定用变量,追加到变量说明部601,生成新的变量说明部601a。 
接着,配置顺序替换部108a向程序的开头追加作为条件分支指令的switch语句。追加的switch语句将由开始节点指定用变量的值执行的case语句设为选择的程序指令,各case语句具有分支到与包 含开始节点的节点群相对应的块的开头的分支指令。 
接着,配置顺序替换部108a,将向对应于开始节点的块的开头执行分支指令时的节点指定用变量的值,追加到调用难破解化对象程序的程序指令的自变量中,其中这里的难破解化对象程序是调用难破解化对象程序的程序中的难破解化对象程序。 
接着,包含开始节点,随机替换排列全部块的顺序,生成难破解化程序。 
1.6.2具体例 
配置顺序替换部108a在难破解化对象程序中,调查程序中使用的变量名和自变量中使用的变量名,将与这些变量名不重复的变量名设为开始节点指定用变量。这里,将开始节点指定用变量设为‘start’。 
接着,向程序的开头追加switch语句。 
设相当于追加的switch语句的程序指令为 
‘ 
switch(start){ 
case 1: 
goto labelC; 
case 2: 
goto labelA; 
case 3: 
goto labelL; 
default: 
, 
接着,将函数说明和函数名从‘func(int a,int b)’置换为‘func(inta,int b,int start)’。 
另外,若调用难破解化对象的程序指令是‘func(a,b);’,则将其置换为‘func(a,b,2);’。这里,值‘2’是switch语句中使用的开始节点指定用变量‘start’中存储的数值。另外,也可对调用难破解化对象侧的程序单独进行难破解化,隐蔽开始节点指定用变量取的值 ‘2’等。 
1.6.3变形例3的效果 
通过适用这种难破解化,不知道开始节点指定用变量start中存储的正确值,就不知道开始节点是哪个。即,由于局部解析难破解化对象程序,所以不知道开始节点,难以在难破解化前的程序的图与难破解化后的程序的图中取得开始节点的对应。 
1.7变形例4 
在上述第1实施方式中,难破解化后程序中秘密信息用变量仅存在于右边的程序指令,仅为被隐匿信息位置的程序指令(图17中为被替换块1501e)。因此,考虑以下情况:知道难破解化前程序算法的非法解析者,取得难破解化前程序的图中构成被隐匿信息位置的节点(图5中为节点501e)、与难破解化后程序中秘密信息用变量仅存在于右边的块之间的对应关系,进行非法解析。 
因此,变形例4的程序难破解化装置,也可在伪装块主体生成时,追加秘密信息用变量仅存在于右边的程序指令。由此,变形例4的程序难破解化装置可使上述非法解析变困难。 
另外,变形例4的程序难破解化装置,也可在等效程序指令插入后块中,将右边存在常数的指令中的常数,置换为使用算出的等效指令插入后块秘密信息用变量值而算出的程序指令。由此,由于右边包含秘密信息用变量的程序指令的数量增加,所以变形例4的程序难破解化装置可使上述非法解析变困难。 
1.8变形例5 
有时难破解化前程序中包含特征运算、使用特征数值的运算(例如加密程序的算法中的环路的次数等)。因此考虑,知道难破解化前的程序的算法的非法解析者,在难破解化前的程序中,找出特征运算或数值,对难破解化前的图与难破解化后的图发现取得对应的节点。 
因此,也可通过将特征运算置换为其它处理,使上述解析变困难。这种方法在非专利文献1中记述。 
另外,特征数值也可处理为秘密信息,利用本方法所述的难破解化方法或其它难破解化方法隐蔽。 
1.9其它变形例 
1.9.1C语言以外的语言 
在上述第1实施方式中,示出保持秘密信息的程序为C语言的情况,但不限于此。也可以是由Java(注册商标)字节代码、Java(注册商标)语言、汇编语言、机器语言等记述的程序。 
在Java(注册商标)字节代码的情况下,在生成C语言的程序指令‘goto’语句的处理中,使用程序指令‘goto’、‘goto_w’。程序指令‘goto’、‘goto_w’的使用区别是公知的,所以这里省略说明。 
关于其它的生成的指令,依照Java(注册商标)字节代码中的记述方法,生成相同的指令。 
另外,在发现无条件分支指令的处理中,发现Java(注册商标)字节代码中的无条件分支,在发现条件分支指令的处理中,发现Java(注册商标)字节代码中的复合分支、条件分支。 
另外,在适用Java(注册商标)语言时,Java(注册商标)语言中没有对应于程序指令‘goto’的指令。从而,将各块作为方法生成,向包含构成程序出口的程序指令的方法追加抛出(throw)异常(exception)的程序指令,将捕捉(catch)抛出的异常的程序指令追加到包含构成程序入口的指令的方法中。方法、异常的记述方式是公知的,所以省略说明。 
其它的生成的指令,依照Java(注册商标)语言中的记述方法,生成相同的指令。 
在Java(注册商标)语言中,在发现无条件分支指令的处理中,发现程序指令‘break’、‘continue’、‘return’、‘throw’。 
在发现条件分支指令的处理中,发现‘if-else’、‘switch’、‘while’、‘do-while’、‘for’、‘try、catch,finally’。这些程序指令是公知的,所以省略说明。 
在汇编语言的情况下,因使用的汇编语言不同,指令组也不同,但例如在基于GAS的汇编语言的情况下,在生成C语言的程序指令‘goto’语句的处理中,使用程序指令‘jmp’。 
另外,在发现无条件分支指令的处理中,发现程序指令‘jmp’、 ‘call’、‘ret’、‘hlt’。 
在发现条件分支指令的处理中,发现‘jmp’以外的跳跃指令。GAS汇编语言是公知的,所以省略说明。 
就机器语言而言,因使用的机器语言不同,指令组也不同,但依照各自的记述方法来记述。 
在使用机器语言的情况下,也可构成为使用下面的处理来代替变形例3中所述的switch语句的生成。即,生成使用开始节点指定用变量作为自变量的相对跳跃指令(使程序计数器仅以被指定为自变量的变量值的量动作的指令),代替生成switch语句。对开始节点指定用变量设定可利用生成的相对跳跃指令跳跃至对应于开始节点的地址的值,代替设定switch语句的case语句中使用的值。 
1.9.2块分割 
在上述第1实施方式中,在块分割时分割成基本块之后,再生成分割后块,但也可不分割成基本块,利用仅基于行数的分割,生成分割后块。 
在采取这种构成的情况下,程序难破解化装置在插入等效程序指令时,在等效程序指令插入对象块中包含的最先的分支指令之前、且最后合流位置之后,插入等效程序指令。 
1.10其它变形例 
根据上述实施方式说明了本发明,但本发明当然不限于上述实施方式。下面的情况也包含于本发明中。 
(1)在上述第1实施方式中,程序难破解化装置10接收的位置信息,是难破解化对象程序中保持秘密信息的程序指令的行序号,但不限于此。 
位置信息也可使用常数的宏名称来指定。即,也可构成为将具有事先确定的规定名称的宏的程序指令,处理为位置信息。 
或者,位置信息也可使用标签来指定。即,也可构成为将事先确定的规定名称的标签所在程序上的行的下一行,处理为位置信息。 
或者,也可构成为使用具有事先确定的规定前缀、后缀的宏/标签来代替这里所述的规定名称的宏/标签,指定位置信息。 
(2)在上述第1实施方式中,程序难破解化装置10事先存储伪装块数量,但不限于此。 
程序难破解化装置10也可将难破解化对象程序的复杂度设为e,使用下式,取得伪装块数量。 
(生成的伪装块数量)=(规定数量)-e 
这里,复杂度是用程序中包含的程序指令数量、或环路数量、或程序中使用的变量的数量、或它们的组合等,将程序的复杂性指标化后的值,当发现易发生故障(bug)的程序时等使用。 
这里,所谓规定数量是对应于用户期望的难破解化强度确定的数量。 
这里,说明规定数量的确定。规定数量与难破解化强度之间的关系如图22所示,若强度增加,则规定数量单调增加(图22所示的函数G)。图G300用y=aX+b表示。由此,若确定用户期望的强度,则唯一确定规定数量。程序难破解化装置将通过从确定的规定数量中减去难破解化对象程序的复杂度e所得到的结果,设为伪装块数量。 
或者,也可将从确定的节点数量中减去分割后块的个数的结果,作为伪装块数量。 
(3)在上述第1实施方式中,程序难破解化装置10事先存储对应于用户期望的难破解化强度确定的数量、即规定数量,但不限于此。 
程序难破解化装置10也可在每次对程序进行难破解化时,由输入部101接收难破解化强度的指定,使用对应于指定的强度的规定数量,进行难破解化。 
或者,程序难破解化装置10也可在每次对程序进行难破解化时,由输入部101接收对应于难破解化强度的规定数量,使用接收到的规定数量,进行难破解化。 
或者,程序难破解化装置10也可在每次对程序进行难破解化时,从其它程序接收难破解化强度的指定,使用对应于指定的强度的规定数量,进行难破解化。 
或者,程序难破解化装置10也可在每次对程序进行难破解化时,从其它程序接收对应于难破解化强度的规定数量,使用接收到的规定 数量,进行难破解化。 
(4)在上述第1实施方式中,程序难破解化装置10对全部伪装块主体的每个,插入伪装等效程序指令,生成伪装等效程序指令插入后伪装块,但不限于此。 
程序难破解化装置10也可向生成的多个伪装块主体中的1个以上的伪装块主体插入伪装等效程序指令,生成伪装等效程序指令插入后伪装块。 
(5)在上述第1实施方式中,程序难破解化装置10也可根据伪分支指令插入后程序,使用块分割部,生成1个以上分割后块,并根据生成的1个以上分割后块,生成被替换块群。 
或者,根据伪分支指令插入后程序中包含的、由正常系统的动作执行的1个以上块构成的部分程序,使用块分割部,生成1个以上分割后块,根据生成的1个以上分割后块、与伪分支指令插入后程序中包含的、正常系统的动作不执行的1个以上块(相当于伪装块),生成被替换块群。 
(6)在上述第1实施方式及变形例中,作为表示图难易度(强度)的指标实例,使用‘(边缘数量)-(节点数量)’、闭路数量、平面图,但不限于此。 
作为表示图难易度的指标,也可以是由第1规定数量以上的节点构成的闭路的数量。此时,程序难破解化装置10例如事先存储‘3’,作为第1规定数量,事先存储‘4’,作为表示闭路数量最小值的第2规定数量。 
程序难破解化装置10的伪装块插入后程序生成部105根据生成的图,取得由3个以上节点构成的全部闭路。 
伪装块插入后程序生成部105判定取得的闭路数量是否为第2规定数量以上。 
在判定为闭路数量是规定数量以上的情况下,伪装块插入后程序生成部105中止处理。 
在判定为不是规定数量以上的情况下,伪装块插入后程序生成部105与第1实施方式一样,从构成TMP块群的TMP块中,随机选择 插入条件分支指令的TMP块,根据选择到的TMP块,生成新的TMP块。 
(7)在上述第1实施方式中,被隐匿信息设为常数,但不限于此。被隐匿信息也可以是由1个以上程序指令构成的指令群。 
例如,也可将基于分支指令的分支目的地设为被隐匿信息。具体而言,在将分支指令‘goto label D;’的分支目的地‘label D’设为被隐匿信息的情况下,也可分解成‘x=0;’、‘x=x+3’、‘if(x==2)thengoto label B;’和‘if(x==3)then goto label D;’。此时,向伪装块追加例如使用变量x的运算式、分支到标签D的指令、和对应于变量x中存储的值来变更分支目的地的指令等中至少1个程序指令。追加的程序指令的具体例是‘x=x+5;’、‘if(x==5)then goto label D;’、和‘if(x==4)then goto label A;’。这里,程序指令的概念中也包含运算式。另外,上述记载的‘label A’和‘label B’是例如难破解化对象程序中记载的标签名。 
另外,例如将两个程序指令‘a=a*10;a=a+5;’设为被隐匿信息,程序难破解化装置据此生成‘a=a*2;’、‘a=a+1;’、‘a=a*5;’这3个,作为等效程序指令。此时,向伪装块追加使用变量a的运算式。例如为‘a=a*5+2;’。 
(8)在上述第1实施方式中,使用秘密信息用变量,但不限于此。也可不使用秘密信息用变量。 
例如,也可将‘b=a^3’设为被隐匿信息,将其分解为‘b=a;’、‘b=b*a+4;’、‘b=(b-4)*a;’。此时,向伪装块追加例如使用了变量a、b双方的运算式、或使用了其一方的运算式中至少1个运算式。追加的运算式的具体例是‘b=b*a-6;’、‘b=b+2;’、‘a=a+1;’。 
另外,例如也可将‘b=9;’分解成‘将值8写入文件A的指令’、‘读入文件A的指令’、‘将读入的值代入变量b的指令’、‘向代入了读入值的变量b加1的指令’。或者,也可分解成‘将值8写入文件A的指令’、‘读入文件A的指令’、‘将读入的值代入变量c的指令’、‘向代入了读入值的变量c加1的指令’、和‘将加法结果代入变量b的指令’。此时,向伪装块追加例如使用变量b的运 算式、文件A的写入指令或文件A的读入指令、读入文件A、将读入的值代入变量b的指令等中至少1个程序指令。追加的运算式的具体例是‘b=b*3+1;’、‘将值3write(写入)文件A;’‘b=read函数(文件A的读入);’。这里,程序指令的概念中也包含运算式。 
(9)在上述第1实施方式中,程序难破解化装置也可使用多个分割后块、与1个以上伪装等效程序指令插入后伪装块,生成被替换块群。另外,也可向分割后块的每个赋予标签名。 
或者,程序难破解化装置也可使用多个分割后块、与1个以上TMP块,生成被替换块群。另外,也可向分割后块的每个赋予标签名。 
(10)在上述第1实施方式中,配置顺序替换部108随机替换除了构成开始节点的被替换块之外的、其它被替换块的配置顺序,但不限于此。 
配置顺序替换部108也可随机替换包含构成开始节点的被替换块的全部被替换块的配置顺序。此时,配置顺序替换部108根据替换结果,在程序中包含的处理部的开头位置中存在作为伪装块的被替换块的情况下,在该被替换块的开头,插入始终分支到包含处理群A的被替换块(构成开始节点的块)的无条件分支指令或条件分支指令。 
由此,即便在程序的开始位置存在伪装块的情况下,难破解化程序也始终从正确的块开始执行。 
(11)在上述第1实施方式中,程序难破解化装置10对等效程序指令的插入对象块,插入1个等效程序指令,但不限于此。程序难破解化装置10也可对插入对象块插入2个以上等效程序指令。 
(12)在上述第1实施方式中,程序难破解化装置10在从作为开始节点的块至作为秘密保有节点的块中存在的各块中,插入等效程序指令,但不限于此。程序难破解化装置10也可在从作为开始节点的块至作为秘密保有节点的块中存在的各块中的1个以上块中,依次插入等效程序指令。 
(13)在上述第1实施方式中,程序难破解化装置10在将难破解化对象程序分割成多个分割后块之后,插入等效程序指令,但不限于此。 程序难破解化装置10也可在难破解化对象程序中,从最初执行的程序指令至包含被隐匿信息的程序指令之间,插入生成的第1~第N等效程序指令。 
此时,程序难破解化装置10也可在插入第1~第N等效程序指令之后,分割成多个分割后块。或者,程序难破解化装置10也可在插入第1~第N等效程序指令之后,再插入伪装块,并插入始终绕过插入的伪装块的分支指令。此时,程序难破解化装置10例如在紧挨着插入的伪装块的后面,赋予标签,使插入的分支指令的分支目的地表示赋予的标签。 
这里,所谓绕过伪装块的分支指令是表示分支到不包含于伪装块中的其它程序指令、以不执行伪装块中包含的全部程序指令的指令。 
(14)在上述第1实施方式中,程序难破解化装置10将被隐匿信息的值置换为秘密信息用变量,之后,插入与等效程序指令插入对象块的每个相对应的等效程序指令,但不限于此。 
程序难破解化装置10也可在插入与等效程序指令插入对象块的每个相对应的等效程序指令之后,将被隐匿信息的值置换为秘密信息用变量。 
(15)在上述第1实施方式中,对正常系统执行中必需全部指令的程序进行难破解化。因此,为了保证难破解化后的程序在正常系统中适当动作,必需在各分割后块(下面简称为‘块’。)的最后,插入分支到接着应执行的块的开头的分支指令。 
但是,在下面的情况下,不必采取这种分支指令的插入方式。 
例如,在作为输入提供的程序中已包含正常系统中不需要的虚拟指令的情况下,由于程序的分割方式不同,有可能在块的开头包含虚拟指令,或在最后包含虚拟指令。这种情况考虑由本发明的方法进一步对利用其它难破解化方法难破解化后的程序进行难破解化的情况等。 
在提供这种程序作为输入的情况下,由于即便对虚拟指令省略执行也不影响正常系统的动作,所以也可通过插入将正常系统中必需的指令开始的部位设为分支目的地的分支指令,从而可省略位于块开头 的虚拟指令的执行。 
另外,也可通过在正常系统中必需的指令结束的部位插入分支指令,从而省略位于块最后的虚拟指令的执行。 
(16)另外,就插入伪装块的分支指令或始终不分支到分支目的地的条件分支指令的分支目的地而言,分支到哪儿均不影响正常系统的执行。因此,这些指令不必设为分支到块开头的分支指令,也可分支到块的中途。 
(17)本发明的所谓指令群由1个以上的指令构成。即,本发明中的指令群还包含由1个指令构成的情况。 
(18)上述各装置具体而言是由微处理器、ROM、RAM、硬盘单元、显示器单元、键盘、鼠标等构成的计算机系统。在所述RAM或所述硬盘单元中存储计算机程序。这里,计算机程序为了实现规定的功能,组合多个表示对计算机的指令的指令代码来构成。通过所述微处理器根据所述计算机程序动作,各装置实现其功能。即,所述微处理器1个个地读出所述计算机程序中包含的各指令,破解读出的指令,根据破解结果进行动作。 
(19)构成上述各装置的构成要素的一部分或全部也可由一个系统LSI(Large Scale Integration:大规模集成电路)构成。系统LSI是在一个芯片上集成多个构成部制造的超多功能LSI,具体而言,是包含微处理器、ROM、RAM等构成的计算机系统。在所述RAM中存储计算机程序。通过所述微处理器根据所述计算机程序动作,系统LSI实现其功能。 
这里为LSI,但也可根据集成度的不同称为IC、系统LSI、超LSI、甚LSI。 
另外,集成电路化的方法不限于LSI,也可由专用电路或通用处理器来实现。也可利用在LSI制造后可编程的FPGA(FieldProgrammable Gate Array:现场可编程门阵列)或可再构成LSI内部的电路单元连接或设定的可重构处理器。 
并且,如果因半导体技术的进步或派生的其它技术而出现置换LSI的集成电路化技术,则当然也可使用该技术来进行功能块的集成 化。可适应于生物技术等。 
(20)构成上述各装置的构成要素的一部分或全部也可由可拆装于各装置上的IC卡或单体模块构成。所述IC卡或所述模块是由微处理器、ROM、RAM等构成的计算机系统。所述IC卡或所述模块也可包含上述超多功能LSI。通过微处理器根据计算机程序动作,所述IC卡或所述模块实现其功能。该IC卡或该模块也可具有耐篡改性。 
(21)本发明也可以是上述所示的方法。另外,也可是由计算机来实现这些方法的计算机程序,或是由所述计算机程序构成的数字信号。 
另外,本发明也可将所述计算机程序或所述数字信号记录在计算机可读的记录媒体中,例如软盘、硬盘、CD-ROM、MO、DVD、DVD-ROM、DVD-RAM、BD(Blu-ray Disc:蓝光光盘)、半导体存储器等中。另外,也可以是记录在这些记录媒体中的所述计算机程序或所述数字信号。 
另外,本发明也可经由电气通信线路、无线或有线通信线路、以因特网为代表的网络、数据广播等来传输所述计算机程序或所述数字信号。 
另外,本发明也可以是具备微处理器与存储器的计算机系统,所述存储器存储上述计算机程序,所述微处理器根据所述计算机程序动作。 
另外,也可通过将所述程序或所述数字信号记录在所述记录媒体中移送,或经由所述网络等移送所述程序或所述数字信号,由独立的其它计算机系统来实施。 
(22)也可分别组合上述实施方式及上述变形例。 
1.11汇总 
(1)本发明是一种对程序进行难破解化的程序难破解化装置,其特征在于,具有:等效程序指令群生成部件,生成具有与第一程序指令群相同功能的第二程序指令群,其中该第一程序指令群由包含使用第一输入程序中的被隐匿信息的程序指令或被隐匿指令的至少一个以上程序指令构成;等效程序生成部件,从所述第一输入程序中去除所 述第一程序指令群,插入所述第二程序指令群,生成第一输出程序;和伪装块插入后程序生成部件,当为了得到正常系统的执行结果而任意执行时,生成由未执行的一个以上程序指令构成的伪装块,将所述伪装块插入第二输入程序中,生成第二输出程序,至少一个所述伪装块的程序指令中的至少之一,使用构成所述第二程序指令群的程序指令所使用的变量。 
(2)这里,在上述(1)所示的程序难破解化装置中,所述伪装块的至少一个具有分支到所述第二输入程序之一的程序指令的分支指令。 
(3)这里,上述(1)所示的程序难破解化装置还具有程序分割部件,将第三输入程序分割成由1个以上程序指令构成的分割后块,所述伪装块插入后程序生成部件将所述分割后块的每个与所述伪装块的每个视为节点,在第一所述节点中存在分支到第二所述节点的分支指令的情况下,视为所述第一所述节点与所述第二所述节点之间存在边缘,另外,在所述第一所述节点的最后程序指令是无条件分支指令以外的程序指令、与所述最后程序指令相对应的所述第二输入程序的程序指令的后一个的程序指令所对应的所述节点是所述第二所述节点的情况下,视为在所述第一所述节点与所述第二所述节点之间存在边缘,生成所述伪装块,以使得在所述节点与所述边缘构成的图中,闭路成为事先提供的第一规定数量以上。 
(4)这里,上述(3)所示的程序难破解化装置还具有输入所述提供的第一规定数量的输入部件。 
(5)这里,上述(2)所示的程序难破解化装置还具有程序分割部件,将所述第二输入程序分割成由1个以上程序指令构成的程序指令群——即分割后程序,所述伪装块插入后程序生成部件将所述分割后块的每个与所述伪装块的每个视为节点,在第一所述节点中存在分支到第二所述节点的分支指令的情况下,视为所述第一所述节点与所述第二所述节点之间存在边缘,另外,在所述第一所述节点的最后程序指令是无条件分支指令以外的程序指令、与所述最后程序指令相对应的所述第二输入程序的程序指令的后一个的程序指令所对应的所述节点是所述第二所述节点的情况下,视为在所述第一所述节点与所述第 二所述节点之间存在边缘,生成伪装块,以使得所述节点与所述边缘构成的图中,由事先提供的第一规定数量以上的节点数量构成的闭路数量为事先提供的第二规定数量以上。 
(6)这里,上述(5)所示的程序难破解化装置还具有输入所述提供的第一规定数量的输入部件。 
(7)这里,上述(5)所示的程序难破解化装置还具有输入所述提供的第二规定数量的输入部件。 
(8)这里,在上述(2)所示的程序难破解化装置中,所述伪装块插入后块生成部件还具有程序分割部件,将所述第二程序分割成由1个以上程序指令构成的程序指令群——即分割后块,所述伪装块插入后程序生成部件将所述分割后块的每个视为节点,在第一所述节点中存在分支到第二所述节点的分支指令的情况下,视为所述第一所述节点与所述第二所述节点之间存在边缘,另外,在所述第一所述节点的最后程序指令是无条件分支指令以外的程序指令、与所述最后程序指令相对应的所述第二输入程序的程序指令的后一个的程序指令所对应的所述节点块是所述第二所述节点的情况下,视为在第一所述节点与第二所述节点之间存在边缘,生成由所述节点与所述边缘构成的第一图,将所述节点块的每个与所述伪装块的每个视为节点,在第一所述节点中存在分支到第二所述节点的分支指令的情况下,视为所述第一所述节点与所述第二所述节点之间存在边缘,另外,在所述第一所述节点的最后程序指令是无条件分支指令以外的程序指令、与所述最后程序指令相对应的所述第二输入程序的程序指令的后一个的程序指令所对应的所述节点块是所述第二所述节点的情况下,视为在第一所述节点与第二所述节点之间存在边缘,生成由所述节点与所述边缘构成的第二图,生成伪装块,以使得从所述第二图发现所述第一图的子图同构判定问题的难易度为事先提供的第一规定数量以上。 
(9)这里,上述(8)所示的程序难破解化装置还具有输入所述提供的第一规定数量的输入部件。 
(10)这里,上述(1)或(2)所示的程序难破解化装置还具有伪分支指令插入后程序生成部件,将第三输入程序在任意位置分割成第一块与 第二块,在为了得到正常系统的执行结果而任意执行时,将利用真假值为恒定的第一值的分支条件确定分支目的地的条件分支指令追加到所述第一块的最后,生成第三块,并生成由所述第三块与所述第二块构成的第三输出程序,所述条件分支指令中所述分支条件取所述第一值时的分支目的地为所述第二块的开头。 
(11)这里,在上述(1)所示的程序难破解化装置中,所述等效程序指令群生成部件生成所述第二程序指令群,该第二程序指令群的功能在替换构成所述第一输出程序中包含的所述第二程序指令群的至少一组两个程序指令的程序由正常系统执行任一时、与所述第一输出程序的功能不同。 
(12)这里,上述(1)或(2)所示的程序难破解化装置还具有细分化块生成部件,将第四输入程序分割成由1个以上程序指令构成的细分化块;被替换块生成部件,根据各个所述细分化块,生成被替换块;和配置顺序替换后程序生成部件,改变所述被替换块的配置顺序,生成第四输出程序,所述被替换块生成部件向所述第一所述细分化块的最后,追加分支到第一所述细分化块的最后程序指令所对应的所述第四输入程序的程序指令的、下一程序指令所对应的所述第二所述细分化块的分支指令,并设为被替换块。 
(13)这里,在上述(12)所示的程序难破解化装置中,所述被替换块生成部件在所述第一所述细分化块的最后程序指令不是无条件分支的情况下,将把分支到所述第四输入程序的程序指令的、下一程序指令所对应的所述第二细分化块的分支指令追加到所述第一所述细分化块的最后而得到的块,设为被替换块。 
(14)这里,上述(1)或(2)所示的程序难破解化装置还具有细分化块生成部件,在包含所述伪装块的第四输入程序中,将存在于所述伪装块之外的程序指令构成的程序指令群分割成由1个以上程序指令构成的细分化块,生成细分化块;被替换块生成部件,根据所述细分化块或作为所述伪装块的小块,生成被替换块;和配置顺序替换后程序生成部件,改变所述被替换块的配置顺序,生成第四输出程序,所述被替换块生成部件将把分支到第一所述小块的最后程序指令所对应 的所述第四输入程序的程序指令的、下一程序指令所对应的所述第二所述小块的分支指令追加到所述第一所述小块的最后而得到的块,设为被替换块。 
(15)这里,上述(1)或(2)所示的程序难破解化装置还具有被替换块生成部件,将构成第四输入程序的伪装块的每个与分割后块的每个设为细分化块,根据各个所述细分化块,生成被替换块;和配置顺序替换后程序生成部件,改变所述被替换块的配置顺序,生成第四输出程序,所述被替换块生成部件将把分支到第一所述细分化块的最后程序指令所对应的所述第二输入程序的下一程序指令所对应的第二细分化块的分支指令、追加到所述第一细分化块的最后而得到的块,设为被替换块。 
产业上的可利用性 
上述所示的程序难破解化装置可在电器设备制造产业中经营地、且继续和反复地制造并出售。另外,本发明的程序难破解化装置可在加密具有著作权的数据并分配的服务产业中经营地、且继续和反复地使用。 

Claims (19)

1.一种程序难破解化装置,根据由1个以上正当程序指令构成、并包含含有应隐匿的被隐匿信息的隐匿处理指令群的原始程序,生成在正常系统中的执行结果与上述原始程序的执行结果相同的难破解化程序,其特征在于:
具备:
处理指令生成部件,生成多个处理指令,若执行依照确定的处理顺序的处理,则该多个处理指令通过最后的处理可得到与基于所述隐匿处理指令群的处理相同的结果;
处理指令插入部件,代替所述隐匿处理指令群,在从所述原始程序的开始到所述隐匿处理指令群出现为止之间,插入所述多个处理指令的每个,以按所述处理顺序执行;
伪装块生成部件,生成至少1个由为了得到在所述正常系统中的执行结果而不需要的伪装处理指令构成的伪装块;以及
伪装块插入部件,在所述原始程序中,插入所述伪装块和控制成绕过所述伪装块的控制指令,
所述伪装块插入部件在被插入到所述原始程序的至少1个伪装块中插入分支指令。
2.根据权利要求1所述的程序难破解化装置,其特征在于:
所述伪装块生成部件,生成至少1个扰乱所述多个处理指令的伪装块。
3.根据权利要求2所述的程序难破解化装置,其特征在于:
所述伪装块插入部件在所述伪装块中,插入以所述正常系统执行的执行程序指令和其它伪装块中包含的伪装处理指令中的某一个为分支目的地的分支指令。
4.根据权利要求3所述的程序难破解化装置,其特征在于:
所述执行程序指令是所述正当程序指令和所述处理指令中的某一个。
5.根据权利要求2所述的程序难破解化装置,其特征在于:
所述隐匿处理指令群是包含所述被隐匿信息作为运算对象的隐匿运算式,
所述处理指令是对秘密变量代入运算结果的运算式,
所述伪装处理指令是将所述秘密变量作为运算对象的伪装运算式,
所述处理指令生成部件生成多个运算式,若执行依照确定的处理顺序的处理,则该多个运算式通过最后的运算可得到与基于所述隐匿运算式的运算相同的值,
所述处理指令插入部件具备:
置换部件,将所述原始程序包含的被隐匿信息置换为所述秘密变量;和
插入部件,在从所述原始程序的开始到所述隐匿处理指令群出现之间,插入所述多个运算式的每个,以按所述处理顺序执行。
6.根据权利要求2所述的程序难破解化装置,其特征在于:
所述原始程序按处理顺序排列包含1个以上所述正当程序指令的多个原始块,
所述处理指令插入部件,将所述多个处理指令的每个,插入到从最初执行的原始块起至具有所述隐匿处理指令群的原始块为止的某一个中,
所述伪装块插入部件具备:
第1生成部件,将所述多个原始块和所述伪装块的每个作为节点,根据所述原始块的处理顺序、所述原始块中包含的分支指令、和所述伪装块中包含的分支指令,生成图;
判定部件,判定生成的图的难易度是否满足规定条件;
第2生成部件,在判定为满足规定条件的情况下,将所述伪装块与所述控制指令插入到所述原始程序中,在判断为不满足规定条件的情况下,将以所述多个原始块和其它伪装块中的1个块为分支目的地的条件分支指令,插入到1个伪装块中;和
控制部件,进行控制,以便执行所述第1生成部件、所述判定部件与所述第2生成部件的处理,直到满足所述规定条件。
7.根据权利要求6所述的程序难破解化装置,其特征在于:
所述程序难破解化装置还具备接受部件,接受难破解化的强度的指定,
满足所述规定条件是指,根据连结节点间的边缘数量和节点数量算出的值、即边缘数量-节点数量,为由与指定的所述强度相对应的图的难易度确定的规定数量以上,
所述判定部件根据所述第1生成部件生成的图,取得边缘数量与节点数量,判定边缘数量-节点数量的值是否为所述规定数量以上。
8.根据权利要求6所述的程序难破解化装置,其特征在于:
所述程序难破解化装置还具备接受部件,接受难破解化的强度的指定,
满足所述规定条件是指,图中的闭路的数量为由与指定的所述强度相对应的图的难易度确定的规定数量以上,
所述判定部件根据所述第1生成部件生成的图,取得闭路数量,判定取得的闭路数量是否为所述规定数量以上。
9.根据权利要求6所述的程序难破解化装置,其特征在于:
满足所述规定条件是指,图不是平面图,
所述判定部件判定所述第1生成部件生成的图是否是平面图,在判定为不是平面图的情况下,认为满足所述规定条件。
10.根据权利要求6所述的程序难破解化装置,其特征在于:
所述程序难破解化装置还具备接受部件,接受难破解化的强度的指定,
满足所述规定条件是指,由第1规定数量以上的节点数量构成的闭路的数量,为由与指定的所述强度相对应的图的难易度确定的第2规定数量以上,
所述判定部件根据所述第1生成部件生成的图,取得由第1规定数量以上的节点数量构成的闭路的数量,判定取得的闭路数量是否为所述第2规定数量以上。
11.根据权利要求6所述的程序难破解化装置,其特征在于:
所述处理指令是对秘密变量代入运算结果的运算式,
所述伪装块插入部件,对于所述原始块,在所述原始块中插入条件分支指令,该条件分支指令包含在所述运算式按所述处理顺序执行的情况下、真假值为恒定值的比较式,并且该条件分支指令将通过所述比较式使真假值成为所述恒定值时的分支目的地作为接着执行的下一原始块,
在所述伪装块被插入到紧挨着所述原始块的后面的情况下,将所述条件分支指令作为所述控制指令。
12.根据权利要求2所述的程序难破解化装置,其特征在于:
所述原始程序按处理顺序排列包含1个以上所述正当程序指令的多个原始块,
所述处理指令插入部件,将所述多个处理指令的每个,插入到从最初执行的原始块起至具有所述隐匿处理指令群的原始块为止的某一个中,
所述伪装块插入部件具备:
第1生成部件,将所述多个原始块和所述伪装块的每个作为节点,根据所述原始块的处理顺序、所述原始块中包含的分支指令、和所述伪装块中包含的分支指令,生成图;
判定部件,判定生成的图的强度是否满足规定条件;
第2生成部件,在判定为满足规定条件的情况下,将所述伪装块与所述控制指令插入到所述原始程序中,在判断为不满足规定条件的情况下,将以所述多个原始块和其它伪装块中的1个块为分支目的地的条件分支指令插入到1个伪装块中,或在1个原始块中,将1个伪装块作为分支目的地,将总是不分支到所述分支目的地的条件分支指令插入到所述原始块中;和
控制部件,进行控制,以便执行所述第1生成部件、所述判定部件与所述第2生成部件,直到满足所述规定条件。
13.根据权利要求2所述的程序难破解化装置,其特征在于:
所述处理指令生成部件生成所述多个处理指令,以便仅在按所述处理顺序执行的情况下、得到与基于所述隐匿处理指令群的处理相同的结果。
14.根据权利要求1所述的程序难破解化装置,其特征在于:
所述伪装块插入部件具备:
分割部件,将所述原始程序分割成由1个以上正当程序指令构成的多个分割块;
块生成部件,根据除了包含所述原始程序中最后执行的正当程序指令的分割块之外的1个以上分割块的每个,对分割块生成包含表示接着执行的分割块的分支指令的分割块;
块替换部件,替换除了包含所述原始程序中最初执行的正当程序指令的分割块之外的、包含分支指令的其它分割块、以及包含所述原始程序中最后执行的正当程序指令的分割块的配置顺序;和
插入部件,将所述伪装块插入到所述原始程序中,
在位于紧挨着所述伪装块插入之处的前面的分割块中包含分支指令的情况下,将该分支指令作为所述控制指令。
15.根据权利要求14所述的程序难破解化装置,其特征在于:
所述分割部件还将所述伪装块分割成由1个以上程序指令构成的多个伪装分割块,
所述块生成部件还根据所述伪装分割块的每个,对伪装分割块生成包含表示其它伪装分割块的分支指令的伪装分割块,
所述插入部件将所述伪装分割块的每个插入到所述原始程序中。
16.根据权利要求14所述的程序难破解化装置,其特征在于:
所述块生成部件还根据所述伪装块,对所述伪装块生成包含表示1个分割块或其它伪装块的分支指令的伪装分割块,
所述插入部件将所述伪装分割块的每个插入到所述原始程序中。
17.根据权利要求2所述的程序难破解化装置,其特征在于:
所述原始程序事先被分割成包含1个以上所述正当程序指令的多个分割块,所述多个分割块按处理顺序排列,
所述处理指令插入部件,在从最初执行的分割块到具有所述隐匿处理指令群的分割块为止的之间,插入所述多个处理指令的每个,
所述伪装块插入部件具备:
块生成部件,根据除了包含所述原始程序中最后执行的正当程序指令的分割块之外的1个以上分割块的每个,对分割块生成包含表示接着执行的分割块的分支指令的分割块;
块替换部件,替换除了包含所述原始程序中最初执行的正当程序指令的分割块之外的、包含分支指令的其它分割块、以及包含所述原始程序中最后执行的正当程序指令的分割块的配置顺序;和
插入部件,将所述伪装块插入到所述原始程序中,
在位于紧挨着所述伪装块插入之处的前面的分割块中包含分支指令的情况下,将该分支指令作为所述控制指令。
18.根据权利要求17所述的程序难破解化装置,其特征在于:
所述块生成部件还根据所述伪装块,对所述伪装块生成包含表示1个分割块或其它伪装块的分支指令的伪装分割块,
所述插入部件将所述伪装分割块的每个插入到所述原始程序中。
19.一种程序难破解化装置中使用的难破解化方法,根据由1个以上正当程序指令构成、并包含含有应隐匿的被隐匿信息的隐匿处理指令群的原始程序,生成在正常系统中的执行结果与上述原始程序的执行结果相同的难破解化程序,其特征在于:
所述程序难破解化装置具备存储所述原始程序的存储部件,
所述难破解化方法包含:
处理指令生成步骤,生成多个处理指令,若执行依照确定的处理顺序的处理,则该多个处理指令通过最后的处理可得到与基于所述隐匿处理指令群的处理相同的结果;
处理指令插入步骤,代替所述隐匿处理指令群,在从所述原始程序的开始到所述隐匿处理指令群出现为止之间,插入所述多个处理指令的每个,以按所述处理顺序执行;
伪装块生成步骤,生成至少1个由为了得到在所述正常系统中的执行结果而不需要的伪装处理指令构成的伪装块;和
伪装块插入步骤,在所述原始程序中,插入所述伪装块和控制成绕过所述伪装块的控制指令,
所述伪装块插入步骤,在被插入到所述原始程序的至少1个伪装块中插入分支指令。
CN2006800224218A 2005-04-21 2006-04-21 程序难破解化装置和难破解化方法 Active CN101203859B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP124114/2005 2005-04-21
JP2005124114 2005-04-21
PCT/JP2006/308456 WO2006115219A1 (ja) 2005-04-21 2006-04-21 プログラム難読化装置及び難読化方法

Publications (2)

Publication Number Publication Date
CN101203859A CN101203859A (zh) 2008-06-18
CN101203859B true CN101203859B (zh) 2013-08-14

Family

ID=37214834

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2006800224218A Active CN101203859B (zh) 2005-04-21 2006-04-21 程序难破解化装置和难破解化方法

Country Status (4)

Country Link
US (1) US8312297B2 (zh)
JP (1) JP4806402B2 (zh)
CN (1) CN101203859B (zh)
WO (1) WO2006115219A1 (zh)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4806402B2 (ja) * 2005-04-21 2011-11-02 パナソニック株式会社 プログラム難読化装置及び難読化方法
US8584109B2 (en) * 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance
JP5055993B2 (ja) * 2006-12-11 2012-10-24 ソニー株式会社 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
JP4989418B2 (ja) * 2007-10-26 2012-08-01 三菱電機株式会社 プログラム変換装置及びプログラム及びプログラム変換方法
JP5300294B2 (ja) * 2008-03-25 2013-09-25 パナソニック株式会社 処理装置、難読化装置、プログラムおよび集積回路
US8800048B2 (en) * 2008-05-20 2014-08-05 Microsoft Corporation Software protection through interdependent parameter cloud constrained software execution
FR2942558B1 (fr) * 2009-02-24 2014-05-30 Eads Europ Aeronautic Defence Procede d'obscurcissement d'un programme d'ordinateur.
KR20110001618A (ko) * 2009-06-30 2011-01-06 애니포인트 미디어 그룹 장치-특화 및 애플리케이션-특화된 컴퓨팅 장치, 재생 장치 및 컴퓨팅 장치를 이용한 재생 장치의 제어 방법
JP5458184B2 (ja) 2009-10-08 2014-04-02 イルデト カナダ コーポレーション 動的ファンクションコールシステムにおけるアグレッシブな自動修正のためのシステムおよび方法
EP2506174B1 (en) * 2011-03-30 2019-01-09 Irdeto B.V. Enabling a software application to be executed on a hardware device
US8904279B1 (en) 2011-12-07 2014-12-02 Amazon Technologies, Inc. Inhibiting automated extraction of data from network pages
CN102582268A (zh) * 2012-01-10 2012-07-18 珠海天威技术开发有限公司 微控制器及其算法保护方法、存储芯片、耗材容器、成像设备
WO2014123552A1 (en) * 2013-02-08 2014-08-14 Mellmo Inc. Executing database queries using multiple processors
US9721120B2 (en) * 2013-05-14 2017-08-01 Apple Inc. Preventing unauthorized calls to a protected function
FR3011354A1 (fr) * 2013-10-01 2015-04-03 Commissariat Energie Atomique Procede d'execution par un microprocesseur d'un code binaire polymorphique d'une fonction predeterminee
US10521496B1 (en) 2014-01-03 2019-12-31 Amazon Technologies, Inc. Randomize markup to disturb scrapers
EP2913772A1 (de) * 2014-02-28 2015-09-02 Wibu-Systems AG Verfahren und Computersystem zum Schutz eines Computerprogramms gegen Beeinflussung
US9600672B1 (en) * 2014-12-04 2017-03-21 Amazon Technologies, Inc. Dynamic function switching
CN104504336B (zh) * 2014-12-30 2018-01-19 大连楼兰科技股份有限公司 防止嵌入式系统被恶意在线调试的方法和装置
US20160328539A1 (en) * 2015-05-05 2016-11-10 Nxp B.V. Obscuring Software Code With Split Variables
US10068070B2 (en) * 2015-05-05 2018-09-04 Nxp B.V. White-box elliptic curve point multiplication
EP3208789B1 (en) * 2016-02-22 2020-08-05 Eshard Method of protecting a circuit against a side-channel analysis
US11126718B2 (en) * 2017-07-12 2021-09-21 Acronis International Gmbh Method for decrypting data encrypted by ransomware
FR3096851B1 (fr) * 2019-05-27 2021-05-21 Idemia Identity & Security France Procedes de mise en œuvre et d’obfuscation d’un algorithme cryptographique a cle secrete donnee
CN112199667B (zh) * 2020-09-30 2024-06-21 常熟理工学院 软件保护方法、装置、设备及存储介质
EP4080386A1 (en) * 2021-04-19 2022-10-26 Thales DIS France SA Method to protect program in integrated circuit
FR3122747B1 (fr) * 2021-05-07 2023-03-31 Commissariat Energie Atomique Procede d’execution d’une fonction, securise par desynchronisation temporelle
CN117171766B (zh) * 2023-07-31 2024-04-05 上海交通大学 基于深度神经网络模型的数据保护方法、系统及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1215867A (zh) * 1998-11-17 1999-05-05 桂继东 计算机软件防盗版加密方法
CN1265494A (zh) * 2000-04-24 2000-09-06 后健慈 加解密内存及其存取控制方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IL98248A0 (en) * 1991-05-23 1992-06-21 Ibm Israel Instruction scheduler for a computer
US5410657A (en) * 1992-10-09 1995-04-25 International Business Machines Corporation Method and system for high speed floating point exception enabled operation in a multiscalar processor system
US5799179A (en) * 1995-01-24 1998-08-25 International Business Machines Corporation Handling of exceptions in speculative instructions
JP4739465B2 (ja) 1997-06-09 2011-08-03 インタートラスト テクノロジーズ コーポレイション ソフトウェアセキュリティを増強するための混乱化技術
US7263722B1 (en) * 1999-05-12 2007-08-28 Fraunhofer Crcg, Inc. Obfuscation of executable code
AU2003234381A1 (en) * 2002-05-10 2003-11-11 Applera Corporation Imaging system for reduction of interstitial image regions and its related method
US7383443B2 (en) * 2002-06-27 2008-06-03 Microsoft Corporation System and method for obfuscating code using instruction replacement scheme
JP3900485B2 (ja) * 2002-07-29 2007-04-04 インターナショナル・ビジネス・マシーンズ・コーポレーション 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体
GB2406943B (en) * 2002-12-12 2005-10-05 Advanced Risc Mach Ltd Processing activity masking in a data processing system
GB2405958A (en) * 2003-08-20 2005-03-16 Macrovision Europ Ltd Code obfuscation and controlling a processor by emulation
EP1758395A1 (en) * 2004-06-28 2007-02-28 Matsushita Electric Industrial Co., Ltd. Program creation device, program test device, program execution device, information processing system
JP4806402B2 (ja) * 2005-04-21 2011-11-02 パナソニック株式会社 プログラム難読化装置及び難読化方法
WO2006115217A1 (ja) * 2005-04-21 2006-11-02 Matsushita Electric Industrial Co., Ltd. プログラム変換装置及び秘密保持プログラム
US7620987B2 (en) * 2005-08-12 2009-11-17 Microsoft Corporation Obfuscating computer code to prevent an attack
US8302188B2 (en) * 2006-07-18 2012-10-30 Panasonic Corporation Instruction generation apparatus for generating a computer program resistant to unauthorized analyses and tampering
US8112636B1 (en) * 2007-11-06 2012-02-07 Lockheed Martin Corporation Protection of code or data from exposure by use of code injection service

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1215867A (zh) * 1998-11-17 1999-05-05 桂继东 计算机软件防盗版加密方法
CN1265494A (zh) * 2000-04-24 2000-09-06 后健慈 加解密内存及其存取控制方法

Also Published As

Publication number Publication date
CN101203859A (zh) 2008-06-18
WO2006115219A1 (ja) 2006-11-02
JPWO2006115219A1 (ja) 2008-12-18
US8312297B2 (en) 2012-11-13
US20090083521A1 (en) 2009-03-26
JP4806402B2 (ja) 2011-11-02

Similar Documents

Publication Publication Date Title
CN101203859B (zh) 程序难破解化装置和难破解化方法
Pollock et al. Phylogenetic diversity meets conservation policy: small areas are key to preserving eucalypt lineages
CN107770154B (zh) 基于云存储的区块链可靠数据存储方法、终端及系统
JP4970279B2 (ja) セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路
CN102132289B (zh) 用于代码迷惑的方法及设备
Lourenço et al. SGE: a structured representation for grammatical evolution
CN107908403A (zh) 一种移动端业务模块组件化的配置方法及系统
DK1796005T3 (da) Fremgangsmåde til konfigurering af en indretning
CN100555300C (zh) 程序变换装置、安全处理装置、计算机程序及记录媒体
CN101751333A (zh) 用于支援程序解析的方法、及其计算机程序以及计算机系统
CN105117621A (zh) 代码混淆的控制流平展化
CN108537012A (zh) 基于变量和代码执行顺序的源代码混淆方法及装置
Beldiceanu et al. Modelseeker: Extracting global constraint models from positive examples
KR101210339B1 (ko) 트리 구조에서의 노드 식별자 생성 방법
Pérez Lamancha et al. Testing product generation in software product lines using pairwise for features coverage
CN109101244A (zh) 一种ios系统一体化自动打包方法
CN101208690A (zh) 计算环境中翻译表达式
CN104618347A (zh) 一种游戏事件处理装置及方法、网络平台
CN107734081A (zh) 联系人标签的确定方法、介质、装置和计算设备
CN113031967B (zh) 一种代码转换方法及装置
Kowalski et al. Rule-based programming
CN109190367A (zh) 利用沙箱运行应用程序安装包的方法及装置
Conroy et al. A value equivalence approach for solving interactive dynamic influence diagrams
CN105579966B (zh) 数据处理设备和计算机可读分布介质
CN113127005B (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