国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      指令生成裝置的制作方法

      文檔序號:6455483閱讀:419來源:國知局
      專利名稱:指令生成裝置的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及生成能夠防止非法解析以及竄改的計(jì)算機(jī)程序的指令生成 裝置。
      背景技術(shù)
      a;+曾古n卜t沐的超i^由右.誠繭步防1卜非沐蠻^的超席-這匙程序
      的例子有,處理個人信息的程序或關(guān)于著作權(quán)管理的程序等。對于使用個 人信息等重要信息的程序,被竄改的程序的流出成為威脅,因此期望防止 竄改。并且,關(guān)于著作權(quán)管理的程序是,例如管理內(nèi)容的使用次數(shù)等,并 進(jìn)行使用限制的程序,而對于該程序,因被竄改而導(dǎo)致的使用限制的躲避 成為威脅,因此期望防止竄改。除了所述的例子以外,還存在軟件開發(fā)公 司開發(fā)的程序被改造來被其它公司銷售的威脅,或存在游戲程序與著作權(quán) 人的意圖相反來被改造的威脅等,因此期望程序的竄改防止技術(shù)。 '在以往的竄改防止技術(shù)中有,利用竄改校驗(yàn)的技術(shù)。在該方式,計(jì)算
      存儲器上的程序的散列值/校驗(yàn)和(checksum),并判定是否與預(yù)先算出了 的散列值/校驗(yàn)和相同,從而檢測竄改。
      圖l是示出包含以往的竄改校驗(yàn)處理的程序的圖。在圖1中,函數(shù)fl 示出竄改校驗(yàn)對象(保護(hù)對象)的處理指令群。假設(shè),函數(shù)fl是在計(jì)算機(jī)的 存儲器上被保持并執(zhí)行的程序,在存儲器上的地址0300 0400被保持。 函數(shù)f2示出竄改校驗(yàn)處理。處理指令"tmp=0;for(a=0300;a<0400;a++){t mp+^a;)"示出從地址0300到地址0400為止反復(fù)進(jìn)行以下工作的處理(散 列計(jì)算處理),該工作是:將存儲在變量a的位置的數(shù)據(jù)讀入,并將讀入了 的值加到變量tmp。通過該處理,能夠算出從地址0300到地址0400為止 的數(shù)據(jù)的和(校驗(yàn)和)。
      處理指令"if(tmp! =SUM){exitO;}"示出以下處理(判定/結(jié)束處理), 該處理是判定算出了的校驗(yàn)和是否與SUM相同,在真的情況下,繼續(xù)進(jìn)
      10行處理,在假的情況下,結(jié)束處理。在此,SUM是預(yù)先算出了的函數(shù)fl 的校驗(yàn)和。因此,在函數(shù)fl沒有被竄改的情況下,SUM的值與tmp相同, 但是,在函數(shù)fl被竄改的情況下,SUM的值與tmp不同。據(jù)此,根據(jù)SUM 的值是否與tmp相同,能夠知道函數(shù)fl是否被竄改。
      圖2是以往的竄改防止處理生成裝置的處理的說明圖。 以往的竄改防止處理生成裝置(指令生成裝置),獲得包含保護(hù)對象代碼 的輸入程序,向該輸入程序附加竄改校驗(yàn)處理,從而生成竄改防止程序。 保護(hù)對象代碼相當(dāng)于所述的函數(shù)fl的處理指令群,竄改防止程序相當(dāng)于圖 l示出的程序。
      若這些竄改防止程序由計(jì)算機(jī)執(zhí)行,則判斷保護(hù)對象代碼的散列值(校 驗(yàn)值)是否正當(dāng),在判斷為不正當(dāng)時,對保護(hù)對象代碼的竄改被檢測。
      如此,以往的竄改防止處理生成裝置,通過向輸入程序追加竄改校驗(yàn) 處理,從而防止包含被竄改的保護(hù)對象代碼的輸入程序的執(zhí)行。
      作為竄改校驗(yàn)以外的竄改防止技術(shù)有,監(jiān)視程序的動作的方法。專利 文獻(xiàn)1中記載有以下的技術(shù)向程序預(yù)先填充要進(jìn)行規(guī)定動作的處理指令, 在程序執(zhí)行時監(jiān)視實(shí)際上的程序的動作,確認(rèn)是否實(shí)際進(jìn)行填充了的動作, 從而檢測程序的竄改。
      專利文獻(xiàn)l:(日本)特開2005—173903號公報
      然而,圖2示出的以往的竄改防止處理生成裝置中存在的問題是,竄 改校驗(yàn)處理容易被非法解析人找到,來竄改校驗(yàn)處理被竄改且被無效化。
      例如,非法解析人,首先,將竄改防止程序的保護(hù)對象代碼(函數(shù)fl) 竄改,并執(zhí)行該竄改防止程序。而且,非法解析人,通過監(jiān)視竄改了的部 分是否被訪問以作為數(shù)據(jù),從而能夠容易找到竄改校驗(yàn)處理中的散列計(jì)算 處理。具體而言,通過使用調(diào)試程序,從而能夠找到竄改校驗(yàn)處理,該調(diào) 試程序具有監(jiān)視對指定了的地址的作為數(shù)據(jù)的讀出的功能。也就是,非法 解析人,在竄改保護(hù)對象代碼后,只要監(jiān)視竄改了的地址,就能夠找到讀 出該地址的數(shù)據(jù)的竄改校驗(yàn)處理的"tmp+=*a",從而能夠知道對竄改了的 地址進(jìn)行了竄改校驗(yàn)處理。
      于是,非法解析人,將判定/結(jié)束處理的處理指令"if(tmp! =SUM){exitO;}"竄改為,即使SUM和tmp不一致也不進(jìn)行任何處理的
      ii指令"if(tmp! =SUM){;}"。據(jù)此,竄改校驗(yàn)處理本身被無效化。
      并且,在如專利文獻(xiàn)1中記載的技術(shù)那樣監(jiān)視程序的動作的方法中, 也存在監(jiān)視工作的處理本身被找到、而被竄改的可能性。

      發(fā)明內(nèi)容
      于是,鑒于這些問題,本發(fā)明的目的在于提供一種指令生成裝置,生 成確實(shí)能夠保護(hù)保護(hù)對象代碼的程序。
      為了實(shí)現(xiàn)所述目的,本發(fā)明涉及的指令生成裝置,為了保護(hù)使計(jì)算機(jī) 將數(shù)據(jù)代入到被代入變量的第一處理指令,而生成由使所述計(jì)算機(jī)執(zhí)行的
      多個指令構(gòu)成的輸出處理指令群,其特點(diǎn)是,包括分支指令生成單元, 生成分支指令,以作為所述輸出處理指令群的一部分,所述分支指令,使 處理路徑分支到所述第一處理指令,以使所述計(jì)算機(jī)執(zhí)行所述第一處理指 令;以及依賴處理指令生成單元,生成依賴處理指令,以作為所述輸出處
      理指令群的一部分,所述依賴處理指令,依賴于示出所述計(jì)算機(jī)根據(jù)所述 分支指令執(zhí)行所述第一處理指令的結(jié)果的、被代入到所述被代入變量的數(shù) 據(jù),并在所述數(shù)據(jù)示出預(yù)定的細(xì)節(jié)的情況下,使所述計(jì)算機(jī)執(zhí)行在所述輸 出處理指令群以后應(yīng)該進(jìn)行的預(yù)定的處理。
      據(jù)此,若輸出處理指令群由計(jì)算機(jī)執(zhí)行,則計(jì)算機(jī)在依據(jù)分支指令來 執(zhí)行第一處理指令的同時,依據(jù)依賴處理指令來執(zhí)行依賴于其執(zhí)行結(jié)果(被 代入到被代入變量的數(shù)據(jù))的處理。其結(jié)果是,若第一處理指令沒有被竄改, 則計(jì)算機(jī)依據(jù)依賴處理指令來執(zhí)行預(yù)定的處理,但是,若第一處理指令被 竄改,則計(jì)算機(jī)執(zhí)行預(yù)定的處理以外的處理。因此,能夠保護(hù)第一處理指 令,以不被竄改。而且,不會將第一處理指令作為數(shù)據(jù)來讀入,因此能夠 使非法解析人難以找到竄改防止處理(輸出處理指令群),也嗯恩構(gòu)確實(shí)保護(hù) 作為保護(hù)對象代碼的第一處理指令,以不被竄改或非法解析。
      并且,在本發(fā)明中,第一處理指令被使用為輸出處理指令群的一部分, 因此,可以防止程序(第一處理指令等)的非法解析以及竄改,其價值很高。
      并且,在本發(fā)明中,若第一處理指令被竄改,則輸出處理指令群不進(jìn) 行規(guī)定的處理。也就是,能夠?qū)崿F(xiàn)第一處理指令的竄改校驗(yàn)。而且,即使 為了躱避該竄改校驗(yàn)而進(jìn)行竄改,以將依據(jù)第一處理指令被代入的數(shù)據(jù)強(qiáng)制符合預(yù)定的細(xì)節(jié),在第一處理指令還被其它的指令群調(diào)用的情況下,該 指令群也不能正常工作。其結(jié)果是,能夠檢測有竄改。
      并且,對于本發(fā)明中使竄改行為變得困難得方法,與以往的竄改校驗(yàn)
      方法不同,由于不必要將程序作為數(shù)據(jù)來讀入,因此,在將Java(注冊商標(biāo)) 等的程序作為數(shù)據(jù)來讀入時受限制的環(huán)境下也能夠使用,其效果很大。
      并且,在執(zhí)行輸出處理指令群時,第一處理指令也被執(zhí)行。因此,難 以解析第一處理指令是,第一處理指令的功能和輸出處理指令群的功能的 兩者所需要的處理,還是只第一處理指令的功能的所需要的處理。因此, 能夠使非法解析人的解析工作變得困難,該非法解析人只關(guān)注第一處理指 令的功能的所需要的處理來試圖解析第一處理指令。
      在此,其特點(diǎn)也可以是,所述依賴處理指令生成單元,獲得使所述計(jì) 算機(jī)執(zhí)行預(yù)定的處理的第二處理指令,并將其變換為所述依賴處理指令, 從而生成所述依賴處理指令;所述依賴處理指令,在示出所述第一處理指 令被執(zhí)行的結(jié)果的、代入到所述被代入變量的值示出預(yù)定的估計(jì)值的情況 下,使所述計(jì)算機(jī)導(dǎo)出與所述第二處理指令的執(zhí)行結(jié)果相同的執(zhí)行結(jié)果。
      據(jù)此,若指令生成裝置獲得第二處理指令,則能夠?qū)⒌诙幚碇噶铍y 讀化為依賴處理指令,也能夠確實(shí)保護(hù)第一處理指令。
      并且,在本發(fā)明中,在執(zhí)行進(jìn)行預(yù)定的處理的輸出處理指令群(相當(dāng)于 第二處理指令的處理)時,第一處理指令也被執(zhí)行。因此,在解析預(yù)定的處 理時,非法解析人需要解析輸出處理指令群和第一處理指令的兩者,從而 能夠使非法解析更困難。
      在此,其特點(diǎn)也可以是,所述指令生成裝置,還包括獲得單元,獲 得輸入程序,該輸入程序包含不使用所述第一處理指令的所述第二處理指 令、和使用所述第一處理指令來使所述計(jì)算機(jī)執(zhí)行與所述第二處理指令不 同的處理的第三處理指令;以及輸出單元,輸出包含所述輸出處理指令群 和所述第三處理指令的輸出程序,所述輸出處理指令群包含所述依賴處理 指令,所述依賴處理指令是所述輸入程序的所述第二處理指令由所述依賴 處理指令生成單元變換而被生成的。
      據(jù)此,能夠?qū)诙幚碇噶畹某绦颉2⑶?,在難讀化后的程序中, 追加并執(zhí)行本來不需要的第一處理指令的處理,但是,由于第一處理指令也是以其它的目的來使用的指令,因此能夠抑制代碼大小的增加,并且能 夠掩蔽實(shí)際上第一處理指令的執(zhí)行是用于進(jìn)行竄改校驗(yàn)的處理。
      在此,其特點(diǎn)也可以是,所述指令生成裝置,還包括估計(jì)值算出單 元,算出根據(jù)預(yù)定的條件且依據(jù)所述第一處理指令來被代入到所述被代入 變量的值,以作為所述估計(jì)值;所述依賴處理指令生成單元,生成依賴處 理指令,該依賴處理指令,在示出所述第一處理指令被執(zhí)行的結(jié)果的、被 代入到所述被代入變量的值示出所述估計(jì)值算出單元所算出的估計(jì)值的情 況下,使所述計(jì)算機(jī)導(dǎo)出與所述第二處理指令的執(zhí)行結(jié)果相同的執(zhí)行結(jié)果。 例如,所述指令生成裝置,還包括被參考代入處理生成單元,生成被參 考代入處理指令,以作為所述輸出處理指令群的一部分,所述被參考代入 處理指令,在所述計(jì)算機(jī)執(zhí)行所述第一處理指令的情況下,使所述計(jì)算機(jī) 將值代入到所述第一處理指令所參考的被參考變量;所述估計(jì)值算出單元, 將被代入到所述被參考變量的值作為所述條件,算出根據(jù)所述被參考變量 的值且依據(jù)所述第一處理指令來被代入到所述被代入變量的值,以作為所 述估計(jì)值。
      據(jù)此,在計(jì)算機(jī)執(zhí)行第一處理指令時被參考的被參考變量的值、和在 估計(jì)值算出單元算出估計(jì)值時成為條件的被參考變量的值相同,若第一處 理指令沒有被竄改,則能夠使示出計(jì)算機(jī)執(zhí)行一處理指令的結(jié)果的被代入 變量的值和估計(jì)值相同。其結(jié)果是,若被代入變量的值和估計(jì)值不同,能 夠判斷為第一處理指令被竄改,也能夠不使計(jì)算機(jī)導(dǎo)出與第二處理指令的 執(zhí)行結(jié)果相同的執(zhí)行結(jié)果。
      并且,由于在計(jì)算機(jī)執(zhí)行第一處理指令時被參考的被參考變量的值、 和在估計(jì)值算出單元算出估計(jì)值時成為條件的被參考變量的值相同即可, 因此能夠?qū)⒈粎⒖甲兞康闹挡皇枪潭ㄖ刀侨我庵怠?br> 在此,其特點(diǎn)也可以是,所述指令生成裝置,還包括被參考確定單 元,確定所述第一處理指令所參考的被參考變量;所述被參考代入處理生 成單元,生成所述被參考代入處理指令,所述被參考代入處理指令使所述 計(jì)算機(jī)將值代入到所述被參考確定單元所確定的被參考變量。
      據(jù)此,由于被參考確定單元(被參考變量變量部)確定被參考變量,因此 用戶能夠不指定第一處理指令中包含的被參考變量是哪個被參考變量,而
      14生成被參考代入處理指令(被參考變量值代入處理指令群)。
      在此,其特點(diǎn)也可以是,所述指令生成裝置,還包括值保持單元, 保持成為被代入到所述被參考變量的值的候補(bǔ)的多個值,以作為被參考變 量值的集合;所述被參考代入處理生成單元,生成所述被參考代入處理指 令,所述被參考代入處理指令,使所述被參考變量值的集合中包含的任一 個值被代入到所述被參考變量。例如,所述估計(jì)值算出單元,算出根據(jù)所 述被參考變量值的集合中包含各個值且依據(jù)所述第一處理指令來被代入到 所述被代入變量的值的集合,以作為估計(jì)值的集合;所述依賴處理指令生 成單元,利用所述被參考變量值的集合和所述估計(jì)值的集合來生成所述依 賴處理指令;所述依賴處理指令,在示出所述第一處理指令被執(zhí)行的結(jié)果 的、代入到所述被代入變量的值是所述估計(jì)值的集合中包含的值的情況下, 使所述計(jì)算機(jī)導(dǎo)出與所述第二處理指令的執(zhí)行結(jié)果相同的執(zhí)行結(jié)果。
      據(jù)此,能夠每當(dāng)所述輸出處理指令被執(zhí)行時,使被參考變量所存儲的 值不同。其結(jié)果是,能夠使非法解析人更難以解析為了保護(hù)第一處理指令 而存在輸出處理指令群。
      在此,其特點(diǎn)也可以是,所述依賴處理指令,使所述計(jì)算機(jī)比較被代 入到所述被代入變量的值和預(yù)定的估計(jì)值,在所述被代入變量的值與所述 估計(jì)值相同的情況下,使所述計(jì)算機(jī)執(zhí)行預(yù)定的處理,在所述被代入變量 的值與所述估計(jì)值不同的情況下,使所述計(jì)算機(jī)抑制所述預(yù)定的處理的執(zhí) 行。
      據(jù)此,在第一處理指令被竄改的結(jié)果是被代入變量的值與估計(jì)值不同 時,能夠使計(jì)算機(jī)執(zhí)行錯誤處理,也能夠進(jìn)行第一處理指令的竄改檢測。
      在此,其特點(diǎn)也可以是,所述指令生成裝置,還包括被代入確定單 元,確定所述第一處理指令中包含的所述被代入變量;所述依賴處理指令
      生成單元,生成所述依賴處理指令,所述依賴處理指令,使所述計(jì)算機(jī)執(zhí) 行依賴于被代入到所述被代入確定單元所確定的所述被代入變量的數(shù)據(jù)的 處理。
      據(jù)此,由于被代入確定單元(被代入變量變量部)確定被代入變量,因此 用戶能夠不指定第一處理指令中包含的被代入變量是哪個被代入變量,而 生成依賴處理指令。而且,其特點(diǎn)也可以是,所述指令生成裝置,還包括獲得單元,獲 得輸入程序,該輸入程序包含所述第一處理指令、成為所述第一處理指令 的分支源的第一先行指令、成為所述第一處理指令的分支目標(biāo)的第一后續(xù) 指令、成為第一后續(xù)指令的分支目標(biāo)的第二處理指令、以及成為所述第二 處理指令的分支目標(biāo)的第二后續(xù)指令;條件分支指令生成單元,生成條件 分支指令,該條件分支指令,使所述處理路徑從所述第一處理指令分支到 其它的指令,以使在滿足第一條件的情況下的所述第一處理指令的分支目 標(biāo)、和在滿足第二條件的情況下的所述第一處理指令的分支目標(biāo)不同;以 及輸出單元,輸出包含所述第一處理指令、所述第一先行指令、所述第一 后續(xù)指令以及所述第二處理指令的輸出程序,所述依賴處理指令生成單元, 生成所述依賴處理指令,所述依賴處理指令,在所述被代入變量的數(shù)據(jù)示 出預(yù)定的細(xì)節(jié)的情況下,使所述計(jì)算機(jī)導(dǎo)出與所述第二后續(xù)指令的執(zhí)行結(jié) 果相同的執(zhí)行結(jié)果,所述分支指令生成單元,生成所述分支指令,所述分 支指令,使處理路徑從所述第二處理指令分支到所述第一處理指令,以使 所述計(jì)算機(jī)在執(zhí)行所述第二處理指令后冉次執(zhí)行所述第一處理指令,所述 條件分支指令生成單元,生成所述條件分支指令,所述條件分支指令,在 滿足所述第一條件的情況下,使所述處理路徑從所述第一處理指令分支到 所述第一后續(xù)指令,在滿足所述第二條件的情況下,使所述處理路徑從所 述第一處理指令分支到所述依賴處理指令,所述輸出單元,輸出包含所述 依賴處理指令、所述分支指令以及所述條件分支指令的所述輸出程序,所 述第一條件是,在所述第一處理指令由所述計(jì)算機(jī)執(zhí)行的情況下,在執(zhí)行 所述第一處理指令的緊前,所述第一先行指令被執(zhí)行,所述第二條件是, 在所述第一處理指令由所述計(jì)算機(jī)執(zhí)行的情況下,在執(zhí)行所述第一處理指 令的緊前,所述第二處理指令被執(zhí)行。
      據(jù)此,在輸入程序中在第二處理指令和第二后續(xù)指令之間不執(zhí)行第一 處理指令,但是,在輸出程序(竄改防止程序)中有時在第二處理指令和第二 后續(xù)指令之間執(zhí)行第一處理指令。也就是,在輸出程序中,也按照與輸入 程序中的執(zhí)行順序不同的執(zhí)行順序來執(zhí)行第一處理指令。其結(jié)果是,能夠 將輸入程序難讀化,非法解析人即使實(shí)際操作輸出程序來進(jìn)行解析,也難 以解析程序的執(zhí)行順序或前后關(guān)系。而且,其特點(diǎn)也可以是,所述輸入程序中包含多個所述第一后續(xù)指令;
      所述條件分支指令生成單元,生成所述條件分支指令,所述條件分支指令, 在滿足所述第一條件的情況下,使所述處理路徑從所述第一處理指令分支 到多個第一后續(xù)指令中的按照第三條件的一個第一后續(xù)指令,從而在所述
      第一處理指令被執(zhí)行后使所述第一后續(xù)指令被執(zhí)行,以作為分支目標(biāo)第一
      后續(xù)指令。
      據(jù)此,由于依賴處理指令和多個第一后續(xù)指令混在一起以作為第一處 理指令的分支目標(biāo),因此難以解析這些指令是從第一處理指令和第二處理 指令的哪一方分支而執(zhí)行的指令。
      并且,其特點(diǎn)也可以是,所述第三條件是,被代入到變量的值;所述條
      件分支指令生成單元,生成所述條件分支指令,所述條件分支指令,根據(jù) 示出是否滿足所述第一條件的變量的值、和示出是否滿足所述第二條件的 變量的值來使所述處理路徑分支。
      據(jù)此,由于難以區(qū)別用于確認(rèn)是否滿足第一條件或第二條件的變量、 和用于第三條件的變量,就難以知道各個條件是根據(jù)哪個變量的,因此能 夠使各個條件的解析變得困難。
      并且,其特點(diǎn)也可以是,所述輸入程序中包含多個所述第二后續(xù)指令; 所述依賴處理指令,將所述多個第二后續(xù)指令分別變換為所述依賴處理指 令;所述條件分支指令生成單元,生成所述條件分支指令,所述條件分支 指令,在滿足所述第二條件的情況下,使所述處理路徑從所述第一處理指 令分支到所述多個第一后續(xù)指令中的按照第四條件的依賴處理指令,從而 在所述第一處理指令被執(zhí)行后使所述依賴處理指令被執(zhí)行,以作為分支目 標(biāo)依賴處理指令。
      據(jù)此,由于多個依賴處理指令和第一后續(xù)指令混在一起以作為第一處 理指令的分支目標(biāo),因此難以解析這些指令是從第一處理指令和第二處理 指令的哪一方分支而執(zhí)行的指令。
      而且,其特點(diǎn)也可以是,所述第四條件是,被代入到變量的值;所述
      條件分支指令生成單元,生成所述條件分支指令,所述條件分支指令,根 據(jù)示出是否滿足所述第一條件的變量的值、和示出是否滿足所述第二條件 的變量的值來使所述處理路徑分支。據(jù)此,由于難以區(qū)別用于確認(rèn)是否滿足第一條件或第二條件的變量、 和用于第四條件的變量,就難以知道各個條件是根據(jù)哪個變量的,因此能 夠使各個條件的解析變得困難。
      并且,其特點(diǎn)也可以是,所述指令生成裝置,還包括變量生成單元,
      生成所述輸入程序未使用的追加變量;以及條件值代入指令生成單元,在 滿足所述第一條件的情況下,生成使所述計(jì)算機(jī)將第一條件值代入到所述 追加變量的第一條件值代入指令,在滿足所述第二條件的情況下,生成使 所述計(jì)算機(jī)將第二條件值代入到所述追加變量的第二條件值代入指令;所 述條件分支指令生成單元,生成條件分支指令,所述條件分支指令,在被 代入到所述追加變量的值是所述第一條件值的情況下,使所述處理路徑從 所述第一處理指令分支到所述第一后續(xù)指令,在被代入到所述追加變量的 值是所述第二條件值的情況下,使所述處理路徑從所述第一處理指令分支 到所述依賴處理指令。
      據(jù)此,由于用于確認(rèn)是否滿足第一條件或第二條件的追加變量不是輸 入程序中包含的變量,因此,即使為了判定第一條件或第二條件而值被代 入到追加變量,也能夠保證輸入程序應(yīng)該執(zhí)行的處理受影響。
      并且,其特點(diǎn)也可以是,所述第二后續(xù)指令以及所述依賴處理指令是,
      使用在所述第二處理指令被執(zhí)行完畢時獲得的執(zhí)行結(jié)果,來使所述計(jì)算機(jī) 執(zhí)行相互同等的處理的指令,所述指令生成裝置,還包括保留指令生成 單元,生成保留指令,該保留指令,在所述第一處理指令被執(zhí)行之前,將 在所述第二處理指令被執(zhí)行完畢時獲得的執(zhí)行結(jié)果保留;以及恢復(fù)指令生 成單元,生成恢復(fù)指令,該恢復(fù)指令,在所述第一處理指令再次被執(zhí)行后, 使所保留的執(zhí)行結(jié)果恢復(fù)。
      據(jù)此,即使在輸出程序中第一處理指令插入到第二處理指令和依賴處 理指令之間,也能夠保證依賴處理指令處理以后的執(zhí)行結(jié)果,與輸入程序 中的第二后續(xù)指令以后的執(zhí)行結(jié)果相同。
      并且,其特點(diǎn)也可以是,所述指令生成裝置,還包括變換單元,將 所述第一處理指令、所述第一先行指令以及所述第二處理指令中的至少一 個指令,變換為與該指令等價的指令;所述輸出單元,將所述變換單元所 變換的指令包含在所述輸出程序中來輸出,而取代與該指令相對應(yīng)的變換
      18之前的指令。也就是,在本發(fā)明的指令或指令群中,除了其指令或指令群
      本身以外,還包含將其通過與本發(fā)明不同的其它的難讀化方法來難讀化而
      獲得的等價的指令。
      據(jù)此,在輸出程序中,由于輸入程序中的至少一個指令被置換為與其 +匕yfv絲/人+匕八 m ,U一 ^匕^fa々Afefe^ "X n:口 r^ +匕八*n介A 111 i口 iVi+匕八66 ^ 羊
      j曰^r守in 口、j:t白"?-, 兇iLLB5"i^'i丈邪u/、T王rrcfUj日^r々w邪!jmyr王nr口、j:r曰'々-日g力"j/旦;a: 系難以知道,也就是,能夠使針對輸入程序的難讀化的程度增大,也能夠 使輸出程序的解析變得困難。
      并且,其特點(diǎn)也可以是,所述分支指令生成單元,生成所述分支指令, 所述分支指令,在所述第一處理指令包含API(Application Program Interface:應(yīng)用程序接口)的情況下,檢索調(diào)用與所述API相同的API的 指令,以作為所述第二后續(xù)指令,并使處理路徑從成為所述第二后續(xù)指令 的分支源的所述第二處理指令分支到所述第一處理指令。
      據(jù)此,由于調(diào)用與第一處理指令的API相同的API的指令是第二后續(xù) 指令,因此能夠?qū)⒌谝惶幚碇噶钊菀椎刈儞Q為依賴于被代入變量的數(shù)據(jù)的 依賴處理指令,也能夠與所述相同確實(shí)保護(hù)第一處理指令,以不被竄改或 非法解析。
      并且,其特點(diǎn)也可以是,所述指令生成裝置,還包括獲得單元,獲 得包含所述第一處理指令的輸入程序;以及輸出單元,通過將所述分支指 令生成單元以及所述依賴處理指令生成單元所生成的所述分支指令以及所 述依賴處理指令追加到所述輸入程序,從而生成并輸出包含所述第一處理 指令、所述分支指令以及所述依賴處理指令的輸出程序。
      據(jù)此,能夠?qū)⑤斎氤绦蜃儞Q為輸出程序,來確實(shí)保護(hù)輸出程序中包含 的第一處理指令。
      并且,其特點(diǎn)也可以是,本發(fā)明涉及的指令生成裝置所生成的輸出程 序包括與第一功能相對應(yīng)的第一處理指令;與第二功能相對應(yīng)的第二處 理指令;以及分支指令,在計(jì)算機(jī)執(zhí)行第二處理指令時,使計(jì)算機(jī)執(zhí)行第 二功能不需要的第一處理指令,以作為冗余處理。
      據(jù)此,由于依據(jù)第二處理指令的處理中本來不需要的、依據(jù)第一處理 指令的處理,在依據(jù)第二處理指令的處理中也被進(jìn)行,因此難以解析依據(jù) 第一處理指令的處理是對哪個功能的實(shí)現(xiàn)需要的、對哪個功能不需要的。并且,本發(fā)明,能夠以所述指令生成裝置來實(shí)現(xiàn),也能夠以生成輸出 處理指令群的處理生成方法、用于使個人計(jì)算機(jī)等生成該輸出處理指令群 的程序、記錄其程序的記錄介質(zhì)、或生成其輸出處理指令群的集成電路來 實(shí)現(xiàn)。在此情況下,當(dāng)然能夠獲得與指令生成裝置相同的效果。
      本發(fā)明涉及的指令生成裝置能夠獲得以下的效果,即,能夠生成確實(shí) 保護(hù)保護(hù)對象代碼的程序。


      圖1是示出包含以往的竄改校驗(yàn)處理的程序的圖。
      圖2是以往的竄改防止處理生成裝置的處理的說明圖。 圖3是本發(fā)明的實(shí)施例1中的處理系統(tǒng)的結(jié)構(gòu)圖。 圖4是本發(fā)明的實(shí)施例1中的輸出處理指令群的結(jié)構(gòu)圖。 圖5A是示出以C語言描述的第一處理指令群的具體例子的圖。 圖5B是示出以C語言描述的第二處理指令群的具體例子的圖。 圖5C是示出以C語言描述的輸出處理指令群的具體例子的圖。 圖6是本發(fā)明的實(shí)施例1中的竄改防止處理生成裝置的結(jié)構(gòu)圖。 圖7是本發(fā)明的實(shí)施例1中的竄改防止處理生成裝置的工作的流程圖。 圖8是本發(fā)明的實(shí)施例1中的竄改防止處理生成裝置的效果的說明圖。 圖9是示出本發(fā)明的實(shí)施例1的變形例6涉及的竄改防止處理生成裝
      置所生成的輸出處理指令群的具體例子的圖。
      圖IO是本發(fā)明的實(shí)施例1的變形例6涉及的依據(jù)竄改防止處理生成裝
      置的結(jié)構(gòu)圖。
      圖11是本發(fā)明的實(shí)施例2中的處理系統(tǒng)的結(jié)構(gòu)圖。 圖12是本發(fā)明的實(shí)施例2中的輸出處理指令群的結(jié)構(gòu)圖。 圖13是示出本發(fā)明的實(shí)施例2中的以C語言描述的輸出處理指令群的 具體例子的圖。
      圖14是本發(fā)朋的實(shí)施例2中的竄改防止處理生成裝置的結(jié)構(gòu)圖。
      圖15是本發(fā)明的實(shí)施例2中的竄改防止處理生成裝置的效果的說明圖。
      圖16是本發(fā)明的實(shí)施例3中的處理系統(tǒng)的結(jié)構(gòu)圖。圖17是本發(fā)明的實(shí)施例3中的輸入程序的結(jié)構(gòu)圖。 圖18是示出本發(fā)明的實(shí)施例3中的以C語言描述的輸入程序的具體例 子的圖。
      圖19是本發(fā)明的實(shí)施例3中的竄改防止程序的結(jié)構(gòu)圖。 圖20是示出本發(fā)明的實(shí)施例3中的以C語言描述的竄改防止程序的具 體例子的圖。
      圖21是示出本發(fā)明的實(shí)施例3中的輸入程序的處理的流程圖。
      圖22是示出本發(fā)明的實(shí)施例3中的竄改防止程序的處理的流程圖。
      圖23是本發(fā)明的實(shí)施例3中的竄改防止處理生成裝置的結(jié)構(gòu)圖。
      圖24是本發(fā)明的實(shí)施例3中的竄改防止處理生成裝置的工作的流程圖。
      圖25是本發(fā)明的實(shí)施例3的變形例涉及的竄改防止程序的結(jié)構(gòu)圖。 圖26是示出本發(fā)明的實(shí)施例3的變形例涉及的以C語言表示的竄改防 止程序的一個具體例子的圖。
      圖27是本發(fā)明的實(shí)施例3的變形例涉及的竄改防止程序的處理的流程圖。
      圖28是本發(fā)明的實(shí)施例3的變形例涉及的竄改防止處理生成裝置生成 竄改防止程序的工作的說明圖。
      圖29是本發(fā)明的實(shí)施例3的變形例涉及的竄改防止處理生成裝置生成 包含API的竄改防止程序的工作的說明圖。
      圖30是在本發(fā)明的執(zhí)行處理裝置中本來包含第一處理指令群時的效果 的說明圖。
      圖31是在本發(fā)明的A指令群包含特征性運(yùn)算時的效果的說明圖。 圖32是示出非法解析人的竄改的例子的圖。
      圖33是示出本發(fā)明的實(shí)施例1 3的變形例涉及的竄改防止處理生成 裝置只進(jìn)行依賴化的例子的圖。
      圖34是示出本發(fā)明的實(shí)施例1 3的變形例涉及的竄改防止處理生成 裝置的結(jié)構(gòu)的一個例子的圖。
      圖35是示出本發(fā)明的實(shí)施例1 3的變形例涉及的竄改防止處理生成 裝置的工作的一個例子的圖。符號說明
      100、 100b、 1300處理系統(tǒng)
      101、 101b、 1310、 Pi輸入程序
      102、 102b、 1330、 1330a、 Po竄改防止程序
      110、 110a、 110b、 1320、 400竄改防止處理生成裝置
      120,、 120b、 1350記錄介質(zhì)
      130、 130b、 1340執(zhí)行處理裝置
      140、 140b第一處理指令群
      150第二處理指令群
      160、 160a、 160b輸出處理指令群
      210輸入處理指令群保持部
      220被參考變量解析部
      230被參考變量信息保持部.
      240、 240a被參考變量值代入處理指令群生成部
      250被參考變量值代入處理指令群保持部
      260、 260a被參考變量值保持部
      270被代入變量解析部
      280被代入變量信息保持部
      290、 290a估計(jì)值算出部
      295、 295a估計(jì)值信息保持部
      201依賴處理指令群生成部
      202依賴處理指令群保持部
      203分支處理指令群生成部
      204分支處理指令群保持部
      205輸出處理指令群生成部
      206輸出處理指令群保持部
      310、 310a、 310b、 2210被參考變量值代入處理指令群
      320、 320a、 320b分支處理指令群
      330、 330a、 330b、 2220依賴處理指令群
      221410PRE—A指令群
      1420A指令群
      1430 SUC—A指令群
      1440 B指令群
      1450 SUC_B指令群
      1610 CBR—AB條件分支指令群
      1620 STR_A變量群值代入指令群
      1630 STR—B變量群值代入指令群
      1640保留指令群
      1650恢復(fù)指令群
      1660 BR_B分支指令群
      2010輸入部
      2020輸入程序保持部
      2030被代入變量解析部
      2040被代入變量信息保持部
      2050被保留變量解析部
      2060被保留變量信息保持部
      2070保留指令群生成部
      2080保留指令群保持部
      2090恢復(fù)指令群生成部
      2091恢復(fù)指令群保持部
      2092條件分支指令群生成部
      2093分支條件保持部
      2094條件分支指令群保持部
      2095變量群值代入指令群生成部
      2096變量群代入指令群保持部
      2097分支指令群生成部
      2098分支指令群保持部
      2099竄改防止程序生成部
      2100竄改防止程序輸出部
      具體實(shí)施例方式
      以下,參照

      本發(fā)明涉及的指令生成裝置以及指令生成方法。 而且,在以下的各個實(shí)施例以及各個變形例中,以本發(fā)明涉及的指令生成 裝置為竄改防止處理生成裝置來進(jìn)行說明。 (實(shí)施例1)
      說明本發(fā)明涉及的實(shí)施例1中的處理系統(tǒng)。
      圖3是實(shí)施例1中的處理系統(tǒng)的結(jié)構(gòu)圖。
      本實(shí)施例中的處理系統(tǒng)100包括竄改防止處理生成裝置(指令生成裝 置)IIO、以及執(zhí)行處理裝置130。
      竄改防止處理生成裝置110是生成確實(shí)能夠保護(hù)保護(hù)對象代碼的程序 的裝置,獲得作為保護(hù)對象代碼的第一處理指令群140和第二處理指令群 150,來生成輸出處理指令群160。竄改防止處理生成裝置110被構(gòu)成為難 讀化裝置,將第二處理指令群150難讀化,來生成輸出處理指令群160。 而且,只要沒有特別的解釋,就本說明書以及本發(fā)明中的指令群,不僅可 以是包含多個指令的,也可以是只包含一個指令的。
      并且,竄改防止處理生成裝置110,將所生成的輸出處理指令群160、 和第一處理指令群140寫入到記錄介質(zhì)120。
      執(zhí)行處理裝置130,讀出并執(zhí)行記錄介質(zhì)120所記錄的第一處理指令 群140以及輸出處理指令群160。
      而且,竄改防止處理生成裝置110也可以,將第一處理指令群140以 及輸出處理指令群160,不寫入到記錄介質(zhì)120,而通過通信介質(zhì)發(fā)送給執(zhí) 行處理裝置130。
      以下,說明各個結(jié)構(gòu)要素。
      第一處理指令群140是執(zhí)行處理裝置130所執(zhí)行的處理指令群,有作 為輸出處理指令群160的處理的一部分來執(zhí)行的情況,也有與此分別執(zhí)行 的情況。
      第二處理指令群150是包括指示執(zhí)行處理裝置130進(jìn)行規(guī)定處理的指 令的處理指令群。
      以下的說明中假設(shè),第一處理指令群140是用于指示進(jìn)行以下的處理的指令群,該處理是將內(nèi)容被加密的再生可能次數(shù)輸入,并將其解密, 從而輸出明文的再生可能次數(shù)。并且,在本實(shí)施例的說明中,第二處理指 令群150是用于指示進(jìn)行以下的處理的指令群,該處理是將被壓縮的內(nèi) 容輸入,并將其解壓,從而進(jìn)行輸出。
      輸出處理指令群160是將第二處理指令群150難讀化了的指令群,在
      結(jié)構(gòu)上,在處理過程中調(diào)用并使用第一處理指令群140。也就是,在由執(zhí) 行處理裝置130執(zhí)行輸出處理指令群160的情況下,首先,輸出處理指令 群160中包含的指令群被執(zhí)行,在該過程中第一處理指令群140被調(diào)用并 執(zhí)行,然后輸出處理指令群160的后續(xù)的處理指令群也被執(zhí)行。
      以下,詳細(xì)說明輸出處理指令群160。 (l)輸出處理指令群160的結(jié)構(gòu)
      圖4是輸出處理指令群160的結(jié)構(gòu)圖。
      輸出處理指令群160包括被參考變量值代入處理指令群310,對各 種參數(shù)設(shè)定值,該各種參數(shù)是在調(diào)用并執(zhí)行第一處理指令群140時需要的 參數(shù);分支處理指令群320,調(diào)用第一處理指令群140:以及依賴處理指令 群330,調(diào)用第一處理指令群140后被執(zhí)行。在執(zhí)行處理裝置130執(zhí)行輸 出處理指令群160的情況下,按照被參考變量值代入處理指令群310、分 支處理指令群320、第一處理指令群140、依賴處理指令群330的順序, 各個處理指令群被執(zhí)行。
      以下,分別進(jìn)行說明。 (l.l)被參考變量值代入處理指令群310
      被參考變量值代入處理指令群310是一種處理,對各種參數(shù)設(shè)定值, 該各種參數(shù)是在調(diào)用并執(zhí)行第一處理指令群140時需要的參數(shù)。具體而言, 例如,在第一處理指令群140是函數(shù)的情況下,被參考變量值代入處理指 令群310是將值代入到函數(shù)的引數(shù)的指令群。并且,例如,若第一處理指 令群140是參考外部變量的指令群,則被參考變量值代入處理指令群310 是將值代入到外部變量的指令群。并且,例如,若第一處理指令群140是 參考棧(stack)的值的指令群,則被參考變量值代入處理指令群310是將值 代入到棧的指令群。并且,例如,若第一處理指令群140是參考被存儲在 以地址變量來指定的位置的值的指令群,則被參考變量值代入處理指令群310是將值存儲到所參考的地址變量的指令群。
      在以下的說明中,將在執(zhí)行這些第一處理指令群140時需要的各種參 數(shù)總稱為被參考變量。
      (1.2) 分支處理指令群320
      分支處理指令群320是分支到第一處理指令群140的處理指令群。具 體而言,若第一處理指令群140是函數(shù),則分支處理指令群320是函數(shù)調(diào) 用指令,若第一處理指令群140是子程序的情況下,則分支處理指令群320 是子程序調(diào)用指令。并且,若第一處理指令群140是處理指令群的集合, 則分支處理指令群320是分支指令,若第一處理指令群140是例外處理, 則分支處理指令群320是產(chǎn)生例外處理的處理指令。進(jìn)一步,具體而言, 例如在匯編語言的指令中,分支處理指令群320是如"CALL, RET"那 樣的函數(shù)調(diào)用、"JA, JMP, LOOP"等的轉(zhuǎn)移指令、"INT"等的插入指 令。
      (1.3) 依賴處理指令群330
      依賴處理指令群330是調(diào)用第一處理指令群140后被執(zhí)行的處理指令 群,也是進(jìn)行與第二處理指令群150同等的處理的程序指令群。與第二處 理指令群150本身不同,第二處理指令群150的一部分的處理被置換為使 用第一處理指令群140的處理結(jié)果的處理。對于置換,在說明竄改防止處 理生成裝置110時將進(jìn)行詳細(xì)說明,在此說明置換的概要。
      首先,具體而言,例如,在第一處理指令群140是函數(shù)的情況下,第 一處理指令群140的處理結(jié)果是函數(shù)的返回值。并且,例如,若第一處理 指令群140是對外部變量設(shè)定值的處理,則第一處理指令群140的處理結(jié) 果是被代入到外部變量的值。并且,例如,若第一處理指令群140是將值 代入到棧的處理,則第一處理指令群140的處理結(jié)果是存儲到棧的值。并 且,例如,若第一處理指令群140是在以地址變量來指定的位置存儲值的 處理,則第一處理指令群140的處理結(jié)果是所存儲的值。在以后的說明中, 將這些第一處理指令群140的處理結(jié)果被存儲的存儲目標(biāo)稱為被代入變
      一般而言,不能預(yù)先知il第一處理指令群140的處理結(jié)果,但是,只 在由被參考變量值代入處理指令群310來設(shè)定在執(zhí)行第一處理指令群140時所需要的各種參數(shù)的值的情況下,才能夠預(yù)先知道處理結(jié)果的值。具體 而言,例如,若將由被參考變量值代入處理指令群310設(shè)定的值實(shí)際上設(shè)
      定到被參考變量后執(zhí)行第一處理指令群140,則能夠知道處理結(jié)果的值。
      在以后的說明中,將該值稱為估計(jì)值。
      在被代入變量的值是估計(jì)值的情況下,依賴處理指令群330是進(jìn)行與 所述第二處理指令群相同的處理的指令群。并且,優(yōu)選的是,在被代入變 量的值不是估計(jì)值的情況下,依賴處理指令群330是進(jìn)行與所述第二處理 指令群不同的處理的指令群。具體而言,例如,在第二處理指令群為 "a=a*5;"、被代入變量"b"的估計(jì)值為"5"的情況下,將第二處理指令 群置換為"a=a*b;"而成為依賴處理指令群。 (1.4)處理指令群的具體例子
      圖5A是示出以C語言描述的第一處理指令群140的具體例子的圖。 并且,圖5B是示出以C語言描述的第二處理指令群150的具體例子的圖。 并且,圖5C是示出以C語言描述的輸出處理指令群160的具體例子的圖。 而且,在以下的說明中,使用"*"、" "、T、 "A"、"<<"、">>"等的 運(yùn)算符,而且,在沒有特別的解釋的情況下,處理指令群的說明中所使用 的這些運(yùn)算符示出C語言的運(yùn)算符。并且,在以下的說明中,在各個處理 指令群,根據(jù)C語言的語言形式來追加函數(shù)聲明或變量聲明,而且,對于 該語言形式,由于已公知,因此省略說明。
      如圖5A示出,第一處理指令群140是包含以下的處理的指令群,該 處理是通過輸入并解密被加密的內(nèi)容的再生次數(shù)"encryptedData"(被 參考變量),從而輸出內(nèi)容的再生次數(shù)"plainData"(被代入變量)。在此, 為了簡化說明,將取被加密的內(nèi)容的再生次數(shù)、和秘密信息"0xOOFF"之 間的異或的處理"plainData=encryptedDataAOxOOFF",作為解密處理。 而且,在"OxOOFF"中開頭的"Ox"示出"00FF"為16進(jìn)制。
      在此,"plainData"以及"encryptedData"分別是取到"0x0000 OxFFFF"為止的值的16位的值。并且假設(shè),在以2進(jìn)制表示時最高位是 l的情況下,plainData示出負(fù)值。也就是,到"0x8000 0xFFFF"為止 的值示出負(fù)數(shù)。
      如圖5B示出,第二處理指令群150是包含以下的處理的指令群,該
      27處理是通過輸入并解壓被壓縮的內(nèi)容數(shù)據(jù)"compressedData",從而輸 出內(nèi)容數(shù)據(jù)"decompressedData"。在此,為了簡化說明,將輸出按照被 壓縮的內(nèi)容數(shù)據(jù)"compressedData"的值的數(shù)來連續(xù)1的2進(jìn)制數(shù)的處理, 作為解壓處理。如圖5B示出,該處理被表示為指令群"for(counter-O;cou nter<compressedData;counter++){(decompressedData=decompressed Data《1) 10x0001;}"。
      在此,"compressedData"取從0到31為止的值,"decompressedDa ta"是32位的值。在"compressedData"是"O"時,"decompressedData" 是"0x00000000 ";在"compressedData "是"1"時,"decompressedData " 是"0x00000001 ,,;在"compressedData"是"31 ,,日寸,"decompressedData" 是"0xFFFFFFFF"o
      如圖5C示出,輸出處理指令群160是進(jìn)行與第二處理指令群150相 同的解壓處理的處理指令群。該輸出處理指令群160是,第二處理指令群 150由竄改防止處理生成裝置110難讀化后的指令群。對于竄改防止處理 生成裝置110,在后面將詳細(xì)說明。
      作為被參考變量值代入處理指令群310的"encryptedData^xF022;" 示出將值代入到調(diào)用第一處理指令群140時的引數(shù)的處理,即示出將值 "OxF022"代入到被參考變量"encryptedData"的處理。
      作為分支處理指令群320的"plainData=decrypt(encryptedData);" 示出以引數(shù)為被參考變量"encryptedData"來調(diào)用第一處理指令群140 的處理,將第一處理指令群140的處理結(jié)果存儲到被代入變量 "plainData"。在執(zhí)行處理裝置130中,在分支處理指令群320被正常執(zhí) 行了的情況下的返回值的估計(jì)值,成為以被參考變量"encryptedData"為 值"0xF022"來進(jìn)行第一處理指令群140的處理時的結(jié)果,即成為 "OxF022AOxOOFF=OxFODD "。
      依賴處理指令群330示出進(jìn)行與第二處理指令群150同等的處理的處 理。但是,在該處理中,與第二處理指令群150不同,包含利用作為第一 處理指令群140的處理結(jié)果的"plainData"的處理。
      具體而言,依賴處理指令群330被表示為"for(counter=0;counter<co mpressedData;counter++){decompressedData=(decompressedData<<
      281) I (plainData—OxFODC);}"。
      在所述的處理中,在"plainData"的值是所述的估計(jì)值"OxFODD"的情況下,"(plainData—OxFODC)"是值"0x001"。由于,該值與第二處理指令群150的對應(yīng)部分相同,因此,若"plainData"為估計(jì)值,則依賴處理指令群330進(jìn)行與第二處理指令群150同等的處理。并且,在"plainData"的值與估計(jì)值不同時,由于"(plainData—OxFODC)"的值與"0x001"不同,因此不進(jìn)行與第二處理指令群150同等的處理。(1.5)輸出處理指令群160的效果
      實(shí)施例1的輸出處理指令群160包括被參考變量值代入處理指令群310,對各種參數(shù)設(shè)定值,該各種參數(shù)是在執(zhí)行第一處理指令群140時需要的參數(shù);分支處理指令群320,調(diào)用第一處理指令群140;以及依賴處理指令群330,調(diào)用第一處理指令群140后被執(zhí)行。在此,在不進(jìn)行由竄改防止處理生成裝置110的變換的第二處理指令群150中不調(diào)用第一處理指令群140,但是,作為變換后的指令群的輸出處理指令群160中追加了用于調(diào)用第一處理指令群140的處理。
      通過利用這些結(jié)構(gòu),從而在執(zhí)行處理裝置130執(zhí)行輸出處理指令群160時,在輸出處理指令群160的目標(biāo)處理(所述的實(shí)施例中為解壓處理)中本來應(yīng)該不需要的第一處理指令群140(所述的實(shí)施例中為解密處理)也被執(zhí)行。據(jù)此,難以解析第一處理指令群140是多個處理所需要的功能、還是單一的處理所需要的功能。具體而言,在所述的例子中,第一處理指令群是解密所需要的處理,而是本來對解壓不需要的處理。但是,在輸出處理指令群160中,第一處理指令群140是解密和解壓的雙方需要的處理。據(jù)此,能夠使非法解析人的解析工作變得困難,該非法解析人的解析工作是指通過解析只需要解密的處理來試圖解析解密處理中包含的秘密信息。
      再者,在執(zhí)行處理裝置130中,在執(zhí)行輸出處理指令群160時,第一處理指令群140也被執(zhí)行。據(jù)此,試圖解析輸出處理指令群160的非法解析人應(yīng)該解析的處理,與第二處理指令群150相比,有所增加。以往,向本來的處理追加其它的處理,來使非法解析人應(yīng)該解析的處理增加,從而進(jìn)行難讀化,然而,在此時存在的問題是追加的處理的程序大小增大。但是,由于在輸出處理指令群160中只追加了用于調(diào)用第一處理指令群140的指令群,因此,即使幾乎不使程序大小增大,也能夠使非法解析人應(yīng)該
      解析的處理增大,該第一處理指令群140是在執(zhí)行處理裝置130中被用于其它用途。
      而且,雖然,因不是本發(fā)明的本質(zhì)而沒有特別的詳細(xì)說明,但是,實(shí)施例1的進(jìn)行解密處理的第一處理指令群140當(dāng)然也是進(jìn)行解壓處理的第二處理指令群150以外的指令群所調(diào)用的處理(本來,倒是應(yīng)該第二處理指令群150以外的指令群所調(diào)用的處理)。在此,本來應(yīng)該調(diào)用第一處理指令群140的指令群,可以是和第一處理指令群140相同的程序中包含的指令群,而在第一處理指令群140是程序庫(libmry)等的情況下,也可以被不同的程序調(diào)用。并且,可以在同一的程序中包含第一處理指令群140和第二處理指令群150,而在如上所述第一處理指令群140是程序庫等的情況下,可以在不同的程序中包含第一處理指令群140和第二處理指令群150。在此,在同一的程序中包含的情況下,為了如上所述不使程序大小增大,優(yōu)選的是,該程序是利用第一處理指令群140來進(jìn)行某種處理的程序。
      并且,在同一的程序中包含第一處理指令群140和第二處理指令群150的情況下,通過將該程序作為輸入來提供,從而能夠輸入雙方的處理指令群。再者,在此情況下,通過還設(shè)置程序輸出單元等,從而能夠?qū)⑺斎氲某绦螂y讀化為具有所述的特點(diǎn)的程序,所述程序輸出單元,將程序中的第二處理指令群150置換為輸出處理指令群160來輸出。
      再者,輸出處理指令群160的依賴處理指令群330是進(jìn)行依賴于第一處理指令群140的處理結(jié)果的處理的指令群。據(jù)此,在非法解析人非法竄改第一處理指令群140的情況下,輸出處理指令群160的處理的結(jié)果成為與本來的結(jié)果不同的結(jié)果。具體而言,例如,在非法解析人將圖5A的輸出內(nèi)容的再生可能次數(shù)的第一處理指令群140竄改為"int decrypt( intencryptedData){return 100;}"的情況下,依賴處理指令群330中的"plainData"的值變?yōu)?00,而變?yōu)榕c"OxFODD"不同的值。據(jù)此,即使輸出處理指令群160被執(zhí)行,也與本來的解壓處理不同的值被輸出。據(jù)此,竄改了第一處理指令群140的非法解析人,若不非法竄改輸出處理指令群160,則不能正確地執(zhí)行內(nèi)容。如此,在第一處理指令群140和第二處理指令群150是內(nèi)容的再生等的較大的功能的構(gòu)成要素的情況下,若其一部分的構(gòu)成要素被竄改,則使其它的一部分的構(gòu)成要素的動作產(chǎn)生異常。據(jù)此,可以使非法解析人難以如意地竄改功能。(2)竄改防止處理生成裝置110的結(jié)構(gòu)
      其次,進(jìn)行竄改防止處理生成裝置110的說明。竄改防止處理生成裝置IIO是將第二處理指令群150變換為所述輸出處理指令群160的裝置。圖6是竄改防止處理生成裝置110的結(jié)構(gòu)圖。
      竄改防止處理生成裝置110包括輸入處理指令群保持部210、被參考變量解析部220、被參考變量信息保持部230、被參考變量值代入處理指令群生成部240、被參考變量值代入處理指令群保持部250、被參考變量值保持部260、被代入變量解析部270、被代入變量信息保持部280、估計(jì)值信息保持部295、估計(jì)值算出部290、依賴處理指令群生成部201、依賴處理指令群保持部202、分支處理指令群生成部203、分支處理指令群保持部204、輸出處理指令群生成部205、以及輸出處理指令群保持部206。
      輸入處理指令群保持部210,獲得第一處理指令群140和第二處理指令群150,保持所獲得的各個指令群。
      被參考變量解析部220,解析在執(zhí)行第一處理指令群140時預(yù)先需要在哪種引數(shù)等的變量(被參考變量)設(shè)定值。
      被參考變量信息保持部230,保持通過被參考變量解析部220的解析所獲得的被參考變量的變量名等的信息。
      被參考變量值代入處理指令群生成部240,生成用于將值代入到被參考變量的被參考變量值代入處理指令群310。
      被參考變量值代入處理指令群保持部250,保持被參考變量值代入處理指令群生成部240生成的被參考變量值代入處理指令群310。
      被參考變量值保持部260,保持由被參考變量值代入處理指令群310代入到被參考變量的值。
      被代入變量解析部270,解析哪種變量(被參考變量)被代入第一處理指令群140的處理結(jié)果。
      被代入變量信息保持部280,保持通過被代入變量解析部270的解析所獲得的被參考變量的變量名等的信息。
      估計(jì)值算出部290,將被參考變量的值作為被參考變量值保持部260所保持的值,并算出在執(zhí)行第一處理指令群140時所獲得的被代入變量的估計(jì)值。
      估計(jì)值信息保持部295,保持估計(jì)值算出部290算出的估計(jì)值。
      依賴處理指令群生成部201,根據(jù)第二處理指令群150和估計(jì)值來生成依賴處理指令群330。
      依賴處理指令群保持部202,保持依賴處理指令群生成部201生成的依賴處理指令群330。
      分支處理指令群生成部203,生成分支處理指令群320,該分支處理指令群320調(diào)用輸入處理指令群保持部210保持的第一處理指令群140。
      分支處理指令群保持部204,保持分支處理指令群生成部203生成的分支處理指令群320。
      輸出處理指令群生成部205生成輸出處理指令群160,該輸出處理指令群160包括被參考變量值代入處理指令群保持部250保持的被參考變量值代入處理指令群310、分支處理指令群保持部204保持的分支處理指令群320、以及依賴處理指令群保持部202保持的依賴處理指令群330。
      輸出處理指令群保持部206,保持輸出處理指令群生成的輸出處理指令群160。
      以下,對于所述的各個構(gòu)成要素進(jìn)行詳細(xì)說明。而且,在以下的說明中,除了說明各個構(gòu)成要素的功能以外,還說明在圖5A的第一處理指令群140被輸入的情況下的工作的具體例子。
      (2.1) 輸入處理指令群保持部210
      輸入處理指令群保持部210,從外部接受第一處理指令群140和第二處理指令群150的輸入。也就是,輸入處理指令群保持部210,獲得第一處理指令群140和第二處理指令群150。并且,輸入處理指令群保持部210,具備記憶一個以上的處理指令群的區(qū)域。輸入處理指令群保持部210,保持竄改防止處理生成裝置110所輸入的第一處理指令群140和第二處理指令群150。而且,當(dāng)然可以分別構(gòu)成接受輸入的部位、和保持所輸入的指令群的部位。
      (2.2) 被參考變量解析部220
      被參考變量解析部220,解析(確定)在執(zhí)行輸入處理指令群保持部210
      32保持的第一處理指令群140時需要的參數(shù),并將解析(確定)的信息存儲到被 參考變量信息保持部230。
      具體而言,例如,若第一處理指令群140是函數(shù),則被參考變量解析 部220確定該函數(shù)的引數(shù)的類型、名稱或個數(shù)。并且,例如,若第一處理 指令群140是包含參考外部變量的處理的指令群,則被參考變量解析部220 確定該外部變量的變量名或類型。并且,例如,若第一處理指令群140是 包含參考棧的值的處理的指令群,則被參考變量解析部220確定被參考的 棧的大小。并且,例如,若第一處理指令群140是包含參考在以地址變量 來指定的位置所存儲的值的處理的指令群,則被參考變量解析部220確定 該地址變量或要存儲的值的類型。在以下的說明中,將如此確定的信息(解 析的信息)、即與在執(zhí)行第一處理指令群140時需要的參數(shù)有關(guān)的信息,總 稱為被參考變量信息。
      作為具體例子,被參考變量解析部220,在圖5A的第一處理指令群 140被輸入的情況下,確定(解析)函數(shù)的引數(shù)名和該引數(shù)的類型"int encryptedData",并將其存儲到被參考變量信息保持部230。在此,引數(shù) 名是"encryptedData",類型是"int"。
      (2.3) 被參考變量信息保持部230 被參考變量信息保持部230,具備記憶被參考變量信息的區(qū)域。 被參考變量信息保持部230,記憶被參考變量解析部220所確定的第
      一處理指令群140的被參考變量信息。
      具體而言,被參考變量信息保持部230,在被參考變量解析部220解 析圖5A的第一處理指令群140的情況下,記憶函數(shù)的引數(shù)名和類型"int encryptedData "。
      (2.4) 被參考變量值代入處理指令群生成部240 被參考變量值代入處理指令群生成部240生成被參考變量值代入處理
      指令群310,并將生成的處理指令群寫入到被參考變量值代入處理指令群 保持部250,該被參考變量值代入處理指令群310是對在執(zhí)行第一處理指 令群140時需要的參數(shù)設(shè)定值的處理指令群。并且,被參考變量值代入處 理指令群生成部240,將對參數(shù)設(shè)定的值寫入到被參考變量值保持部260。 具體而言,例如,被參考變量值代入處理指令群生成部240,獲得被參考變量信息保持部230保持的變量名。其次,被參考變量值代入處理指 令群生成部240,決定代入到獲得的變量名示出的變量的值。而且,被參 考變量值代入處理指令群生成部240,將獲得的變量名和決定的值的組寫 入到被參考變量值保持部260。再者,被參考變量值代入處理指令群生成 部240,生成將預(yù)先決定了的值代入到變量的處理(被參考變量值代入處理 指令群310),并將該處理寫入到被參考變量值代入處理指令群保持部250。 進(jìn)一步,具體而言,在被參考變量信息保持部230進(jìn)行以(2.3)的具體 例子來示出的處理的情況下,被參考變量值代入處理指令群生成部240獲 得被參考變量信息保持部230保持的被參考變量信息"int encryptedData"。其次,被參考變量值代入處理指令群生成部240,隨機(jī) 決定代入到"encryptedData"的int型的常數(shù)值。在此假設(shè),被參考變量 值代入處理指令群生成部240,將常數(shù)值決定為"0xF022"。其次,被參考 變量值代入處理指令群生成部240,將決定的變量名和值的組"int encryptedData-0xF022"寫入到被參考變量值保持部260。并且,被參考 變量值代入處理指令群生成部240,將"encryptedData=0xF022"作為被 參考變量值代入處理指令群310,來寫入到被參考變量值代入處理指令群 保持部250。
      (2.5) 被參考變量值代入處理指令群保持部250 被參考變量值代入處理指令群保持部250,具備記憶一個以上的處理
      指令的區(qū)域。被參考變量值代入處理指令群保持部250,將被參考變量值 代入處理指令群生成部240生成的被參考變量值代入處理指令群310記憶 到記憶區(qū)域。在被參考變量值代入處理指令群生成部240生成的處理指令 有多個的情況下,記憶多個處理指令。
      具體而言,在被參考變量值代入處理指令群生成部240進(jìn)行以(2.4)的 具體例子來示出的處理的情況下,記憶"encryptedData-0xF022;"。
      (2.6) 被參考變量值保持部260
      被參考變量值保持部260,具備記憶對在執(zhí)行第一處理指令群140時 需要的參數(shù)設(shè)定的值的區(qū)域。
      具體而言,例如,被參考變量值保持部260,具備記憶變量名和值的 多個組的區(qū)域,并記憶被參考變量值代入處理指令群生成部240決定的變量名、和代入到對應(yīng)于該變量名的變量的值的組。
      進(jìn)一步,具體而言,在被參考變量值代入處理指令群生成部240進(jìn)行 以(2.4)的具體例子來示出的處理的情況下,被參考變量值保持部260記憶 變量"encryptedData"和值"0xF022"的組。
      (2.7) 被代入變量解析部270
      被代入變量解析部270,解析(確定)輸入處理指令群保持部210保持的 第一處理指令群140的處理結(jié)果被存儲的存儲目標(biāo)。
      具體而言,例如,在第一處理指令群140是函數(shù)的情況下,被代入變 量解析部270確定該函數(shù)的返回值的變量名或類型。并且,例如,若第一 處理指令群140是對外部變量決定值的處理,則被代入變量解析部270確 定該外部變量的變量名或類型。并且,例如,若第一處理指令群140是包 含將值存儲到棧的處理的指令群,則被代入變量解析部270確定該棧的大 小或棧上的位置(棧指針)。并且,例如,若第一處理指令群140是包含將值 存儲到以地址變量來指定的位置的處理的指令群,則被代入變量解析部270 確定用于存儲的地址。在以下的說明中,將如此確定的信息、即第一處理 指令群140的處理結(jié)果被存儲的存儲目標(biāo)的信息,總稱為被代入變量信息。 而且,在棧等被實(shí)現(xiàn)為OS(Operating System:操作系統(tǒng))的功能的情況下, 有時在程序中不明確表示棧指針或棧的大小,然而,這些值也是被代入變 量信息。
      其次,被代入變量解析部270,將解析(確定)的被代入變量信息存儲到 被代入變量信息保持部280。
      進(jìn)一步,具體而言,在將圖5A的第一處理指令群140作為解析的對 象的情況下,被代入變量解析部270,確定函數(shù)的返回值被存儲的變量名 和類型"int plainData",將"int plainData"存儲到被代入變量信息保 持部280。
      (2.8) 被代入變量信息保持部280
      被代入變量信息保持部280,記憶被代入變量解析部270所確定的第 一處理指令群140的被代入變量信息。
      在以第一處理指令群140來決定值的變量(被代入變量)有多個的情況 下,記憶其中一個以上的變量名(被代入變量信息)等。而且,只要知道一個被代入變量就能夠?qū)崿F(xiàn)本發(fā)明,因此,即使確定多個被代入變量也不需要 記憶所有的被代入變量。對于記憶與哪個被代入變量有關(guān)的被代入變量信
      息,可以由被代入變量信息保持部280決定,也可以由被代入變量解析部 270決定。并且,對于要記憶被代入變量信息的被代入變量的決定方法沒 有特別的限制,例如,可以決定為最初找到的被代入變量,也可以從找到 的被代入變量中隨機(jī)決定。
      具體而言,在通過被代入變量解析部270對圖5A的第一處理指令群 140進(jìn)行解析的情況下,被代入變量信息保持部280記憶函數(shù)的返回值被 存儲的變量名和類型"intplainData"。 (2.9)估計(jì)值算出部290
      估計(jì)值算出部290,算出估計(jì)值,該估計(jì)值是在利用被參考變量值保 持部260保持的被參考變量的值來執(zhí)行第一處理指令群140的情況下,被 代入到被代入變量的估計(jì)值。
      具體而言,估計(jì)值算出部290進(jìn)行以下示出的A) E)的處理。
      A) 估計(jì)值算出部290,從被代入變量信息保持部280讀入被代入變量 信息。
      B) 估計(jì)值算出部290,從被參考變量值保持部260讀入被參考變量名 以及值。
      C) 估計(jì)值算出部290,將讀入的值代入到被參考變量,并執(zhí)行輸入處 理指令群保持部210保持的第一處理指令群140。
      D) 估計(jì)值算出部290,參考第一處理指令群140的執(zhí)行后的被代入變 量的值。
      E) 估計(jì)值算出部290,將被代入變量的變量名、和參考的被代入變量 的值的組寫入到估計(jì)值信息保持部295。
      而且,在被代入變量信息保持部280保持多個被代入變量信息的情況 下,估計(jì)值算出部290,將各個被代入變量的變量名和其值的組寫入到估 計(jì)值信息保持部295。
      進(jìn)一步,具體而言,在被參考變量值保持部260進(jìn)行以(2.6)的具體例 子來示出的處理的情況下,估計(jì)值算出部290進(jìn)行以下示出的A) E)的處 理。A) 估計(jì)值算出部290,讀入被代入變量信息保持部280保持的被代入 變量信息"int plainData"。
      B) 估計(jì)值算出部290,從被參考變量值保持部260讀入"int encryptedData=0xF022"。在此,被參考變量名"encryptedData",值是
      "OxF022"。
      C) 估計(jì)值算出部290,執(zhí)行"decrypt(0xF022);"。也就是,將值 "OxF022"代入到"decrypt(encryptedData);"的"encryptedData"來
      進(jìn)行計(jì)算。
      D) 估計(jì)值算出部290,算出在執(zhí)行"decrypt(0xF022);"后獲得的被代 入變量"plainData"的值。在此,估計(jì)值算出部290,算出"0xF022A0x00FF =OxFODD"。
      E) 估計(jì)值算出部290,將"intplainData=OxFODD"存儲到估計(jì)值信 息保持部295。在此,被代入變量的變量名是"plainData",值是"OxFODD"。
      (2.10) 估計(jì)值信息保持部295
      估計(jì)值信息保持部295,具備記憶估計(jì)值信息的區(qū)域。在此,估計(jì)值 信息是指,應(yīng)該保持估計(jì)值的變量名或該估計(jì)值等的信息。
      具體而言,估計(jì)值信息保持部295,將估計(jì)值算出部290所算出的估 計(jì)值和其變量名作為所述的估計(jì)值信息來保持。
      進(jìn)一步,具體而言,估計(jì)值算出部290進(jìn)行以(2.9)的具體例子來示出 的處理的情況下,保持"int plainData=0xF0DD"。在此,估計(jì)值是 "0xF0DD",變量名是"plainData"。
      (2.11) 依賴處理指令群生成部201
      依賴處理指令群生成部201,根據(jù)估計(jì)值信息保持部295保持的估計(jì) 值、以及輸入處理指令群保持部210保持的第二處理指令群150來生成依 賴處理指令群330。
      依賴處理指令群330是進(jìn)行與第二處理指令群150同等的處理的處理 指令群,也是包含參考第一處理指令群140的處理結(jié)果的處理、且一部分 的處理為利用所參考的值的處理的處理指令群。
      具體而言,依賴處理指令群生成部201,例如進(jìn)行以下示出的A) F) 的處理。A) 依賴處理指令群生成部201,找到第二處理指令群150中包含的處 理指令中包含的常數(shù)。以下,該常數(shù)中包含的處理指令是Orl,該常數(shù)的 值是Val。
      B) 依賴處理指令群生成部201,讀入估計(jì)值信息保持部295保持的估 計(jì)值信息。以下,應(yīng)該保持其估計(jì)值的變量是Vrl,其估計(jì)值是Va2。
      C) 依賴處理指令群生成部201,算出Va3=Va2—Val。此時,成為 Val=Va2—Va3。
      D) 依賴處理指令群生成部201,生成處理指令0r2,該處理指令Or2, 通過從變量Vrl(應(yīng)該保持值Va2的變量)中減去值Va3,從而算出處理指令 Orl中包含的值Val。也就是,Or2是"(Vrl—Va3)"。
      E) 依賴處理指令群生成部201生成依賴處理指令群330,該依賴處理 指令群330是將第二處理指令群150的處理指令Orl置換為處理指令Or2 的指令群。
      在進(jìn)行這些置換的情況下,若變量Vrl的值是估計(jì)值Va2,則"Vrl —Va3"的值是"Va2—Va3=Val"。也就是,即使對處理指令Orl中包含 的值Val進(jìn)行所述的置換,也只要Vrl被代入正確的值,處理指令Or2就 能夠產(chǎn)生與進(jìn)行置換之前相同的結(jié)果。
      具體而言,在估計(jì)值信息保持部295進(jìn)行(2.10)的處理的情況下,依賴 處理指令群生成部201,進(jìn)行以下示出的A) E)的處理。
      A) 依賴處理指令群生成部201,將處理指令Orl作為"decompressed Data=(decompressedData l)| 0x0001;",將值Val作為"0x0001"。
      B) 依賴處理指令群生成部201,從估計(jì)值信息保持部295讀入"int plainData=0xF0DD"。在此,依賴處理指令群生成部201,將變量Vrl作 為"plainData",將值Va2作為"0xF0DD"。
      C) 依賴處理指令群生成部201算出值Va3、即算出"0xF0DD — OxO001=OxF0DC"。
      D) 依賴處理指令群生成部201,生成處理指令Or2"decompressedDa ta=(decompressedData《l) | (plainData—0xF0DC);"。
      E) 依賴處理指令群生成部201,生成依賴處理指令群330,該依賴處理 指令群330是將第二處理指令群150的處理指令Orl置換為處理指令Or2
      38的指令群。而且,由于本實(shí)施例是以C語言的程序,因此,為了使依賴處
      理指令群330作為C語言程序來適當(dāng)?shù)毓ぷ鳎诵枰龅奶幚硪酝猓?還需要追加函數(shù)聲明或變量聲明。
      如上所述,生成與圖5C示出的依賴處理指令群330相同的指令群。 而且,在此,在所述的C)進(jìn)行了 "Va3=Va2—Val"的運(yùn)算,但也可 以以其它的計(jì)算式來進(jìn)行運(yùn)算或處理。具體而言,可以進(jìn)行異或運(yùn)算或加 法運(yùn)算等,也可以進(jìn)行變換更復(fù)雜的函數(shù)等的運(yùn)算。在此情況下,使計(jì)算 式或處理變形,來生成求出Va2的計(jì)算式或處理,將其置換為Va2即可。 也就是,通過進(jìn)行利用Val和Va2的運(yùn)算或處理來算出Va3,生成進(jìn)行根 據(jù)所獲得的Va3和Val來倒算Va2的運(yùn)算或處理的指令群,將其置換為 Va2即可。
      (2.12) 依賴處理指令群保持部202 依賴處理指令群保持部202,具備記憶一個以上的處理指令的區(qū)域。
      依賴處理指令群保持部202,將依賴處理指令群生成部201生成的依賴處 理指令群330記憶在記憶區(qū)域。
      具體而言,在依賴處理指令群生成部201進(jìn)行(2.11)的處理的情況下, 依賴處理指令群保持部202記憶圖5C示出的依賴處理指令群330。
      (2.13) 分支處理指令群生成部203
      分支處理指令群生成部203,生成分支處理指令群320,該分支處理指 令群320調(diào)用輸入處理指令群保持部210保持的第一處理指令群140。
      具體而言,例如,若第一處理指令群140是函數(shù),則分支處理指令群 生成部203生成函數(shù)調(diào)用指令。并且,若第一處理指令群140是子程序, 則分支處理指令群生成部203生成子程序調(diào)用指令。并且,若第一處理指 令群140是例外處理,則分支處理指令群生成部203生成用于產(chǎn)生例外的 處理指令。
      進(jìn)一步,具體而言,在輸入處理指令群保持部210進(jìn)行(2.1)的處理的 情況下,分支處理指令群生成部203,生成作為函數(shù)調(diào)用指令的 "plainData=decrypt(encryptedData);",以作為分支處理指令群320。
      (2.14) 分支處理指令群保持部204
      分支處理指令群保持部204,具備記憶一個以上的處理指令的區(qū)域。分支處理指令群保持部204,將分支處理指令群生成部203生成的分支處 理指令群320記憶在記憶區(qū)域。
      具體而言,在分支處理指令群生成部203進(jìn)行(2.13)的處理的情況下, 分支處理指令群保持部204記憶"plainData二decrypt(encryptedData);"。
      (2.15) 輸出處理指令群生成部205
      輸出處理指令群生成部205生成輸出處理指令群160,該輸出處理指 令群160包括被參考變量值代入處理指令群保持部250保持的被參考變量 值代入處理指令群310、分支處理指令群保持部204保持的分支處理指令 群320、以及依賴處理指令群保持部202保持的依賴處理指令群330。
      具體而言,在進(jìn)行了到所述的(2.13)為止的處理的情況下,輸出處理指 令群生成部205生成圖5C的輸出處理指令群160。
      (2.16) 輸出處理指令群保持部206
      輸出處理指令群保持部206,具備記憶一個以上的處理指令群的區(qū)域。 輸出處理指令群保持部206,記憶輸出處理指令群生成部205生成的輸出 處理指令群160。
      具體而言,在輸出處理指令群生成部205進(jìn)行(2.15)的處理的情況下, 輸出處理指令群保持部206記憶圖5C的輸出處理指令群160。
      (2.17) 竄改防止處理生成裝置110的工作 對于竄改防止處理生成裝置110的工作,利用圖7進(jìn)行說明。 圖7是示出竄改防止處理生成裝置110的工作的流程圖。 被參考變量解析部220解析(確定)與被參考變量有關(guān)的被參考變量信
      息,該被參考變量是在執(zhí)行輸入處理指令群保持部210保持的第一處理指 令群140時需要的參數(shù)的存儲目標(biāo)(步驟S100)。
      被參考變量解析部220,將解析(確定)的被參考變量信息存儲到被參考 變量信息保持部230(步驟Sl02)。
      被參考變量值代入處理指令群生成部240,決定存儲到在步驟S100解 析(確定)的被參考變量的值(步驟Sl04)。
      被參考變量值代入處理指令群生成部240,將在步驟S104決定的、存
      儲到被參考變量的值以及被參考變量名,存儲到被參考變量值保持部 260(步驟S106)。
      40被參考變量值代入處理指令群生成部240,生成被參考變量值代入處 理指令群310,該被參考變量值代入處理指令群310是將在步驟S104決定 的值存儲到被參考變量的處理指令群(步驟S10S)。
      被參考變量值代入處理指令群生成部240,將在步驟S108生成的被參 考變量值代入處理指令群310存儲到被參考變量值代入處理指令群保持部 250(步驟S110)。
      估計(jì)值算出部290,算出估計(jì)值,該估計(jì)值是在利用被參考變量值保 持部260保持的被參考變量的值來執(zhí)行第一處理指令群140的情況下,被 代入變量所取的估計(jì)值(步驟S112)。在此,假設(shè)被代入變量解析部270在 進(jìn)行步驟S112的處理之前解析被代入變量,并將其結(jié)果存儲到被代入變量 信息保持部280。因此,在步驟S112,估計(jì)值算出部290從被代入變量信 息保持部280獲得關(guān)于被代入變量的信息,來算出估計(jì)值。
      估計(jì)值算出部290,將算出的估計(jì)值、以及被代入變量名存儲到估計(jì) 值信息保持部(步驟S114)。
      依賴處理指令群生成部201,根據(jù)估計(jì)值信息保持部295保持的估計(jì) 值、以及輸入處理指令群保持部210保持的第二處理指令群150,來生成 依賴處理指令群330(步驟Sl16)。
      依賴處理指令群生成部201,將生成的依賴處理指令群330存儲到依 賴處理指令群保持部202(步驟S118)。
      分支處理指令群生成部203,生成分支處理指令群320,該分支處理指 令群320調(diào)用輸入處理指令群保持部210所保持的第一處理指令群140(步 驟S120)。
      分支處理指令群生成部203,將生成的分支處理指令群320存儲到分 支處理指令群保持部204(步驟S122)。
      輸出處理指令群生成部205,生成輸出處理指令群160,該輸出處理指 令群160由被參考變量值代入處理指令群保持部250所保持的被參考變量 值代入處理指令群310、分支處理指令群保持部204所保持的分支處理指 令群320、依賴處理指令群保持部202所保持的依賴處理指令群330構(gòu)成 (步驟Sl24)。
      輸出處理指令群生成部205,將生成的輸出處理指令群160存儲到輸出處理指令群保持部206(步驟S126)。
      (2.18)竄改防止處理生成裝置110的效果 竄改防止處理生成裝置110,能夠依據(jù)作為輸入受到的第一處理指令群 140以及第二處理指令群150來生成具有在(1.5)所述的效果的輸出處理指 令群160。
      圖8是用于說明竄改防止處理生成裝置110的效果的說明圖。
      竄改防止處理生成裝置110,例如獲得包含第一處理指令群140和第 二處理指令群150的輸入程序(原程序)101,并將該輸入程序101變換為竄 改防止程序102后輸出。此時,如上所述,竄改防止處理生成裝置110, 將輸入程序101的第二處理指令群150變換為輸出處理指令群160。
      也就是,竄改防止處理生成裝置110,向第二處理指令群150追加作 為保護(hù)對象代碼的第一處理指令群140的調(diào)用處理,并且,使第二處理指 令群150的解壓處理依賴于作為保護(hù)對象代碼的第一處理指令群140的處 理結(jié)果(依賴處理),從而生成竄改防止處理。
      在保護(hù)對象代碼(第一處理指令群140)的調(diào)用處理中,在被參考變量值 代入處理指令群310,在值"0x0022"被代入到保護(hù)對象代碼的被參考變 量"encryptedData"的狀態(tài)下,保護(hù)對象代碼被調(diào)用。
      此結(jié)果是,在竄改防止程序102中,由于不會如以往那樣保護(hù)對象代 碼被讀入為數(shù)據(jù),因此能夠使非法解析人難以找到竄改防止處理。
      而且,在依賴處理中,依賴處理指令群330的解壓處理"decompressed Data=(decompressedData l) | (plainData—0xF0DC",依賴于"plainD ata"的值,該"plainData"的值是保護(hù)對象代碼被所述的調(diào)用處理調(diào)用 并執(zhí)行的結(jié)果(第一處理指令群140的處理結(jié)果)。也就是,若保護(hù)對象代碼 未被竄改,則"plainData"的值為估計(jì)值"0xF0DD",因此,若竄改防 止程序102的輸出處理指令群160被執(zhí)行,則第二處理指令群150的解壓 處理"decompressedData=(decompressedData l) I 0x0001"準(zhǔn)確地被 執(zhí)行。
      另一方面,若保護(hù)對象代碼被竄改,則"plainData"的值與估計(jì)值 "OxF0DD"不同,因此,若竄改防止程序102的輸出處理指令群160被 執(zhí)行,則與第二處理指令群150的解壓處理不同的處理被執(zhí)行。也就是,
      42竄改防止程序102中包含的輸入程序101的處理不準(zhǔn)確地被執(zhí)行。
      此結(jié)果是,在竄改防止程序102中,由于沒有如以往那樣的判定/結(jié)束 處理,因此能夠使非法解析人更難以找到竄改防止處理。在程序中若有判 定/結(jié)束處理,非法解析人,則通過執(zhí)行多次程序來收集每次的日志,從而 能夠根據(jù)每次的日志的不同來容易發(fā)現(xiàn)判定/結(jié)束處理,即能夠容易找到帶 有判定/結(jié)束處理的竄改防止處理。
      然而,在竄改防止程序102中,由于如上所述沒有判定/結(jié)束處理,因 此難以找到竄改防止處理。
      而且,能夠使非法解析人認(rèn)為被輸出處理指令群160調(diào)用的保護(hù)對象 代碼(第一處理指令群140)是輸出處理指令群160的一部分,從而能夠使第 二處理指令群150難讀化。
      如此,本實(shí)施例中的竄改防止處理生成裝置110,向第二處理指令群 150追加保護(hù)對象代碼的調(diào)用處理,并且生成依賴處理,從而能夠生成輸 出處理指令群160(竄改防止程序102),以確實(shí)防止對保護(hù)對象代碼的竄改。 并且,本實(shí)施例中的竄改防止處理生成裝置110,對以Java(注冊商標(biāo))等 語言來描述的程序,也確實(shí)能夠防止對該程序的保護(hù)對象代碼的竄改,所 述Java(注冊商標(biāo))等語言是在正在程序執(zhí)行中不能將存儲器上的代碼讀入 為數(shù)據(jù)的語言。 (變形例1)
      在所述的實(shí)施例中,將作為第一處理指令群140的引數(shù)的變量照原樣 作為在被參考變量值代入處理指令群310代入值的變量,但不僅限于此。 被參考變量值代入處理指令群生成部240,可以確定第二處理指令群150 所使用的變量名,也可以將下列指令群作為被參考變量值代入處理指令群 310,所述指令群是指,進(jìn)行將隨機(jī)的值代入到被參考變量信息保持部230 所保持的變量名中未被第二處理指令群150使用的變量名的變量的處理的 指令群。若利用這些結(jié)構(gòu),在以第一處理指令群存儲返回值的變量名,依 據(jù)第二處理指令群150被使用于其它的用途的情況下,也能夠進(jìn)行第二處 理指令群150的難讀化。
      在所述的實(shí)施例中,由于第一處理指令群140和二處理指令群150本 來是不需要交換信息的指令群,因此,即使將存儲第一處理指令群140的處理結(jié)果的變量照原樣被用于難讀化上,據(jù)此準(zhǔn)確的處理結(jié)果也不會被重
      寫。然而,在第二處理指令群150是本來包含調(diào)用第一處理指令群140的 指令的、且利用其處理結(jié)果的指令群的情況下,若單純地施行所述的難讀 化,則其處理結(jié)果由被參考變量值代入處理指令群310重寫,從而不能保 證正常工作。在此,如上所述,通過利用第二處理指令群150中不包含的 變量,從而用于難讀化的變量成為與存儲第二處理指令群150中本來包含 的第一處理指令群140的處理結(jié)果的變量不同的變量,因此,在不影響到 處理結(jié)果的狀態(tài)下能夠進(jìn)行難讀化。也就是,在第二處理指令群150包含 第一處理指令群140的調(diào)用處理的情況下,也能夠進(jìn)行與所述相同的難讀 化。
      而且,當(dāng)然,在此情況下也可以獲得與(1.5)所述的效果相同的效果。 (變形例2)
      在被參考變量值代入處理指令群生成部240中,隨機(jī)決定代入到被參 考變量的值,但是,存在因代入的值而非法解析人的解析行為的難以度出 現(xiàn)差的情況。因此,竄改防止處理生成裝置110的結(jié)構(gòu),也可以是由用戶 指定代入的值或估計(jì)值的結(jié)構(gòu)。
      以下說明,在如圖5C所示代入到被參考變量"encryptedData"的值 為"0xF022"的情況下的非法解析人的解析行為的難以度、和在代入到被 參考變量"encryptedData"的值為"0XF0001 "的情況下的非法解析人 的解析行為的難以度的差的具體例子。
      如圖5C所示,若代入到被參考變量"encryptedData"的值為 "OxF022",則估計(jì)值算出部290算出的估計(jì)值為"0xF0DD"。因此,在 第一處理指令群140被竄改為處理"int decrypt(int encryptedData){return 0xF0DD" ;}"的情況下,輸出處理指令群160也可以正常工作。
      所述的處理是,使第一處理指令群140的返回值總是成為估計(jì)值的處理。
      此時,竄改后的第一處理指令群140輸出的再生可能次數(shù)是 "OxF0DD"。在此,"OxFODD"是由于以二進(jìn)制來表示的情況下的最高有 效位為l,因此"0xF0DD"是負(fù)值。也就是,第一處理指令群140輸出的 再生可能次數(shù)總是負(fù)值,因此,即使所述的竄改成功,也不能再生。據(jù)此,竄改是成功還是失敗都不能再生,因此,非法解析人不能判斷竄改的成功 與否。并且,即使非法解析人識別為竄改成功,由于再生可能次數(shù)總是負(fù) 值,因此,因竄改成功而帶來的利益少。
      另一方面,在代入到被參考變量的值隨機(jī)地決定為"0x0001"的情況
      下,估計(jì)值算出部290算出的估計(jì)值是"0x00FE"。因此,在第一處理指 令群 140被竄改為處理"int decrypt( int encryptedDataMreturn OxOOFE;}"的情況下,輸出處理指令群160正常工作。
      此時,最高有效位為0,因此,第一處理指令群140輸出的再生可能 次數(shù)0x00FE為正值。在此情況下,總是再生成為可能,因此,此竄改對 于非法解析人是理想的。
      如此,存在因代入到被參考變量的值而非法解析人的解析行為的難以 度出現(xiàn)差的情況。于是,也可以構(gòu)成竄改防止處理生成裝置110,以由用戶 指定代入的值或估計(jì)值。 (變形例3)
      在實(shí)施例1中,隨機(jī)地決定被參考變量的值,估計(jì)值算出部290算出 與其值相對應(yīng)的估計(jì)值,但也可以構(gòu)成竄改防止處理生成裝置110,以預(yù)先 獲得被參考變量的值或估計(jì)值。
      例如,也可以在結(jié)構(gòu)上利用開發(fā)第一處理指令群140后進(jìn)行試驗(yàn)時的 試驗(yàn)數(shù)據(jù)中包含的被參考變量信息、被參考變量值或估計(jì)值等的信息。
      在此情況下,竄改防止處理生成裝置110可以不包括被參考變量解析 部220、被代入變量解析部270、估計(jì)值算出部290。
      這些結(jié)構(gòu)有用于以下的情況等對利用相同的第一處理指令群140的 不同的多個程序分別進(jìn)行難讀化的情況;或者,到獲得兼?zhèn)鋱?zhí)行速度和強(qiáng) 度的輸出處理指令群160為止與進(jìn)行難讀化強(qiáng)度的調(diào)節(jié)的其它方法組合起 來反復(fù)試圖進(jìn)行難讀化的情況。
      也就是,在估計(jì)值的算出需要時間的情況下,即使只能獲得相同估計(jì) 值,也在每次進(jìn)行難讀化時進(jìn)行估計(jì)值的算出處理,因此各個難讀化需要 浪費(fèi)的吋間。在利用所述的結(jié)構(gòu)的情況下,若算出估計(jì)值一次,則能夠隨 意利用其值,因此,能夠以估計(jì)值的算出所需要的時間來使難讀化所需要 的時間變短。(變形例4)
      在以一個被參考變量都不包含的第一處理指令群140為對象的情況 下,也可以構(gòu)成竄改防止處理生成裝置110,以不包括被參考變量解析部 220以及被參考變量信息保持部230。 (變形例5)
      在實(shí)施例1的竄改防止處理生成裝置110中,由于以C語言為對象, 因此,具備保持中間程序的被參考變量值代入處理指令群保持部250、分 支處理指令群保持部204、依賴處理指令群保持部202、以及包括輸出處理 指令群生成部205,依據(jù)中間程序來輸出具有變量聲明以及函數(shù)聲明等的C 語言的程序(輸出處理指令群160)。然而,在以如匯編語言那樣的、通過依 次排列處理指令來可以生成的語言為對象的情況下,竄改防止處理生成裝 置110,可以不具備這些要素,而向輸出處理指令群保持部206依次追加 描述中間程序來將輸出處理指令群160輸出。
      (變形例6)
      利用圖9以及圖10說明作為竄改防止處理生成裝置110的變形例的竄 改防止處理生成裝置110a。而且,在以后的說明中,向?qū)嵤├齦的構(gòu)成要 素(裝置、部以及處理指令群等)的符號的末尾加上"a"的構(gòu)成要素表示其 構(gòu)成要素的變形例。例如,竄改防止處理生成裝置110a是作為實(shí)施例1的 構(gòu)成要素的竄改防止處理生成裝置110的變形例。并且,在本變形例中的 構(gòu)成要素中,利用與實(shí)施例1的構(gòu)成要素的名稱以及符號相同的名稱以及 符號來表示的構(gòu)成要素是,與在實(shí)施例1中說明的構(gòu)成要素相同的構(gòu)成要 素。
      竄改防止處理生成裝置110a是與竄改防止處理生成裝置IIO相同在處 理系統(tǒng)100上所使用的裝置。竄改防止處理生成裝置110a輸入第一處理指 令群140以及第二處理指令群150,將輸出處理指令群160a輸出。以下, 說明輸出處理指令群160a以及竄改防止處理生成裝置110a。 (3)輸出處理指令群160a的結(jié)構(gòu)
      圖9是竄改防止處理生成裝置110a所生成的輸出處理指令群160a的 具體例子的圖。
      輸出處理指令群160a包括被參考變量值代入處理指令群310a,對在執(zhí)行第一處理指令群140時需要的各種參數(shù)設(shè)定值;分支處理指令群 320a,調(diào)用第一處理指令群140:以及依賴處理指令群330a,調(diào)用第一處 理指令群140后被執(zhí)行。以下,利用此具體例子說明各個部。
      (3.1) 被參考變量值代入處理指令群310a 被參考變量值代入處理指令群310a是,對在調(diào)用并執(zhí)行第一處理指令
      群140吋需要的各種參數(shù)設(shè)定值的處理。在圖5C的被參考變量值代入處 理指令群310中,被參考變量"encryptedData"所存儲的值總被固定為 一個值"0xF022",與此相反,在被參考變量值代入處理指令群310a中, 所存儲的值不是一個固定值。
      具體而言,在圖9的被參考變量值代入處理指令群310a"encryptedDa ta=compressedData<<8;"中,被參考變量"encryptedData"所存儲的 值依賴于"compressedData"的。由于"compressedData"取0 31的 值(以十六進(jìn)制來表示為OxOO OxlF),因此通過被參考變量值代入處理指 令群"encryptedData=compressedData 8;"來被代入到被參考變量 "encryptedData"的值成為"0x0000, 0x0100,…,OxlFOO"中的任 一個。以后的說明中,利用集合的表達(dá)式,來將被參考變量的取值表示為 {encryptedData I encryptedData=0x0000, 0x0100,…,0xlF00}?;蛘撸?還利用"compressedData",以集合的表達(dá)式來將被參考變量的取值表示 為{encryptedData | encryptedData=compressedData<<8, compressed Data=0x00, 0x01,…,0xlF}。
      (3.2) 分支處理指令群320a
      分支處理指令群320a是向第一處理指令群140分支的處理指令群。 在實(shí)施例1的情況下,在通過執(zhí)行處理裝置130執(zhí)行輸出處理指令群 160時,調(diào)用第一處理指令群140后的被代入變量"plainData"的取值總 是一個固定值。這是因?yàn)?,給第一處理指令群140的處理結(jié)果帶來影響的 變量是被參考變量,并且,在實(shí)施例1中,總是將相同值代入到其被參考 變量的緣故。
      另一方面,在本變形例中,由于被代入到被參考變量"encryptedData" 的值不是一個固定值,因此被代入到被參考變量"plainData"的值也不是 一個固定值。由于被參考變量"encryptedData"的取值是"0x0000,0x0100,…,0xlF00"中的任一個,因此,被代入變量"plainData"的 取值成為作為通過第一處理指令群140來處理這些值的結(jié)果的"0x00FF, 0x01FF,…,0xlFFF"中的任一個。在以集合來表示被代入變量的取值 的情況下,成為(plainDatalplainData二OxOOFF, 0x01FF,, 0xlFFF}、 或(plainData | plainData=(compressedData《8)A0x00FF, compressed Data=0x00, 0x01,…,0xlF}。
      (3.3) 依賴處理指令群330a 依賴處理指令群330a是調(diào)用第一處理指令群140后被執(zhí)行的處理指令
      群,也是進(jìn)行與第二處理指令群150同等的處理的處理指令群。具體而言, 依賴處理指令群330a是一種處理指令群,即使被代入變量的值是在(3.2) 所述的取值中的任一個值,也進(jìn)行與第二處理指令群150同等的處理。
      進(jìn)一步,具體而言,依賴處理指令群330a是處理指令群"for(counter =0; counter〈compressedD ata; counter++) {decompressedD ata=(decomp ressedData《1) | ((compressedData《8)AplainDataA0x00FE);}"。
      在所述的處理指令群中,應(yīng)該關(guān)注的是"(compressedData《8)Aplain DataA0xOOFE"的處理指令群的部分。
      在 {plainData|plainData=(compressedData 8)A0x00FF , compressedData=0x00, 0x01,…,0xlF)時,該處理指令群為算出 "(compressedData 8)A(compressedData 8A0x00FF)A0x00FE "的 處理,輸出值總是1。也就是,由于(0011^^88640&1& 8)和plainData 的高8位是相同的值compressedData,因此,異或運(yùn)算的結(jié)果總是值 "OxO0FF"。在所述的處理指令群中,進(jìn)一步,對于其值,通過取與像0xFE 那樣的、只最低有效位與"0x00FF"不同的值之間的異或,從而獲得只最 低有效位為1的值,即獲得"0x0001"。因此,即使被代入變量的值是在(3.2) 所述的取值中的任一個值,依賴處理指令群330a也是與第二處理指令群 150同等的處理。
      (3.4) 輸出處理指令群160a的效果
      利用輸出處理指令群160a,由于存儲到被代入變量的值成為依賴被變 量"compressedData"而變化的值,因此可以使非法解析人的解析成為困 難。以下,進(jìn)行詳細(xì)說明。
      48在實(shí)施例1的情況下,非法解析人,若將"0 31"中的任一個依次代 入到被參考變量"compressedData"來執(zhí)行輸出處理指令群160a,則作 為分支處理指令群320 "plainData-decrypt(encryptedData)"的處理結(jié) 果的被代入變量的值"plainData"總是成為一個固定值"OxFODD"。于 是,非法解析人,能夠推測為"plainData"的值總是成為"OxFODD", 來將分支處理指令群320竄改為"plainData=OxFODD;"。在非法解析人 按照這些順序進(jìn)行解析的情況下,非法解析人能夠不解析第一處理指令群 140的內(nèi)容而高效率地解析輸出處理指令群160。另一方面,在輸出處理指 令群160a的情況下,由于被代入變量的值按照"compressedData"的值 來產(chǎn)生變化,因此不能進(jìn)行這些解析。
      (4)竄改防止處理生成裝置110a的結(jié)構(gòu)
      圖10是竄改防止處理生成裝置110a的結(jié)構(gòu)圖。
      在竄改防止處理生成裝置110a中,圖6的竄改防止處理生成裝置110 的被參考變量值代入處理指令群生成部.240、被參考變量值保持部260、估 計(jì)值算出部290、估計(jì)值信息保持部295以及依賴處理指令群生成部201, 分別被置換為被參考變量值代入處理指令群生成部240a、被參考變量值保 持部260a、估計(jì)值算出部290a、估計(jì)值信息保持部295a以及依賴處理指 令群生成部201a。
      以下,說明置換了的構(gòu)成要素。而且,應(yīng)該注意的是,以下舉例示出 的具體例子是,用于獲得與圖9示出的輸出處理指令群160a不同的輸出處 理指令群的處理。
      (4.1)被參考變量值代入處理指令群生成部240a
      被參考變量值代入處理指令群生成部240a生成被參考變量值代入處 理指令群310a,并將生成的處理指令群寫入到被參考變量值代入處理指令 群保持部250,該被參考變量值代入處理指令群310a是對在執(zhí)行第一處理 指令群140時需要的參數(shù)設(shè)定值的處理指令群。并且,將對參數(shù)設(shè)定的值 寫入到被參考變量值保持部260a。
      具體而言,例如,被參考變量值代入處理指令群生成部240a,獲得被 參考變量信息保持部230保持的變量名,對獲得的各個變量進(jìn)行以下的 A) D)的處理。A) 被參考變量值代入處理指令群生成部240a,決定被參考變量值代入 處理指令群310a。對于被參考變量值代入處理指令群310a,可以隨機(jī)地 利用第二處理指令群150的被依賴變量來生成,也可以將被依賴變量編入 到預(yù)定的指令群的模板來生成等。
      B) 被參考變量值代入處理指令群生成部240a,將決定的被參考變量值 代入處理指令群310a寫入到被參考變量值代入處理指令群保持部250。
      C) 被參考變量值代入處理指令群生成部240a,求出依據(jù)被參考變量值 代入處理指令群310a的被參考變量的取值的集合。
      D) 被參考變量值代入處理指令群生成部240a,將求出的集合寫入到被 參考變量值保持部260a。
      進(jìn)一步,具體而言,對于圖5A的第一處理指令群140迸行以下的處理。
      A) 被參考變量值代入處理指令群生成部240a,將被參考變量值代入處 理指令群310a作為"encryptedData=compressedData<<8"。該處理指 令群是利用第二處理指令群150的被依賴變量來隨機(jī)地生成的公式。
      B) 被參考變量值代入處理指令群生成部240a,將被參考變量值代入處 理指令群310a "encryptedData=compressedData 8"寫入到被參考變 量值代入處理指令群保持部250。
      C) 被參考變量值代入處理指令群生成部240a,求出依據(jù)被參考變量值 代入處理指令群310a的被參考變量的取值的集合。該集合成為 {encryptedData! encryptedData=compressedData 8, compressedDa ta=0x00, 0x01,…,OxlF)。
      D) 被參考變量值代入處理指令群生成部240a,將求出的集合寫入到被 參考變量值保持部260a。在此,將集合fencryptedDatalencryptedData二 compressedData《8, compressedData=0x00, 0x01、、、 OxlF)寫入。
      (4.2)被參考變量值保持部260a
      被參考變量值保持部260a,具備記憶對在執(zhí)行第一處理指令群140時 需要的參數(shù)設(shè)定的值的區(qū)域。
      具體而言,例如,被參考變量值保持部260a,具備記憶變量名、和該 變量名的變量的取值的集合的信息的區(qū)域。
      50進(jìn)一步,具體而言,對于圖5A的第一處理指令群140,被參考變量值 保持部260a保持集合(encryptedData | encryptedData-compressedData <<8, c。mpressedData=0x00, 0x01,…,OxlF}。在此,變量名是 "encryptedD ata ",其值的集合是(encryptedData=compressedData《 8, compressedData=0x00, 0x01,…,0xlF}。而且,可以具體列舉值來 表示所保持的細(xì)節(jié),也可以以集合來表示所保持的細(xì)節(jié)。 (4.3)估計(jì)值算出部290a
      估計(jì)值算出部290a,算出估計(jì)值的值,該估計(jì)值是在利用被參考變量 值保持部260a保持的被參考變量的值來執(zhí)行第一處理指令群140的情況 下,被代入到被代入變量的估計(jì)值。在此,被參考變量值不是只一個值, 而是值的集合中包含的任意的值,因此,估計(jì)值算出部290a,求出估計(jì)值, 以作為集合。
      具體而言,例如估計(jì)值算出部290a進(jìn)行以下的A) C)的處理。
      A) 估計(jì)值算出部290a,從被代入變量信息保持部280讀入被代入變量 信息。
      B) 估計(jì)值算出部290a,從被參考變量值保持部260a讀入被參考變量 名以及值的集合,并對于值的集合的要素反復(fù)進(jìn)行以下的(a )以及(P )的處 理。
      (O估計(jì)值算出部290a,將讀入的值代入到被參考變量,執(zhí)行輸入處 理指令群保持部210保持的第一處理指令群140。
      (P )估計(jì)值算出部290a,參考在執(zhí)行第一處理指令群140后的被代入 變量的值。
      C) 估計(jì)值算出部290a,將在B)參考的值的集合、以及在A)讀入的被 代入變量的變量名存儲到估計(jì)值信息保持部295。
      進(jìn)一步,具體而言、在進(jìn)行以(4.1)以及(4.2)的具體例子來示出的處理 的情況下,估計(jì)值算出部290a進(jìn)行以下的處理。
      A) 估計(jì)值算出部290a,讀入被代入變量信息"intplainData"。
      B) 估計(jì)值算出部290a,讀入集合(encryptedData | encryptedData= compressedData《8, compressedData=0x00, 0x01, …,0xlF}。
      估計(jì)值算出部290a,對于"compressedData"是"0x00, 0x01,…,OxlF"的各個的情況,反復(fù)進(jìn)行以下的(a)以及(e)的處理。
      (a)估計(jì)值算出部290a,算出"compressedData"是各個值的情況 下的"enciyptedData"的值,還算出作為依據(jù)第一處理指令群140的處 理結(jié)果的"encryptedDataAOxOOFF"。
      (P)估計(jì)值算出部290a,參考算出的值。
      而且,對于compressedData是"0x00, 0x01,, OxlF"的各個的 情況,被代入變量"plainData"的值成為"OxOOFF, 0x01FF,…,OxlFFF"。
      C)估計(jì)值算出部290a ,將{plainData | plainData=0x0OFF , 0x01FF,…,0xlFFF)存儲到估計(jì)值信息保持部295。
      而且,所述的處理是在以列舉來表示"plainData"的值的集合的情況 下的處理。在以集合來表示并記錄"plainData"的值的情況下,估計(jì)值算 出部290a,也可以不是反復(fù)進(jìn)行(a)以及(e)的處理,而利用第一處理指令 群140的處理"encrypedDataAOxOOFF"來存儲(plainData | plainData-(compressedData 8)A0x00FF, compressedData=OxOO , 0x01, …, OxlF}。
      (4.4) 估計(jì)值信息保持部295a 估計(jì)值信息保持部295a,具備記憶估計(jì)值信息的區(qū)域。
      具體而言,估計(jì)值信息保持部295a,保持估計(jì)值算出部290a算出的 估計(jì)值的集合和其變量名,以作為所述的估計(jì)值信息。
      進(jìn)一步,具體而言,估計(jì)值信息保持部295a,在估計(jì)值算出部290a 進(jìn)行在(4.4)示出的具體例子的處理的情況下,記憶(plainData|plainData 二0x00FF, 0x01FF,…,0xlFFF}。在此,變量名是"plainData",其值 的集合是(plainData二0x00FF, 0x01FF,…,0xlFFF}。而且,當(dāng)然,不 是以列舉所述的值的形式來保持估計(jì)值,而是以示出集合的形式來可以保 持估計(jì)值。在此情況下,估計(jì)值信息保持部295a,記憶fclainData | plainDa ta=(compressedData 8)A0x00FF, compressedData=0x00, 0x01,…, OxlF}。
      (4.5) 依賴處理指令群生成部201a
      依賴處理指令群生成部201a,根據(jù)估計(jì)值信息保持部295a保持的估 計(jì)值、以及輸入處理指令群保持部210保持的第二處理指令群150來生成依賴處理指令群330a。
      依賴處理指令群330a是進(jìn)行與第二處理指令群150同等的處理的處理 指令群,也是包含參考第一處理指令群140的處理結(jié)果的處理、且一部分 的處理為利用所參考的值的處理的處理指令群。
      具體而言,依賴處理指令群330a進(jìn)行以下的A) F)的處理。
      A) 依賴處理指令群生成部201a,找到第二處理指令群150中包含的處 理指令中包含的常數(shù)。該常數(shù)中包含的處理指令是Orl,該常數(shù)的值是Val。
      B) 依賴處理指令群生成部201a,讀入估計(jì)值信息保持部295a保持的 估計(jì)值信息。
      C) 依賴處理指令群生成部201a,生成使估計(jì)值的集合的全部要素與一 個值Va2對應(yīng)起來的映像F。例如,在被參考變量是x、估計(jì)值的集合是 {x|x=x_0, x—1,…,x—n)時,依賴處理指令群生成部201a,將映像F作 為(xAx—0)*(xAx—l)* *(xAx—n)。在此,""示出乘法。由于成為x=x_t(t=0, 1,…,n中的任一個),示出映像F的公式的第t項(xiàng)(xAx—t)的值是0,即使 第t項(xiàng)以外的項(xiàng)的值是任何值也成為與值O(第t項(xiàng))的乘積,因此映像F是0。 也就是,在此例子中,成立Va2:(xAx—0)*(xAx—l)*"'*(xAx_n)=0的關(guān)系。
      D) 依賴處理指令群生成部201a,算出Va3=Va2—Val。在所述的例子 中,成立Val=Va2—Va3=(xAx_0)*(xAx—l)*'"*(xAx—n)—Va3的關(guān)系。
      E) 依賴處理指令群生成部201a,生成將處理指令Orl中包含的值Val 置換為"映像F的處理一Va3"的處理指令Or2。
      F) 依賴處理指令群生成部201a,生成依賴處理指令群330,該依賴處 理指令群330是將第二處理指令群150的處理指令Orl置換為處理指令 Or2的指令群。
      進(jìn)一步,具體而言,在估計(jì)值信息保持部295a進(jìn)行在(4.4)示出的具體 例子的處理的情況下,依賴處理指令群生成部201a進(jìn)行以下的A) F)的 處理。
      A)依賴處理指令群生成部201a,找到第二處理指令群150中包含的處 理指令中包含的常數(shù)。也就是,依賴處理指令群生成部201a,將包含該常 數(shù)的處理指令Orl作為"decompressedData=(decompressedData《l) | 0x0001;",將該常數(shù)的值Val作為"0x0001"。
      53B) 依賴處理指令群生成部201,從估計(jì)值信息保持部295讀入估計(jì)值 信息(plainData I plainData=0x00FF, 0x0lFF,…,OxlFFF}。
      C) 依賴處理指令群生成部201a,生成使估計(jì)值的集合的全部要素與一 個值Va2 "0"對應(yīng)起來的映像F "(plainDataA0x00FF)*(plainDataA0x0 lFF)*".*(plainDataAOxllFF)"。
      D) 依賴處理指令群生成部201a,算出Va3=Va2—Val。也就是,算出 "Va3=0—0x0001=— l=0xFFFF"。
      E) 依賴處理指令群生成部201a,生成將處理指令Orl中包含的值Val "0x0001"置換為"映像F的處理—Va3"的處理指令Or2,即生成將處理
      指令Orl中包含的值Val"0x0001"置換為"(plainDataA0x00FF)Wplain DataAOxOlFF)*"'*(plainDataA0xllFF) —0xFFFF"的處理指令Or2。
      也就是,生成處理指令Or2"decompressedData=(decompressedData <<1) I ((plainDataA0x00FF)*(plainDataA0x0lFF)*...*(plainDataA0xll 卿-OxFFFF);"。
      F) 依賴處理指令群生成部201,生成依賴處理指令群330a,該依賴處 理指令群330a是將第二處理指令群150的處理指令Orl置換為處理指令 Or2的指令群。
      也'就是,生成"for(counter=0;counter<compressedData;counter) {decompressedData=(decompressedData《l) I ((plainDataA0x00FF)*( plainDataA0x01FF)*".*(plainDataA0xllFF))-0xFFFF);}"。
      在此,進(jìn)一步,根據(jù)C語言的語言形式來追加函數(shù)聲明或變量聲明。 而且,在C)中示出了使估計(jì)值的集合的全部要素與一個值對應(yīng)起來的 映像F的一個例子,但也可以是其它的映像。并且,也可以在結(jié)構(gòu)上可以 預(yù)先登記多少個映像F,并從其中選擇。并且,也可以在結(jié)構(gòu)上用戶指定 映像F。在此情況下,也與實(shí)施例1相同,有用于使用相同映像來進(jìn)行多 次難讀化的情況。
      并且,作為與在所述的說明中的映像F不同的其它的映像的具體例子 有,例如圖9的依賴處理指令群330a中的"(compressedData 8)Aplain Data八0xOOFE"。如上所述,即使是這些映像也能夠獲得準(zhǔn)確的值 "0x0001"。(變形例7)
      竄改防止處理生成裝置110,也可以接受多個處理指令群的輸入,并從
      其中選擇第一處理指令群140和第二處理指令群150。例如,竄改防止處 理生成裝置110,也可以獲得處理指令群Al、處理指令群A2、,處理 指令群An,并從其中隨機(jī)地選擇第一處理指令群140和第二處理指令群 150的組來進(jìn)行難讀化。進(jìn)一步,進(jìn)行處理的對象也可以不僅限于一個組, 而可以反復(fù)進(jìn)行選擇和難讀化。
      并且,例如,竄改防止處理生成裝置110,也可以將第一處理指令群 140作為處理指令群Al,并從處理指令群A1以外的處理指令群中隨機(jī)地 選擇第二處理指令群150來進(jìn)行難讀化,以下,對于處理指令群A2、…、 An,也將各個處理指令群作為第一處理指令群140,并從作為第一處理指 令群140的處理指令群以外的處理指令群中選擇第二處理指令群150來進(jìn) 行難讀化。
      若利用如上所述的結(jié)構(gòu),則處理指令群Al An復(fù)雜地對應(yīng)起來,因 此能夠使竄改變得更困難。
      并且,作為本發(fā)明的實(shí)用例,可以考慮安裝一種執(zhí)行處理裝置,該執(zhí) 行處理裝置在一部分具有與竄改防止處理生成裝置110同等的結(jié)構(gòu),并 在執(zhí)行程序時進(jìn)行依據(jù)竄改防止處理生成裝置110的變換后執(zhí)行程序。在 此情況下,若使該執(zhí)行處理裝置具有與本變形例相同的結(jié)構(gòu),則難以確定 哪個處理指令群是第一處理指令群140以及第二處理指令群150,因此能 夠使解析變得更困難。 (變形例8)
      在此,說明了將第一處理指令群140中包含的指令作為保護(hù)對象、并 防止該其指令的竄改的情況。但是,對于防止竄改的對象,不僅限于指令, 而可以是數(shù)據(jù)。如實(shí)施例1,在保護(hù)指令群的情況下,追加了分支到該指令 群的處理,但是,在保護(hù)對象是數(shù)據(jù)的情況下,追加將該數(shù)據(jù)讀入到規(guī)定 的變量等的處理。例如,在將第一處理指令群140使用的數(shù)據(jù)作為保護(hù)對 象的情況下,可以考慮以下的結(jié)構(gòu)追加取代分支處理指令群320而讀入 保護(hù)對象數(shù)據(jù)的處理,依賴處理指令群330依賴于其變量,在變量所存儲 的值是估計(jì)值(在此,沒有竄改的數(shù)據(jù))的情況下準(zhǔn)確工作。若利用這些結(jié)構(gòu),取代依據(jù)分支處理指令群320來執(zhí)行第一處理指令 群140,而保護(hù)對象數(shù)據(jù)被讀入到變量。而且,若保護(hù)對象數(shù)據(jù)被竄改, 則讀入到變量的值產(chǎn)生變化,從而依賴處理指令群330進(jìn)行與第二處理指 令群150不同的工作。因此,與實(shí)施例1中的對第一處理指令群140的保 護(hù)相同,能夠保護(hù)保護(hù)對象數(shù)據(jù)。而且,例如,保護(hù)對象數(shù)據(jù)是移動電話 的電話號碼等設(shè)備固有的號碼。 (實(shí)施例2)
      作為本發(fā)明涉及的實(shí)施例2說明處理系統(tǒng)100b。
      圖11是實(shí)施例2中的處理系統(tǒng)100b的結(jié)構(gòu)圖。
      本實(shí)施例中的處理系統(tǒng)100b是接受第一處理指令群140b的輸入、并 生成以第一處理指令群140b的竄改校驗(yàn)為目的的輸出處理指令群160b的 系統(tǒng),該處理系統(tǒng)100b包括竄改防止處理生成裝置(指令生成裝置)110b、 以及執(zhí)行處理裝置130b。
      竄改防止處理生成裝置110b是生成確實(shí)能夠保護(hù)保護(hù)對象代碼的程 序的裝置。也就是,竄改防止處理生成裝置110b是獲得作為保護(hù)對象代碼 的第一處理指令群140b,來生成對該保護(hù)對象代碼進(jìn)行竄改校驗(yàn)的輸出處 理指令群160b。并且,竄改防止處理生成裝置110b,將所生成的輸出處理 指令群160b、和第一處理指令群140b寫入到記錄介質(zhì)120b。
      執(zhí)行處理裝置130b,讀出并執(zhí)行記錄介質(zhì)120b所記錄的第一處理指 令群140b以及輸出處理指令群160b。
      而且,竄改防止處理生成裝置110b也可以,將第一處理指令群140b 以及輸出處理指令群160b,不寫入到記錄介質(zhì)120b,而通過通信介質(zhì)發(fā) 送給執(zhí)行處理裝置130b。
      在結(jié)構(gòu)上,輸出處理指令群160b在處理過程中調(diào)用第一處理指令群 140b。也就是,在由執(zhí)行處理裝置130b執(zhí)行輸出處理指令群160b的情況 下,首先,輸出處理指令群160b中包含的指令群被執(zhí)行,在該過程中第一 處理指令群140b被調(diào)用并執(zhí)行,然后輸出處理指令群160b的后續(xù)的處理 指令群也被執(zhí)行。
      第一處理指令群140b是執(zhí)行處理裝置130b所執(zhí)行的處理指令群,有 在輸出處理指令群160b的處理過程中被執(zhí)行的情況,也有與此分開來執(zhí)行的情況。
      具體而言,例如,第一處理指令群140b是以下的處理將內(nèi)容被加密 的再生可能次數(shù)輸入,并將其解密,從而輸出明文的再生可能次數(shù)。輸出 處理指令群160b是一種處理指令群,校驗(yàn)第一處理指令群140b是否被竄
      改,在未被竄改的情況下,退還o,在被竄改的情況下,停止執(zhí)行處理裝置 130b正在執(zhí)行中的處理。
      以下,分別進(jìn)行詳細(xì)說明。
      (l)輸出處理指令群160b的結(jié)構(gòu) 圖12是輸出處理指令群160b的結(jié)構(gòu)圖。
      輸出處理指令群160b包括被參考變量值代入處理指令群310b,對 各種參數(shù)設(shè)定值,該各種參數(shù)是在執(zhí)行第一處理指令群140b時需要的參 數(shù);分支處理指令群320b,調(diào)用第一處理指令群140b:以及依賴處理指 令群330b,調(diào)用第一處理指令群140b后被執(zhí)行。在執(zhí)行處理裝置130b 執(zhí)行輸出處理指令群160b的情況下,按照被參考變量值代入處理指令群 310b、分支處理指令群320b、第一處理指令群140b、依賴處理指令群330b 的順序,各個處理指令群被執(zhí)行。
      以下,分別進(jìn)行說明。
      (1.1) 被參考變量值代入處理指令群310b
      與實(shí)施例1中的被參考變量值代入處理指令群310相同。
      (1.2) 分支處理指令群320b
      與實(shí)施例1中的分支處理指令群320b相同。
      (1.3) 依賴處理指令群330b
      依賴處理指令群330b是調(diào)用第一處理指令群140b后被執(zhí)行的處理指 令群,根據(jù)第一處理指令群140b的處理結(jié)果進(jìn)行竄改校驗(yàn)處理。
      具體而言,例如,在第一處理指令群140b是函數(shù)的情況下,第一處理 指令群140b的處理結(jié)果是函數(shù)的返回值。并且,例如,若第一處理指令群 140b是對外部變量決定值的處理,則第一處理指令群140b的處理結(jié)果是 被代入到外部變量的值。并且,例如,若第一處理指令群140b是將值代入 到棧的處理,則第一處理指令群140b的處理結(jié)果是存儲到棧的值。并且, 例如,若第一處理指令群140b是在以地址變量來指定的位置存儲值的處
      57理,則第一處理指令群140b的處理結(jié)果是所存儲的值。與實(shí)施例1相同, 將這些第一處理指令群140b的處理結(jié)果被存儲的存儲目標(biāo)稱為被代入變
      一般不能預(yù)先知道第一處理指令群140b的處理結(jié)果,但是,只在執(zhí)行 第一處理指令群140b時需要的各種參數(shù)的值是被參考變量值代入處理指 令群310b所設(shè)定的值的情況下,能夠預(yù)先知道處理結(jié)果的值。具體而言, 例如,若將由被參考變量值代入處理指令群310b設(shè)定的值實(shí)際上設(shè)定到被 參考變量后,執(zhí)行第一處理指令群140b,則能夠知道處理結(jié)果的值。與實(shí) 施例1相同,在以后的說明中,將該值稱為估計(jì)值。 (1.4)輸出處理指令群160b的一個例子
      圖13是示出以C語言描述的輸出處理指令群160b的具體例子的圖。
      輸出處理指令群160b是在將與圖5A的第一處理指令群140同等的處 理指令群作為第一處理指令群140b時的輸出處理指令群,也是對第一處理 指令群140b進(jìn)行竄改校驗(yàn)的處理指令群。
      被參考變量值代入處理指令群310b "encryptedData-0xF022;"是, 示出將值代入到調(diào)用第一處理指令群140時的引數(shù)的處理的指令群。也就 是,被參考變量值代入處理指令群310b,將值"0xF022"代入到變量 "encryptedData"。
      分支處理指令群320b "plainData=decrypt(encryptedData);"是示 出以引數(shù)為變量"encryptedData"來調(diào)用第一處理指令群140b的處理的 指令群,將處理結(jié)果存儲到變量"plainData"。在執(zhí)行處理裝置130b中, 在分支處理指令群320b正常被執(zhí)行了的情況下的返回值的估計(jì)值,成為以 變量"encryptedData"為值"0xF022"來進(jìn)行第一處理指令群140b的 處理時的結(jié)果,即成為"0xF022A0x00FF=0xF0DD"。
      依賴處理指令群330b是以"if(plainData !=OxF0DD){exit(l);}return
      o;"來表示的處理指令群,判斷第一處理指令群140b的處理結(jié)果是否與估 計(jì)值相同,在相同的情況下,退還o,在不同的情況下,停止執(zhí)行處理裝置
      130b正在執(zhí)行中的處理。
      在所述處理中,在第一處理指令群140b被竄改的情況下,第一處理指 令群140b的處理結(jié)果成為與估計(jì)值不同的值。(1.5)輸出處理指令群160b的效果
      實(shí)施例2的輸出處理指令群160b包括被參考變量值代入處理指令群 310b,對各種參數(shù)設(shè)定值,該各種參數(shù)是在執(zhí)行第一處理指令群140b時 需要的參數(shù);分支處理指令群320b,調(diào)用第一處理指令群140b:以及依 賴處理指令群330b,調(diào)用第一處理指令群140b后被執(zhí)行。
      若利用這些結(jié)構(gòu),在第一處理指令群140b的處理指令被竄改的情況 下,通過判斷第一處理指令群140b的處理結(jié)果是否與估計(jì)值相同,從而能 夠檢測第一處理指令群140b的竄改。
      以往的依據(jù)散列校驗(yàn)的竄改校驗(yàn),需要將程序作為數(shù)據(jù)來讀入。然而, 對于普通的程序,有作為執(zhí)行對象來被讀入的情況,作為數(shù)據(jù)來被讀入的 情況卻很少,并且,在讀入上使用指令也是特殊的。據(jù)此,非法解析人監(jiān) 視指令,在將程序作為數(shù)據(jù)來讀入的指令被執(zhí)行的情況下,能夠判斷為進(jìn) 行該讀入的處理是竄改校驗(yàn)處理指令群的一部分、且是被讀入的處理是成 為竄改防止對象的重要的處理的可能性高。但是,在本實(shí)施例的方法中, 即使不將程序作為數(shù)據(jù)來存取,也能夠檢測程序的竄改。并且,以禁止將 程序作為數(shù)據(jù)來存取的語言,也能夠進(jìn)行竄改校驗(yàn)。 (2)竄改防止處理生成裝置110b的結(jié)構(gòu)
      圖14是竄改防止處理生成裝置110b的結(jié)構(gòu)圖。在此,竄改防止處理 生成裝置110b是生成進(jìn)行第一處理指令群140b的竄改校驗(yàn)的輸出處理指 令群160b的裝置。
      竄改防止處理生成裝置110b包括輸入處理指令群保持部210b、被參 考變量解析部220b、被參考變量信息保持部230b、被參考變量值代入處 理指令群生成部240b、被參考變量值代入處理指令群保持部250b、被參 考變量值保持部260b、被代入變量解析部270b、被代入變量信息保持部 280b、估計(jì)值信息保持部295b、估計(jì)值算出部290b、依賴處理指令群生 成部201b、依賴處理指令群保持部202b、分支處理指令群生成部203b、 分支處理指令群保持部204b、輸出處理指令群生成部205b、以及輸出處 理指令群保持部206b。
      輸入處理指令群保持部210b,獲得并保持第一處理指令群140b。
      被參考變量解析部220b,解析在執(zhí)行第一處理指令群140b時預(yù)先在
      59哪種引數(shù)等的變量(被參考變量)需要設(shè)定值。
      被參考變量信息保持部230b,保持通過被參考變量解析部220b的解 析所獲得的被參考變量的變量名等的信息。
      被參考變量值代入處理指令群生成部240b,生成將值代入到被參考變 量的被參考變量值代入處理指令群310b。
      被參考變量值代入處理指令群保持部250b ,保持被參考變量值代入處 理指令群生成部240b生成的被參考變量值代入處理指令群310b。
      被參考變量值保持部260b,保持被參考變量值代入處理指令群310b 代入到被參考變量的值。
      被代入變量解析部270b,解析將第一處理指令群140b的處理結(jié)果被 代入到哪種變量(被參考變量)。
      被代入變量信息保持部280b,保持通過被代入變量解析部270b的解 析所獲得的被代入變量的變量名等的信息。
      估計(jì)值算出部290b,將被參考變量的值作為被參考變量值保持部260b 所保持的值,并算出在執(zhí)行第一處理指令群140b時所獲得的被代入變量的 估計(jì)值。
      估計(jì)值信息保持部295b,保持估計(jì)值算出部290b算出的估計(jì)值。 依賴處理指令群生成部201b,根據(jù)估計(jì)值來生成依賴處理指令群 330b 。
      依賴處理指令群保持部202b,保持依賴處理指令群生成部201b生成 的依賴處理指令群330b。
      分支處理指令群生成部203b,生成分支處理指令群320b,該分支處 理指令群320b調(diào)用輸入處理指令群保持部210b保持的第一處理指令群 140b。
      分支處理指令群保持部204b,保持分支處理指令群生成部203b生成 的分支處理指令群320b。
      輸出處理指令群生成部205b生成輸出處理指令群160b,該輸出處理 指令群160b包括被參考變量值代入處理指令群保持部250b保持的被參考 變量值代入處理指令群310b、分支處理指令群保持部204b保持的分支處 理指令群320b、以及依賴處理指令群保持部202b保持的依賴處理指令群330b。
      輸出處理指令群保持部206b,保持輸出處理指令群生成部205b生成 的輸出處理指令群160b。
      以下,說明與實(shí)施例l不同的輸入處理指令群保持部210b、以及依賴 處理指令群生成部201b。對于其它的部,由于進(jìn)行與實(shí)施例1所述的對應(yīng) 的部同等的處理,因此省略說明。
      (2.1) 輸入處理指令群保持部210b
      輸入處理指令群保持部210b,從外部接受第一處理指令群140b的輸 入。也就是,輸入處理指令群保持部210b,獲得第一處理指令群140b。 并且,輸入處理指令群保持部210b,具備記憶一個以上的處理指令群的區(qū) 域。輸入處理指令群保持部210b,保持竄改防止處理生成裝置110b所輸 入的第一處理指令群140b。
      (2.2) 依賴處理指令群生成部201b
      依賴處理指令群生成部201b,根據(jù)估計(jì)值信息保持部295b保持的估 計(jì)值來生成依賴處理指令群330b。
      具體而言,依賴處理指令群生成部201b,例如進(jìn)行以下的A) D)的處理。
      A) 依賴處理指令群生成部201b,讀入估計(jì)值信息保持部295b保持的 估計(jì)值信息。
      B) 依賴處理指令群生成部201b,將應(yīng)該保持其估計(jì)值的變量(被代入變 量)作為Vrl,將其估計(jì)值作為Val。
      C) 依賴處理指令群生成部201b,生成一種處理指令群,該處理指令群, 比較變量Vrl和估計(jì)值Val,在相同的情況下,退還0,在不同的情況下, 停止執(zhí)行處理裝置130b正在執(zhí)行中的處理。而且,在此,根據(jù)一般的編程 方法,在驗(yàn)證結(jié)果準(zhǔn)確的情況下(在此,在確認(rèn)沒有竄改的情況下)退還O, 但不僅限于此。可以退還0以外的值,也可以不退還任何值。也就是,在 確認(rèn)沒有竄改的情況下,只要繼續(xù)進(jìn)行執(zhí)行中的處理,就退還的值可以是 任何值。
      D) 依賴處理指令群生成部201b,將生成的依賴處理指令群330b存儲 到依賴處理指令群保持部202b。進(jìn)一歩,具體而言,在估計(jì)值信息保持部295b進(jìn)行與實(shí)施例1的(2.10) 相同的處理的情況下,依賴處理指令群生成部201b,進(jìn)行以下的A) D) 的處理。
      A) 依賴處理指令群生成部201b,讀入估計(jì)值信息保持部295保持的估 計(jì)值信息"intplainData=OxFODD"。
      B) 依賴處理指令群生成部201b,將應(yīng)該保持其估計(jì)值的變量 "plainData"作為Vrl,將其估計(jì)值"OxFODD"作為Val。
      C) 依賴處理指令群生成部201b,生成處理指令群"if(plainData! =OxFODD){exit(l);}returnO;",該處理指令群,比較變量Vrl和估計(jì)值Val, 在相同的情況下,退還O,在不同的情況下,停止執(zhí)行處理裝置130b正在 執(zhí)行中的處理。
      D) 依賴處理指令群生成部201b,將生成的依賴處理指令群330b存儲 到依賴處理指令群保持部202b。
      (2.3)竄改防止處理生成裝置110b的效果
      竄改防止處理生成裝置110b,能夠生成竄改校驗(yàn)處理指令群(輸出處理 指令群160b),該竄改校驗(yàn)處理指令群,能夠不將程序作為數(shù)據(jù)來讀入而校 驗(yàn)程序的竄改。
      圖15是用于說明竄改防止處理生成裝置110b的效果的說明圖。
      竄改防止處理生成裝置110,例如獲得包含第一處理指令群140b的輸 入程序101b,并將該輸入程序101b變換為竄改防止程序102b后輸出。 此時,如上所述,竄改防止處理生成裝置110,生成輸出處理指令群160b, 并將其追加到輸入程序101b。
      也就是,竄改防止處理生成裝置110,生成作為保護(hù)對象代碼的第一處 理指令群140b的調(diào)用處理(被參考變量值代入處理指令群310b以及分支處 理指令群320b)、和判定/結(jié)束處理(依賴處理指令群330b),以作為竄改防 止處理,來追加到輸入程序101b,該判定溜束處理中在通過調(diào)用處理進(jìn)行 的第一處理指令群140b的處理結(jié)果與估計(jì)值不同時停止執(zhí)行處理裝置 130b所執(zhí)行的處理。
      在保護(hù)對象代碼(第一處理指令群140)的調(diào)用處理中,在被參考變量值 代入處理指令群310b,在值"0x0022"被代入到保護(hù)對象代碼的被參考變量"encryptedData"的狀態(tài)下,保護(hù)對象代碼被調(diào)用。
      此結(jié)果是,在竄改防止程序102b中,由于不會如以往那樣保護(hù)對象代 碼被讀入為數(shù)據(jù),因此能夠使非法解析人難以找到竄改防止處理。
      進(jìn)一步,在判定/結(jié)束處理中,依賴處理指令群330b的"if(plainData! =0xF0DD){exit(l);}return0;",依賴于作為通過所述的調(diào)用處理調(diào)用保護(hù) 對象代碼后被執(zhí)行的結(jié)果(第一處理指令群U0b的處理結(jié)果)的 "plainData"的值。也就是,若保護(hù)對象代碼未被竄改,則"plainData" 的值成為估計(jì)值"0xF0DD",因此,若竄改防止程序102b的輸出處理指 令群160被執(zhí)行,則執(zhí)行處理裝置130b準(zhǔn)確地執(zhí)行與竄改防止程序102b 中的輸入程序101b同等的處理。
      另一方面,若保護(hù)對象代碼被竄改,則"plainData"的值與估計(jì)值 "0xF0DD"不同,因此,正在執(zhí)行處理裝置130b準(zhǔn)確地執(zhí)行中的、與竄 改防止程序102b中的輸入程序101b同等的處理被中止。
      如此,本實(shí)施例中的竄改防止處理生成裝置110b,對輸入程序101b 生成并追加保護(hù)對象代碼的調(diào)用處理以及判定/結(jié)束處理,從而能夠確實(shí)防 止對保護(hù)對象代碼的竄改。并且,本實(shí)施例中的竄改防止處理生成裝置 110b,對以Java(注冊商標(biāo))等語言來描述的程序,也確實(shí)能夠防止對該程 序的保護(hù)對象代碼的竄改,所述Java(注冊商標(biāo))等語言是在正在執(zhí)行中不 能將處于存儲器上的代碼讀入為數(shù)據(jù)的語言。 (實(shí)施例3)
      說明本發(fā)明涉及的實(shí)施例3的處理系統(tǒng)1300。實(shí)施例3涉及的處理系 統(tǒng)1300,利用一個輸入程序中包含的第一處理指令群(對應(yīng)于后述的A指 令群)和第二處理指令群(對應(yīng)于后述的B指令群和SUC_B指令群),進(jìn)行 該輸入程序的難讀化。并且,在實(shí)施例1以及2中,在第二處理指令群也 利用第一處理指令群的處理結(jié)果,但是,在實(shí)施例3中,在SUC—B指令 群(第二處理指令群)不利用A指令群(第一處理指令群)的處理結(jié)果。也就是, 在實(shí)施例3中,在第二處理指令群的處理過程中分支到本來不需要的第一 處理指令群,然后進(jìn)行第二處理指令群的后續(xù)的處理,從而試圖使控制構(gòu) 造變得復(fù)雜。
      在實(shí)施例3中,通過試圖這些輸入程序的難讀化(控制構(gòu)造的復(fù)雜化),從而能夠確實(shí)保護(hù)作為保護(hù)對象代碼的A指令群(第一處理指令群)不被竄改。
      以往,作為使程序的處理的流程變得困難、并防止非法解析的技術(shù),
      周知的方法是像非專利文獻(xiàn)l(Chenxi Wang, "A Security Architecture for Survivability Mechanisms"、 Ph.D. Dissertation (2000))所述的技術(shù) 那樣的方法,即,將單純的無條件分支指令置換為難以發(fā)現(xiàn)分支目標(biāo)的條 件分支指令的方法,或?qū)⒊绦蚍指顬槎鄠€指令群來調(diào)換指令群的配置順序 的方法。由于非法解析的結(jié)果成為此后的非法竄改時的線索,因此在解析 時能夠有效地防止非法行為。但是,即使以所述的方法來進(jìn)行難讀化,也 通過實(shí)際操作程序,從而能夠知道指令群的執(zhí)行順序或前后關(guān)系(例如, PRE一A指令群后A指令群被執(zhí)行的關(guān)系)。于是,在實(shí)施例3中,將控制 構(gòu)造難讀化,以使在實(shí)際操作程序時執(zhí)行順序等也不被知道。
      以下,說明實(shí)施例3的處理系統(tǒng)1300。
      圖16是實(shí)施例3中的處理系統(tǒng)1300的結(jié)構(gòu)圖。
      本實(shí)施例中的處理系統(tǒng)1300包括竄改防止處理生成裝置(指令生成裝 置)1320、以及執(zhí)行處理裝置1340。
      竄改防止處理生成裝置1320是生成確實(shí)能夠保護(hù)保護(hù)對象代碼的程 序的裝置,通過獲得包含保護(hù)對象代碼的輸入程序1310并使該輸入程序 1310難讀化,從而生成竄改防止程序1330。
      并且,竄改防止處理生成裝置1320,將所生成的竄改防止程序1330 寫入到記錄介質(zhì)1350。
      執(zhí)行處理裝置1340,讀出并執(zhí)行記錄介質(zhì)1350所記錄的竄改防止程 序1330。
      而且,竄改防止處理生成裝置1320也可以,不將竄改防止程序1330 寫入到記錄介質(zhì)1350,而通過通信介質(zhì)發(fā)送給執(zhí)行處理裝置1340。
      在此,如在后面所述,輸入程序1310包含由一個以上的指令構(gòu)成的 PRE一A指令群、卩1^_入指令群后被執(zhí)行的厶指令群、以及B指令群。 (l)輸入程序1310的結(jié)構(gòu)
      圖17是輸入程序1310的結(jié)構(gòu)圖。
      輸入程序1310包含A指令群1420;作為A指令群1420的分支源
      64的指令群的PRE—A指令群1410;作為A指令群1420的分支目標(biāo)的指令 群的SUCLA指令群1430; B指令群1440;以及作為B指令群1440的分 支目標(biāo)的指令群的SUC一B指令群1450。
      在此,各個指令群是由0以上的指令構(gòu)成的指令的集合。也就是,一 部分的指令群可以不存在。例如,在A指令群1420位于程序的開頭的情 況下,PRE—A指令群1410可以不存在。并且,在A指令群1420或B指 令群1440位于程序的最后的情況下,SUC_A指令群1430或SUC—B指 令群1450可以不存在。
      并且,在此,Y指令群是X指令群的分支目標(biāo),其意味著X指令群后 Y指令群被執(zhí)行。具體而言,例如,有就在X指令群后配置Y指令群的情 況,或有X指令群中包含向Y指令群的分支指令的情況等。而且,在本實(shí) 施例中,即使就在X指令群后不存在明顯的分支指令,在程序的表示法上 將X指令群后Y指令群被執(zhí)行的情況也稱為分支。例如,在C語言中,在 沒有分支指令等的情況下,程序中的指令從上面依次被執(zhí)行。在此情況下, 若在X指令群下面描述有Y指令群,則X指令群后Y指令群被執(zhí)行,因此 Y指令群是X指令群的分支目標(biāo)。并且,X指令群是Y指令群的分支源, 其意味著Y指令群是X指令群的分支目標(biāo)。
      而且,具體而言,分支指令是指條件分支指令;無條件分支指令; 子程序調(diào)用;產(chǎn)生例外的指令;產(chǎn)生插入的指令等。也就是,將執(zhí)行從某 指令群轉(zhuǎn)移到其它的指令群的指令,均相當(dāng)與本說明書所述的分支指令。 例如,若是匯編語言的指令,則是像"CALL, RET"那樣的函數(shù)調(diào)用、或 "JA, JMP, LOOP"等的轉(zhuǎn)移指令、"INT"等的插入指令。
      圖18是示出C語言中的輸入程序1310的一個具體例子的圖。
      輸入程序1310包括PRE—A指令群1410、 A指令群1420、 SUC_A 指令群1430、 B指令群1440、以及SUC_B指令群1450。 (2)竄改防止程序1330的結(jié)構(gòu)
      竄改防止程序1330是,輸入程序1310由竄改防止處理生成裝置1320 難讀化的程序。
      圖19是竄改防止程序1330的結(jié)構(gòu)圖。
      竄改防止程序1330包括PRE_A指令群1410、 STR_A變量群值代入指令群1620、 A指令群1420、 CBR—AB條件分支指令群1610、 SUC—A 指令群1430、 B指令群1440、 STR—B變量群值代入指令群1630、保留指 令群1640、 BR—B分支指令群1660、恢復(fù)指令群1650、以及SUC_B指 令群1450。
      在輸入程序1310中,只在PRE—A指令群1410被執(zhí)行后,A指令群 1420被執(zhí)行,但是,在竄改防止程序1330中進(jìn)行變換,從而在B指令群 1440被執(zhí)行后,A指令群1420也被執(zhí)行。進(jìn)一步,具體而言,在竄改防 止程序1330中,有PRE—A指令群1410、 A指令群1420、 SUC—A指令 群1430的順序執(zhí)行各個指令群的處理的情況,也有按照B指令群1440、 A指令群1420、SUC—B指令群1450的順序執(zhí)行各個指令群的處理的情況。 也就是,有在B指令群1440和SUC_B指令群1450之間插入A指令群 1420的情況。
      圖20是示出以C語言表示的竄改防止程序1330的一個具體例子的圖。
      竄改防止程序1330,除了輸入程序1310中包含的各個要素以外,還 包括以下的要素。這些要素由竄改防止處理生成裝置1320增加到輸入程序 1310,于是,在后面詳細(xì)說明其增加處理。
      BR—B分支指令群1660是一種分支指令,用于在B指令群1440后, 使A指令群1420執(zhí)行。
      CBR_AB條件分支指令群1610是一種指令群,用于在A指令群1420 的執(zhí)行后,判定適當(dāng)?shù)姆种繕?biāo)、并將處理分支到該分支目標(biāo)。對于在A 指令群1420后執(zhí)行的指令群,在輸入程序1310中,總是SUC—A指令群 1430,但是,在竄改防止程序1330中,有SUC—A指令群1430的情況、 和SUC_B指令群1450的情況。CBR—AB條件分支指令群1610,在A指 令群1420的執(zhí)行后,判定應(yīng)該分支到SUC—A指令群1430和SUC一B指 令群1450中的哪一方,并使處理分支到適當(dāng)?shù)姆种繕?biāo)。
      STI^A變量值代入指令群1620、以及STR—B變量值代入指令群1630 是,設(shè)定用于CBR—AB條件分支指令群1610的判定的信息(在本實(shí)施例中 后述的變量"var_abO"的值)的指令群。在竄改防止程序1330中,若在 PRE—A指令群1410后A指令群1420被執(zhí)行,則下次要執(zhí)行的指令群是 SUC—A指令群1430,若在B指令群1440后A指令群1420被執(zhí)行,則下次要執(zhí)行的指令群是SUC—B指令群1450。 STR—A變量值代入指令群 1620以及STR_B變量值代入指令群1630是留下以下判定時的線索的指 令群,通過該判定認(rèn)出所述兩者中的任一方,即,認(rèn)出是在執(zhí)行PRE—A指 令群1410后、還是在執(zhí)行B指令群1440后。
      保留指令群1640是一種指令群,該指令群,為了不使已經(jīng)執(zhí)行的處理 結(jié)果受此后執(zhí)行的處理的影響,而將其已經(jīng)執(zhí)行的處理結(jié)果保留。并且, 恢復(fù)指令群1650是使所保留的處理結(jié)果恢復(fù)的指令群。
      在竄改防止程序1330中,在B指令群1440的執(zhí)行和SUC_B指令群 1450的執(zhí)行之間插入A指令群1420的執(zhí)行。因此,需要將在B指令群 1440結(jié)束時的處理的中途結(jié)果保留,以不受A指令群的處理的影響。進(jìn)行 其保留處理的指令群,就是保留指令群1640。
      并且,恢復(fù)指令群1650,在返回到SUC一B指令群1450時,將保留 指令群1640所保留的中途結(jié)果的細(xì)節(jié)恢復(fù)。
      以下,進(jìn)一步,利用圖19、圖20詳細(xì)說明各個指令群。 (2.1)保留指令群1640
      保留指令群1640是進(jìn)行以下的保留處理的指令群,即,為了不使在B 指令群1440和SUC—B指令群1450之間插入的A指令群1420的處理影 響到SUC—B指令群1450以及此后執(zhí)行的指令群的處理,而將中途結(jié)果保 留。具體而言,保留指令群1640是一種指令群,該指令群,將通過A指 令群1420被代入值的變量中、SUC—B指令群以后執(zhí)行的指令群中被參考 的變量所存儲的值存儲到其它的變量。
      在輸入程序1310中,由于在B指令群1440和SUC_B指令群1450 以后之間不存在其它的指令,因此到B指令群1440被執(zhí)行完畢時為止的 中途結(jié)果,SUC一B指令群以后也被繼承。在此,若輸入程序1310由竄改 防止處理生成裝置1320難讀化,則在B指令群1440和SUC_B指令群 1450以后的指令之間插入執(zhí)行A指令群1420。此時,在A指令群1420 包括使與SUC_B指令群1450以后的指令的變量相同的變量變化的指令的 情況下,所述的中途結(jié)果被A指令群1420重寫。若發(fā)生這些情況,則會 竄改防止程序1330的執(zhí)行結(jié)果與輸入程序1310不同。為了避免發(fā)生這些 情況,而需要在A指令群1420被執(zhí)行的前后使中途結(jié)果保留、恢復(fù)。
      67例如,在圖20的A指令群1420中,變量"var—orgO"禾卩變量"var—orgl" 是被代入值的變量。其中變量"var_org2",在SUC—B指令群1450中的 指令"var_orgl=var_orgl+var—org2;"中值被參考。因此,需要將作為處 理的中途結(jié)果的"var_org2"的值保留,于是,將該"Var_0rg2"所存儲的 值保留到其他的變量"var_save0"的處理"var—save0=var_org2;",就是 保留指令群1640。
      而且,在本實(shí)施例中,以變量的值為例子進(jìn)行說明,但優(yōu)選的是,將 變量以外的、有可能通過A指令群1420改變的信息保留。作為這些信息 的例子,可以考慮棧、寄存器、高速緩沖存儲器等所記錄的細(xì)節(jié)等。
      (2.2) 恢復(fù)指令群1650
      恢復(fù)指令群1650是一種指令群,該指令群,在通過難讀化在B指令 群1440和SUC_B指令群1450之間要插入的A指令群1420的處理結(jié)束 后,將通過保留指令群1640預(yù)先保留了的值恢復(fù)到原來的變量。
      具體而言,圖20的恢復(fù)指令群1650被表示為,將保留到變量 "var—save0"的值存儲到變量"var—org2"的處理"var—org2=var_save0;"。
      而且,在A指令群不使SUC一B指令群以后的指令參考的變量變化的 情況下,由于不需要將這些變量保留,因此不需要保留指令群1640和恢復(fù) 指令群1650。
      (2.3) CBR_AB條件分支指令群1610
      CBR_AB條件分支指令群1610是一種條件分支指令,包括SUC一A 指令群1430和SUC—B指令群1450以作為條件分支目標(biāo)。而且,在竄改 防止程序1330包括恢復(fù)指令群1650的情況下,需要使預(yù)先保留的細(xì)節(jié)恢 復(fù)后進(jìn)行SUC_B指令群1450以后的處理,因此,取代SUC一B指令群1450 而將恢復(fù)指令群1650作為條件分支目標(biāo)。在圖20中,向SUC—B指令群 1450和恢復(fù)指令群1650分別附上"SUC一B"、"SUCLB—",但是,CBR—AB 條件分支指令群1610,在存在恢復(fù)指令群1650的情況下,將附上標(biāo)簽 "SUC_B_"的恢復(fù)指令群1650作為分支目標(biāo),在不存在的情況,將附上 標(biāo)簽"SUC_B—"的SUC—B指令群1450作為分支目標(biāo)。作為不存在恢復(fù) 指令群1650的情況,有不存在要恢復(fù)的中途結(jié)果的情況等。
      在圖20中舉例示出的竄改防止程序1330包括恢復(fù)指令群1650。因此,CBR—AB條件分支指令群1610被表示為,將SUC—A指令群1430和恢復(fù) 指令群1650作為條件分支目標(biāo)、而依據(jù)"變量var一abO"的值來決定分支 目標(biāo)的條件分支指令"if(var_ab0%2==0)goto SUC_B」"。在此,變量 "var_abO"相當(dāng)于后述的G_VAL—AB變量群,該變量"var一abO"是成 為示出A指令群1420在PRE—A指令群1410后被執(zhí)行、還是在B指令群 1440后被執(zhí)行的線索的變量。在竄改防止程序1330中依據(jù)該CBR—AB條 件分支指令群1610來進(jìn)行控制,以產(chǎn)生在A指令群1420后SUC_A指令 群1430被執(zhí)行的情況、和在A指令群1420后恢復(fù)指令群1650(或SUC_B 指令群1450)被執(zhí)行的情況。
      再者,本實(shí)施例中,由于以C語言來描述竄改防止程序1330,因此在 CBR一AB條件分支指令群1610中,沒有描述明確分支到SUCLA指令群 1430的指令。也就是,在C語言的表示法上,在CBR-AB條件分支指令 群1610的if語句中的條件 &1"_31)0%2==0"是假的情況下,就在CBR—AB 條件分支指令群1610后SUC—A指令群被執(zhí)行,因此不需要向SUC_A指 令群的明確的分支指令。也就是,圖20所描述的細(xì)節(jié)也示出,實(shí)際上 CBR—AB條件分支指令群1610示出將SUC_A指令群1430和SUC—B指 令群1450之間的哪一方執(zhí)行的分支。而且,當(dāng)然可以,圖20的就在 CBR—AB條件分支指令群1610之后描述有"else goto SUC—A;"等的明 確的分支指令。如上所述,通過描述如上所述的明確的分支指令,從而在 CBR一AB條件分支指令群1610和SUC—A指令群1430位于程序上離開的
      位置時也能夠進(jìn)行適當(dāng)?shù)姆种幚怼?br> (2.4)STR一A變量群值代入指令群1620 STR一A變量群值代入指令群1620是一種指令群,該指令群,將值代 入值到變量,從而在CBR一AB條件分支指令群1610判定為條件分支目標(biāo) 是SUC一A指令群1430。也就是,其指令群被執(zhí)行的時候是指,PRE_A 指令群1410被執(zhí)行后A指令量1420被執(zhí)行,進(jìn)一步,因?yàn)槭谴撕驝BR—AB 條件分支指令群1610被執(zhí)行的時候,因此STR_A變量群值代入指令群 1620將示出其事宜的信息作為變量的值來留下。而且,以下,將其變量稱 為G—VAL—AB變量群。而且,G一VAI^AB變量群,也可以不是一個變量, 而是多個變量的集合。并且,也可以是在程序中明確出現(xiàn)的變量以外的變量,例如,也可以是被裝入到棧的最上方的值等。也就是,只要是進(jìn)行可
      以留下判定的線索的處理的指令群,就可以是任何指令群。在決定CBR一AB 條件分支指令群1610要分支到哪個指令時利用該G_VAL—AB變量群。在 圖20示出的具體例中,G—VAL—AB變量群是變?nèi)?var—ab0"。
      在圖20示出的具體例中,STR—A變量群值代入指令群1620是指令群 "var—ab0=l;",該指令群,將值代入到"var—ab0%2==0",以使CBR—AB 條件分支指令群1610的if語句中的條件"var—ab0%2==0"成為假 "var—ab0=l;"。在此,如CBR—AB條件分支指令群1610的說明中所述, 若條件"var_ab0%2==0"為假,則CBR_AB條件分支指令群1610分支 到SUC^A指令群1430。也就是,在竄改防止程序1330中利用STR—A變 量群值代入指令群1620,從而在PRE—A指令群1410后A指令群1420 被執(zhí)行,此后SUC一A指令群1430(不是SUC—B指令群1450)被執(zhí)行。 (2.5)STR_B變量群值代入指令群1630
      STR一B變量群值代入指令群1630是一種指令群,用于在所述的 CBR—AB條件分支指令群1610中,將值代入到G—VAL一AB指令群中包含 的變量,以判定為條件分支目標(biāo)是SUCUB指令群1450。也就是,其指令 群被執(zhí)行時是指,B指令群1440被執(zhí)行后A指令量1420被執(zhí)行,進(jìn)一步, 此后執(zhí)行CBR—AB條件分支指令群1610被執(zhí)行時,因此,STR—B變量群 值代入指令群1630,將示出其事宜的信息作為變量的值來留下。在此,與 STR—A變量群值代入指令群1620相同,STR—B變量群值代入指令群 1630,在結(jié)構(gòu)上可以利用多個變量、或利用變量以外的內(nèi)容。
      在圖20示出的具體例中,STR—B變量群值代入指令群1630是指令群 "var_ab0=8;",該指令群,將值代入到"var—abO",以使CBR—AB條件 分支指令群1610的if語句中的條件"var_ab0%2==0"成為真。在此, 若條件"var_ab0%2==0"為真,則CBR_AB條件分支指令群1610的if 語句中的判定結(jié)果為真、且"gotoSUCLB一;"被執(zhí)行,因此向恢復(fù)指令群 1650的分支處理被執(zhí)行。也就是,在竄改防止程序1330中利用STR_B 變量群值代入指令群1630,以按照B指令群1440、保留指令群1640、 A 指令群1420的順序進(jìn)行各個各指令群的處理后,進(jìn)行恢復(fù)指令群1650(不 是SUC_A指令群1430)。而且,在沒有恢復(fù)指令群1650的情況下,STR_B
      70變量群值代入指令群1630是用于設(shè)定變量的指令群,以使B指令群1440 被執(zhí)行后A指令群1420被執(zhí)行,進(jìn)一步,此后SUC—B指令群1450被執(zhí) 行。
      (2.6) BR_B分支指令群1660
      圖20中的BR—B分支指令群1660是從B指令群1440分支到A指令 群1420的指令群。但是,在竄改防止程序1330包括保留指令群1640的 情況下,需要在分支到A指令群1420之前將中途結(jié)果保留,因此,BR一B 分支指令群1660成為依據(jù)保留指令群1640的處理結(jié)束后分支到A指令群 1420的指令群。
      在圖20中舉例示出的竄改防止程序1330包括保留指令群1640,因此, BR_B分支指令群1660被表示為,依據(jù)保留指令群1640的處理結(jié)束后分 支到A指令群1420的分支指令群"gotoA;"。
      (2.7) 竄改防止程序1330的處理的流程
      為了對本實(shí)施例中的竄改防止程序1330的處理的流程和輸入程序 1310的處理的流程進(jìn)行比較,首先說明輸入程序1310的處理的流程。 圖21是示出輸入程序1310的處理的流程圖。
      如圖21示出,輸入程序1310是不包括分支的單純的程序。執(zhí)行處理 裝置1340,在執(zhí)行輸入程序1310的情況下,首先,執(zhí)行PRE—A指令群 1410(步驟S200),然后執(zhí)行A指令群1420(步驟S202)。進(jìn)一步,執(zhí)行處 理裝置1340,然后執(zhí)行SUC_A指令群1430(步驟S204),執(zhí)行B指令群 440(步驟S206),接下來執(zhí)行SUC—B指令群1450(步驟S208)。
      圖22是示出竄改防止程序1330的處理的流程圖。
      另一方面,如圖22示出,竄改防止程序1330包括分支和合并。執(zhí)行 處理裝置1340,在執(zhí)行竄改防止程序1330的情況下,首先,執(zhí)行PRE-A 指令群M10(步驟S300),其次,執(zhí)行STR—A變量群值代入指令群1620(步 驟S302),此后,執(zhí)行A指令群M20(步驟S304)。在此,執(zhí)行處理裝置 1340,通過在步驟S302執(zhí)行STI^A變量群值代入指令群1620,從而將 1代入到變量"var—abO"。
      而且,執(zhí)行處理裝置1340,通過執(zhí)行CBR_AB條件分支指令群1610, 從而判別變量"var—abO"是否滿足"var_ab0%2==0"(步驟S306)。此
      71時,執(zhí)行處理裝置1340,由于在步驟S302將1代入到變量"var—ab0",因此判別為變量"var—ab0"不滿足"var_ab0D%2==0"(步驟S306的"var—ab0%2==l")。
      其結(jié)果是,執(zhí)行處理裝置1340,執(zhí)行SUCLA指令群1430(步驟S308),其次,執(zhí)行B指令群1440(步驟S310),進(jìn)一步,執(zhí)行STIB變量群值代入指令群1630(步驟S312)。在此,執(zhí)行處理裝置1340,在步驟S312執(zhí)行STR—B變量群值代入指令群1630時,將8代入到變量"var_ab0"。
      進(jìn)一步,執(zhí)行處理裝置1340,執(zhí)行保留指令群1640(步驟S314),此后,執(zhí)行BR_B分支指令群1660(步驟S316),再次,執(zhí)行A指令群1420(步驟S304)。
      并且,執(zhí)行處理裝置1340,再一次,通過執(zhí)行CBR_AB條件分支指令群1610,從而判別變量"var_ab0"是否滿足"var—ab0%2==0"(步驟S306)。此時,執(zhí)行處理裝置1340,在步驟S312將8代入到變量"vaLab0",因此判別為變量"var—abO"滿足"var—&1)0%2==0"(步驟S306的"var—ab0
      其結(jié)果是,執(zhí)行處理裝置1340,執(zhí)行恢復(fù)指令群1650(步驟S318),其次,執(zhí)行SUC—B指令群1450(步驟S320)。
      如此,在STR—A變量群值代入指令群1620后、和BR_B分支指令群1660后執(zhí)行A指令群1420。也就是,在執(zhí)行處理裝置1340執(zhí)行輸入程序1310的情況下,只執(zhí)行一次A指令群1420,但是,在執(zhí)行操作裝置1340執(zhí)行竄改防止程序1330的情況下,執(zhí)行兩次A指令群1420。因此,在通過執(zhí)行處理裝置1340執(zhí)行竄改防止程序1330的情況、和在通過執(zhí)行處理裝置1340執(zhí)行作為難讀化前的程序的輸入程序1310的情況,以不同順序執(zhí)行各個指令群。
      (2.8)竄改防止程序1330的效果
      如圖21以及圖22示出,由于在非法解析人解析竄改防止程序1330時的其程序的執(zhí)行順序、和輸入程序1310的執(zhí)行順序不同,因此非法解析人即使解析竄改防止程序1330的執(zhí)行順序,也難以知道難讀化前的輸入程序的執(zhí)行順序、并難以進(jìn)行解析。并且,由于竄改防止程序1330的執(zhí)行順序比輸入程序1310的執(zhí)行順序更復(fù)雜,因此能夠使解析或竄改變得困難。其結(jié)果是,能夠確實(shí)保護(hù)作為保護(hù)對象代碼的A指令群1420。
      并且,可以考慮非法解析人采用以下的攻擊,即,找到用于難讀化的冗余的處理、并將其跳讀或刪除。在此,在本實(shí)施例中,BR—B分支指令群1660后的A揖令群1420的執(zhí)行相當(dāng)于冗長的處理,因此,可以考慮非法解析人發(fā)現(xiàn)A指令群1420為冗長、并試圖將其刪除。但是,在本實(shí)施例的竄改防止程序1330中,A指令群1420不是單純的冗余的處理,而是難讀化前的程序(輸入程序1310)需要的處理。因此,若刪除A指令群1420,則難讀化前的程序中利用了 A指令群1420的處理不被執(zhí)行。其結(jié)果是,竄改防止程序1330和輸入程序1310整體的處理結(jié)果不符合。也就是,非法解析人會將需要的處理都刪除。因此,這些依據(jù)非法解析人的攻擊的對竄改防止程序1330的竄改變得困難。
      并且,還可以考慮非法解析人進(jìn)行以下的攻擊,g卩,非法解析人預(yù)先知道程序的特定部分的控制構(gòu)造、并利用其知識來找到特定部分(作為這些控制構(gòu)造的例子,可以考慮公知的加密算法等)。并且,還可以考慮以下的攻擊,即,難讀化對象(輸入程序1310)是利用秘密信息的程序,非法解析人預(yù)先知道程序中包含的特定的運(yùn)算,為了找到該秘密信息,而找到該運(yùn)算。但是,本實(shí)施例中的竄改防止程序1330的控制構(gòu)造與非法解析人預(yù)先知道的控制構(gòu)造不同,因此,根據(jù)非法解析人預(yù)先知道的控制構(gòu)造的、對竄改防止程序1330的控制構(gòu)造的解析變得困難。(3)竄改防止處理生成裝置1320的結(jié)構(gòu)
      其次,進(jìn)行竄改防止處理生成裝置1320的說明。竄改防止處理生成裝置1320是將輸入程序1310難讀化、并生成生竄改防止程序1330的裝置。
      圖23是竄改防止處理生成裝置1320的結(jié)構(gòu)圖。
      竄改防止處理生成裝置1320包括輸入部2010、輸入程序保持部2020、被代入變量解析部2030、被代入變量信息保持部2040、被保留變量解析部2050、被保留變量信息保持部2060、保留指令群生成部2070、保留指令群保持部2080、恢復(fù)指令群生成部2090、恢復(fù)指令群保持部2091、條件分支指令群生成部2092、分支條件保持部2093、條件分支指令群保持部2094、變量群值代入指令群生成部2095、變量群值代入指令群保持部2096、分支指令群生成部2097、分支指令群保持部2098、竄改防止程序生成部2099、以及竄改防止程序輸出部2100。
      輸入部2010接受輸入程序1310(例如,圖18示出的程序),該輸入程序1310包括將SUC—A指令群1430作為分支目標(biāo)的A指令群1420;將A指令群1420作為分支目標(biāo)的PRE_A指令群1410;以及將SUC_B指令群1450作為分支目標(biāo)的B指令群1440。
      輸入程序保持部2020,保持輸入部2010接受的輸入程序1310。
      被代入變量解析部2030,解析(確定)輸入程序保持部2020保持的A指令群1420中包含的、代入值的變量(被代入變量)。
      被代入變量信息保持部2040,保持通過被代入變量解析部2030的解析獲得的被代入變量的變量名等的信息。
      被保留變量解析部2050,解析(確定)SUC一B指令群1450中包含的、參考值的變量(被參考變量)。而且,被保留變量解析部2050,確定作為被代入變量信息保持部2040保持的被代入變量的、且作為被參考變量的變量(以下,稱為被保留變量)。
      被保留變量信息保持部2060,保持被保留變量解析部2050所確定的被保留變量的變量名等的信息。
      保留指令群生成部2070,生成保留指令群1640,該保留指令群1640
      是將被保留變量保持的值保留到保留用變量(在本實(shí)施例中,變量"var_saveO"等)的指令群。
      保留指令群保持部2080,保持保留指令群生成部2070生成的保留指令群1640。
      恢復(fù)指令群生成部2090,生成恢復(fù)指令群1650,該恢復(fù)指令群1650是將保留到保留用變量的值恢復(fù)到被保留變量的指令群。
      恢復(fù)指令群保持部2091,保持恢復(fù)指令群生成部2090生成的恢復(fù)指令群1650。
      條件分支指令群生成部2092,生成CBR—AB條件分支指令群1610,該CBR—AB條件分支指令群1610包括SUCLA指令群1430和SUC—B指令群1450以作為條件分支目標(biāo),并根據(jù)分支目標(biāo)決定用的變量的G_VAL—AB變量群(在本實(shí)施例中,變量"var_abO"等)的值來決定分支目標(biāo)。分支條件保持部2093,保持CBR—AB條件分支指令群1610為了滿足 將SUC_A指令群1430作為分支目標(biāo)的條件而分支目標(biāo)決定用變量應(yīng)該取 的值的集合,以及為了滿足將SUCLB指令群1450作為分支目標(biāo)的條件而 分支目標(biāo)決定用變量應(yīng)該取的值的集合。
      條件分支指令群保持部2094,保持條件分支指令群生成部2092生成 的CBR—AB條件分支指令群1610。
      變量群值代入指令群生成部2095,生成將滿足將SUC—A指令群1430 作為分支目標(biāo)的條件的值代入到G—VAL—AB變量群(在本實(shí)施例中,變量 "var—abO"等)的指令群,或生成將代入滿足將SUC—B指令群1450作為 分支目標(biāo)的條件的值代入到G_VAL—AB變量群的指令群。
      變量群值代入指令群保持部2096,保持變量群值代入指令群生成部 2095生成的指令群。
      分支指令群生成部2097,生成BR—B分支指令群1660,從而在B指 令群1440后A指令群1420被執(zhí)行。
      分支指令群保持部2097,保持分支指令群生成部2097生成的BR一B 分支指令群1660。
      竄改防止程序生成部2099,利用輸入程序保持部2020保持的輸入程 序1310、以及各個指令群保持部保持的指令群,來生成竄改防止程序1330。
      竄改防止程序輸出部2100,將竄改防止程序生成部2099生成的竄改 防止程序1330記錄到記錄介質(zhì)1350。
      以下,對于各個構(gòu)成要素的工作進(jìn)行詳細(xì)說明。并且,作為具體例子, 說明在圖18的輸入程序1310被輸入到竄改防止處理生成裝置1320的情 況下的工作。
      (3.1) 輸入部2010
      輸入部2010,接受輸入程序1310。如在輸入程序1310的結(jié)構(gòu)中說明, 輸入程序1310包括A指令群1420、 PRE—A指令群1410、 SUC—A指令 群1430、 B指令群1440以及SUC一B指令群1450。輸入部2010,還接 受輸入程序1310中的哪個部分是A指令群1420、 PRE—A指令群1410、 SUC—A指令群1430、 B指令群1440或SUC—B指令群1450的指定。
      (3.2) 輸入程序保持部2020輸入程序保持部2020具備記憶指令群的區(qū)域。輸入程序保持部2020, 保持輸入部2010接受的輸入程序1310。
      (3.3) 被代入變量解析部2030
      被代入變量解析部2030,解析(確定)輸入處理指令群保持部2020保持 的輸入程序1310中的A指令群1420中的、存儲某種處理結(jié)果的存儲目標(biāo)。
      具體而言,例如,若A指令群1420包含將變量的值代入的處理,被 代入變量解析部2030,則解析(確定)該變量的變量名或類型。并且,例如, 若A指令群1420包含指定從棧指針的相對值并將值存儲到桟的處理,被 代入變量解析部2030,則解析(確定)該棧指針、棧的大小或從棧指針的相 對值。并且,例如,若A指令群1420包含將值存儲到以地址變量來指定 的位置的處理,被代入變量解析部2030,貝U解析(確定)所存儲的地址。在 以后的說明中,將這些A指令群1420的存儲某種處理結(jié)果的存儲目標(biāo)的 信息,總稱為被代入變量信息。而且,在本實(shí)施例中,除了A指令群1420 中直接出現(xiàn)的變量以外,還將存儲某種處理結(jié)果的存儲目標(biāo)的信息,也稱 為被代入變量信息。例如,在棧等被實(shí)現(xiàn)為OS的功能的情況下,有時在A 指令群1420中不明確表示棧指針或棧的大小,然而,這些值也是被代入變 量信息。
      其次,被代入變量解析部2030,將解析的被代入變量信息存儲到被代 入變量信息保持部2040。例如,將圖18的A指令群1420作為解析的對 象的情況下,被代入變量解析部2030,確定進(jìn)行值的代入的變量 "var—org0"和變量"va乙org2"的變量名和類型"int var_orgO"以及"int var_0rg2",并將各自存儲到被代入變量信息保持部2040。
      而且,在本實(shí)施例中假設(shè),輸入程序1310中的A指令群1420的范圍 是,從標(biāo)簽"A:"直到出現(xiàn)下一個其它標(biāo)簽為止。以后的說明中,PRE一A 指令群1410、 SUC—A指令群1430、 B指令群1440、 SUC—B指令群1450 的范圍也同樣,各個指令群的范圍是從某種標(biāo)簽直到出現(xiàn)下一個標(biāo)簽為止。
      對于該標(biāo)簽,可以根據(jù)通過輸入部2010的、由用戶的指定來附上標(biāo)簽, 也可以利用本來輸入程序1310被附上的標(biāo)簽。
      (3.4) 被代入變量信息保持部2040
      被代入變量信息保持部2040,記憶被代入變量解析部2030解析的A指令群1420的被代入變量信息。在存在多個被代入變量的情況下,記憶對 于各個被代入變量的被代入變量信息。
      在本實(shí)施例中,在通過被代入變量解析部2030對圖18的A指令群 1420迸行解析的情況下,被代入變量信息保持部2040,記憶各個被代入 變量的類型和變量名"intvar—org0"禾n "int var—org2"。 (3.5)被參考變量解析部2050
      被參考變量解析部2050解析(確定)影響到SUC—B指令群1450以后 的指令群的處理結(jié)果的、且依據(jù)A處理指令群來值變更的變量。而且,對 于被參考變量解析部2050的解析對象,與被代入變量解析部2030的解析 對象相同,包括A指令群1420中直接出現(xiàn)的變量以外的變量。如上所述, 若不是解析這些變量且將該變量的值保留,則在SUC—B指令群1450之前 A處理指令群被執(zhí)行,從而使竄改防止程序1330的處理結(jié)果與輸入程序 1310不同。
      首先,被參考變量解析部2050,確定輸入程序保持部2020保持的輸 入程序1310中的SUC—B指令群1450、以及在執(zhí)行SUC—B指令群1450 以后時需要的變量。在此,在執(zhí)行時需要的變量是指,在B指令群1440 的執(zhí)行結(jié)束時的變量的值被SUC一B指令群1450以后的指令使用的變量, 即影響到SUC_B指令群1450以后的處理結(jié)果的變量。進(jìn)一步,具體而言, 直到B指令群1440為止值被代入,并在SUC—B指令群1450以后的指令 中包含的代入式的右邊出現(xiàn)的變量相當(dāng)于需要的變量。
      其次,若確定的變量中有被代入變量信息保持部2040所保持的變量, 被參考變量解析部2050,則將其變量作為被保留變量,并將被保留變量的 變量名等的信息存儲到被保留變量信息保持部2060。也就是,被參考變量 解析部2050,抽出依據(jù)A指令群1420被代入值的、在SUC—B指令群1450 以后的指令群需要的變量,以作為保留變量。
      進(jìn)一步,具體而言,若SUCLB指令群1450是包含參考變量的處理的 指令群,被參考變量解析部2050,則解析(確定)該變量的變量名或類型。 并且,例如,若SUCLB指令群1450是包含參考棧的值的處理的指令群, 被參考變量解析部2050,則解析(確定)被參考的棧的大小。并且,例如, 若SUC_B指令群1450是包含參考在以地址變量來指定的位置所存儲的值
      77的處理的指令群,被參考變量解析部2050,則解析(確定)該地址變量或要
      存儲的值的類型。在以下的說明中,將與在執(zhí)行SUC一B指令群1450時需 要的參數(shù)或變量有關(guān)的這些信息,總稱為被參考變量信息,將參數(shù)或變量 本身稱為被參考變量。
      其次,若該被參考變量中有被代入變量信息保持部2040所保持的變 量,被參考變量解析部2050,則將其變量作為被保留變量,并將被保留變 量的變量名等的信息存儲到被保留變量信息保持部2060。
      例如,在圖18的SUC_B指令群1450的情況下,在 "var_orgl=var_orgl+var_org2;var—orgl=var_orgl*123;" 中變量 "var_0rgl"以及變量"var—org2"的值被參考。因此,被參考變量解析 部2050,將變量"var—orgl"以及變量"var—org2"作為被參考變量,將 "int var—orgl"以及"int var—org2"作為被參考變量信息。其中,被代 入變量信息保持部2040不保持"int var一orgl"而保持"int var—org2"。 因此,所保持的"intvar—org2"的變量"var—org2"是影響到SUC_B指 令群1450的處理結(jié)果的變量,且是在A指令群1420變更值的變量。因此, 需要在進(jìn)行A指令群1420的處理之前將變量"var一org2"的值保留,在 進(jìn)行SUC一B指令群1450的處理之前將其值恢復(fù)。被參考變量解析部 2050,將"intvar—org2"作為被保留變量信息,并將其存儲到被保留變量 信息保持部2060。
      而且,若能夠抽出影響到SUCLB指令群1450的處理結(jié)果的、且依據(jù) A指令群1420變更值的變量,則被參考變量解析部2050進(jìn)行的處理不僅 限于所述處理。例如,被參考變量解析部2050可以提取被代入變量信息保 持部2040保持的變量,并檢索在SUC一B指令群1450以后的指令中是否 包括該變量。并且,被參考變量解析部2050也可以不利用被代入變量信息 保持部2040,而直接從輸入程序保持部2020保持的輸入程序1310中提 取依據(jù)A指令群1420變更值的變量。 (3.6)被保留變量信息保持部2060
      被保留變量信息保持部2060,具備記憶被保留變量信息的區(qū)域。
      被保留變量信息保持部2060,記憶被參考變量解析部2050解析的被 保留變量信息。而且,在存在多個被保留變量的情況下,被保留變量信息保持部2060,記憶對于各個被保留變量的被保留變量信息。
      具體而言,在圖18的SUC_B指令群1450的情況下,被保留變量信
      息保持部2060記憶被保留變量的變量名和類型"int var_org2"。 (3.7)保留指令群生成部2070 保留指令群生成部2070,生成使被保留變量信息的值保留的保留指令
      群1640,并將其存儲到保留指令群保持部2080。以下說明詳細(xì)處理。
      A) 保留指令群生成部2070,決定如何將被保留變量保留。具體而言, 決定保留到哪個變量等。在本實(shí)施例中,保留指令群生成部2070,制作新 的變量,以作為被保留變量的保留目標(biāo),并使被保留變量的值保留到其變
      B) 保留指令群生成部2070,根據(jù)決定的保留方法來生成保留指令群 1640,以作為使被保留變量的值保留的指令群。
      C) 保留指令群生成部2070,將生成的保留指令群1640存儲到保留指 令群保持部2080。
      以下,說明在圖18的輸入程序1310被輸入到竄改防止處理生成裝置 1320的情況下的、保留指令群生成部2070的工作的具體例子。
      A) 保留指令群生成部2070,從被保留變量信息保持部2060獲得被保 留變量信息,并檢查被保留變量的個數(shù)。在此,只有被保留變量"int var—org2",因此個數(shù)為一個。保留指令群生成部2070,制作判定的個數(shù) 的新的保留用變量,并將制作的保留用變量"int var_SaveO"決定為用于 保留的的變量。
      B) 保留指令群生成部2070,生成將被保留變量的值保留到保留用變量 的保留指令群1640。在此,保留指令群生成部2070,生成指令
      "var—saveO=var—org2;"。而且,在存在多個被保留變量的情況下,保留 指令群生成部2070,生成對各個被保留變量的保留指令群。并且,也可以 不使作為保留指令群的被保留變量本身保留,而進(jìn)行加密等某種變換來保 留。在本實(shí)施例中,將進(jìn)行這些變換后保留的情況、以及以無變換照原樣 保留的情況,都稱為變換。
      C) 保留指令群生成部2070,將生成的保留指令群1640存儲到保留指 令群保持部2080。在此,存儲"var—saveO=var—org2;"。(3.8) 保留指令群保持部2080
      保留指令群保持部2080具備記憶指令群的區(qū)域。保留指令群保持部 2080,將保留指令群生成部2070生成的保留指令群1640記憶到記憶區(qū)域。 在圖18的輸入程序1310被輸入到竄改防止處理生成裝置1320的情 況下,由于保留指令群生成部2070生成的保留指令群1640成為 "var_saveO=var—org2;",因此,保留指令群保持部2080記憶 "var—saveO=var—org2;,,。
      (3.9) 恢復(fù)指令群生成部2090
      恢復(fù)指令群生成部2090生成恢復(fù)指令群1650,該恢復(fù)指令群1650 是將保留到保留用變量的值恢復(fù)到被保留變量的指令群。以下說明詳細(xì)處 理。
      A) 恢復(fù)指令群生成部2090,獲得保留指令群保持部2080保持的保留 指令群1640。
      B) 恢復(fù)指令群生成部2090,生成進(jìn)行獲得的保留指令群1640進(jìn)行的 變換的逆變換的指令群,并將其指令群作為恢復(fù)指令群1650。
      C) 恢復(fù)指令群生成部2090,將恢復(fù)指令群1650存儲到恢復(fù)指令群保 持部2091。
      以下,說明在圖18的輸入程序1310被輸入到竄改防止處理生成裝置 1320的情況下的、恢復(fù)指令群生成部2090的工作的具體例子。
      A) 恢復(fù)指令群生成部2090,獲得保留指令群保持部2080保持的保留 指令群1640 "var—save0=var_org2;"。
      B) 恢復(fù)指令群生成部2090,生成"var_save0=var_org2;,,的逆變換 的"var—org2=var—saveO;",以作為恢復(fù)指令群1650。
      C) 恢復(fù)指令群生成部2090,將恢復(fù)指令群1650"var_org2=var_save0 ;"存儲到恢復(fù)指令群保持部2091。
      (3.10) 恢復(fù)指令群保持部2091
      恢復(fù)指令群保持部2091,具備記憶指令群的區(qū)域?;謴?fù)指令群保持部 2091 ,將恢復(fù)指令群生成部2090生成的恢復(fù)指令群1650記憶到記憶區(qū)域。
      在所述的具體例子中,恢復(fù)指令群生成部2090生成的恢復(fù)指令群1650 是"var一org2-var—saveO;",恢復(fù)指令群保持部2091,記憶恢復(fù)指令群生成部2090所生成的"var_org2=var—save0;"。 (3.11)條件分支指令群生成部2092 條件分支指令群生成部2092,生成CBR—AB條件分支指令群1610, 該CBR—AB條件分支指令群1610包括SUC—A指令群1430和SUC一B指 令群1450以作為條件分支目標(biāo),并根據(jù)分支目標(biāo)決定用的G一VAL—AB變 量群(變量"var—abO")的值來決定分支目標(biāo)。而且,在存在恢復(fù)指令群1650 的情況下,條件分支指令群生成部2092,生成取代SUC_B指令群1450 而包括恢復(fù)指令群1650以作為分支目標(biāo)的CBR_AB條件分支指令群 1610。
      具體而言,進(jìn)行以下的處理。
      A) 條件分支指令群生成部2092,決定分支目標(biāo)決定用的變量。在本實(shí) 施例中,生成新的變量,并將該變量作為分支目標(biāo)決定用的變量。
      B) 條件分支指令群生成部2092,決定在分支目標(biāo)決定用的變量的值是 哪種值時將SUC—A指令群1430作為條件分支目標(biāo)。并且,條件分支指令 群生成部2092,決定在分支目標(biāo)決定用的變量的值是哪種值時將SUCLB 指令群1450作為條件分支目標(biāo)。在此,決定的條件的具體例子有,例如, 變量的值與規(guī)定的值一致;變量的值比規(guī)定的值大;對變量的值進(jìn)行某種 變化的值與規(guī)定的值一致等。
      C) 條件分支指令群生成部2092,將在所述的B)決定的條件分支目標(biāo)成 為SUC-A指令群1430的分支目標(biāo)決定用的變量的值的集合存儲到分支條 件保持部2093。并且,條件分支指令群生成部2092,將在所述的B)決定 的條件分支目標(biāo)成為SUC_B指令群1450的分支目標(biāo)決定用的變量的值的 集合存儲到分支條件保持部2093。
      D) 條件分支指令群生成部2092,在恢復(fù)指令群保持部2091保持恢復(fù) 指令群1650的情況下,生成將SUC—A指令群1430和恢復(fù)指令群1650 作為條件分支目標(biāo)的CBR一AB條件分支指令群1610,在不保持的情況下, 生成將SUC_A指令群1430和SUC—B指令群1450作為條件分支目標(biāo)的 CBR—AB條件分支指令群1610。
      E) 條件分支指令群生成部2092,將生成的CBR一AB條件分支指令群 1610存儲到條件分支指令群保持部2094。
      81以下,說明在圖18的輸入程序1310被輸入到竄改防止處理生成裝置 1320的情況下的、條件分支指令群生成部2092的工作的具體例子。
      A) 條件分支指令群生成部2092,具備輸入程序1310中不包含的新的 變量,以作為分支目標(biāo)決定用的GJVAL—AB變量。在此,分支目標(biāo)決定用 的變量是"var_abO"。
      B) 條件分支指令群生成部2092決定在分支目標(biāo)決定用的變量不是2 的倍數(shù)時,即在"var—ab0%2==l"時,將SUC_A指令群1430作為分支 目標(biāo);在2的倍數(shù)時,即在"var—&1)0%2==0"時,將SUC—B指令群1450 作為分支目標(biāo)。
      而且,在此,示出了在分支目標(biāo)決定用的變量是哪種值時將SUC_A 指令群1430作為分支目標(biāo)的一個例子,但是,其決定方法也可以是其它的 方法。例如,也可以決定為,在分支目標(biāo)決定用的變量是隨機(jī)選擇的值時 將SUCLA指令群1430作為分支目標(biāo)。
      C) 條件分支指令群生成部2092,將在所述的B)決定的條件分支目標(biāo)成 為SUCLA指令群1430的分支目標(biāo)決定用的變量的值的集合存儲到分支條 件保持部2093。在此,條件分支指令群生成部2092,存儲集合"Var_abO %2==1",即存儲2的倍數(shù)以外的值的集合。
      而且,條件分支指令群生成部2092,將條件分支目標(biāo)成為SUCLB指 令群1450的分支目標(biāo)決定用的變量的值存儲到分支條件保持部2093。在 此,條件分支指令群生成部2092,存儲集合"var_ab0%2==0",即存儲2 的倍數(shù)。
      在此,集合的存儲可以是集合中包含的所有的值的存儲,也可以是像 "var_ab0%2==0"那樣表示集合的公式的存儲。
      D) 條件分支指令群生成部2092,在恢復(fù)指令群保持部2091保持恢復(fù) 指令群1650的情況下,生成將SUC—A指令群1430和恢復(fù)指令群1650 作為條件分支目標(biāo)的CBR_AB條件分支指令群1610;在不保持的情況下, 生成將SUC—A指令群1430和SUC_B指令群1450作為條件分支目標(biāo)的 CBR一AB條件分支指令群1610。在此,由于恢復(fù)指令群保持部2091保持 恢復(fù)指令群1650,因此,條件分支指令群生成部2092,在恢復(fù)指令群1650 的開頭設(shè)定標(biāo)簽"SUC—B—",并生成CBR—AB條件分支指令群1610
      82"if(var—ab0%2==0) goto SUC_B—;"。
      E)條件分支指令群生成部2092,將生成的CBR-AB條件分支指令群 1610 "if(var—ab0%2==0) goto SUC—B—;"存儲到條件分支指令群保持部 2094。
      (3.12) 分支條件保持部2093
      分支條件保持部2093,至少具備記憶變量的值的集合的兩個區(qū)域。第 一區(qū)域記錄第一集合,該第一集合是滿足條件分支指令群生成部2092的分 支目標(biāo)成為SUC—A指令群1430的條件的變量的值的集合。并且,第二區(qū) 域記憶第二集合,該第二集合是滿足條件分支指令群生成部2092的分支目 標(biāo)成為SUC一B指令群1450(或,恢復(fù)指令群1650)的條件的變量的值的集 合。在此,集合的存儲可以是集合中包含的所有的值的存儲,也可以是像
      "var_ab0%2==0"那樣表示集合的公式的存儲。
      在所述的具體例子的情況下,第一區(qū)域保持滿足條件分支指令群生成 部2092的分支目標(biāo)成為SUC—A指令群1430的條件的變量的值的集合
      "Var_ab0%2==l"。并且,第二區(qū)域保持滿足條件分支指令群生成部2092 的分支目標(biāo)成為恢復(fù)指令群1650的條件的變量的值的集合"var—abO% 2=f 。
      (3.13) 條件分支指令群保持部2094 條件分支指令群保持部2094,具備記憶指令群的區(qū)域。條件分支指令
      群保持部2094,將條件分支指令群生成部2092生成的CBR—AB條件分支 指令群1610記憶到記憶區(qū)域。
      在所述的具體例子的情況下,條件分支指令群保持部2094,記憶條件 分支指令群生成部2092生成的CBI^AB條件分支指令群1610"if(var一ab0 %2==0)goto SUC_B」,,。
      (3.14) 變量群值代入指令群生成部2095 變量群值代入指令群生成部2095,生成STR一A變量群值代入指令群
      1620、和STR_B變量群值代入指令群1630。具體而言,進(jìn)行以下的處理。
      A) 變量群值代入指令群生成部2095,獲得分支條件保持部2093保持 的第一集合以及第二集合。
      B) 變量群值代入指令群生成部2095,生成將第一集合中包含的值代入到分支目標(biāo)決定用的變量的指令群,以作為STR一A變量群值代入指令群 1620。并且,變量群值代入指令群生成部2095,生成將第二集合中包含的 值代入到分支目標(biāo)決定用的變量的指令群,以作為STR一B變量群值代入指 令群1630。而且,在第一集合或第二集合中包含多個值的情況下,變量群 值代入指令群生成部2095,選擇任何值,以作為代入的值。其選擇方法, 可以是隨機(jī)的方法,也可以是根據(jù)某種基準(zhǔn)來選擇的方法。
      C)變量群值代入指令群生成部2095,將生成的指令群存儲到變量群值 代入指令群保持部2096。
      以下,說明在圖18的輸入程序1310被輸入到竄改防止處理生成裝置 1320的情況下的、變量群值代入指令群生成部2095的工作的具體例子。
      A) 變量群值代入指令群生成部2095,獲得分支條件保持部2093保持 的第一集合以及第二集合。這些,分別是"var—ab0%2==l"或"var—ab0 %2==0"。
      B) 變量群值代入指令群生成部2095,生成將分支目標(biāo)決定用的變量作 為第一集合中包含的值的指令群,以作為STR_A變量群值代入指令群 1620。在此,分支目標(biāo)決定用的變量是"var_ab0",例如,1是第一集合 中包含的值。因此,變量群值代入指令群生成部2095,將"var_ab0=8;" 作為STILA變量群值代入指令群1620。同樣,變量群值代入指令群生成 部2095,將"var—ab0=l;"作為STR—B變量群值代入指令群1630。
      C) 變量群值代入指令群生成部2095,將生成的STR一A變量群值代入 指令群1620和STR—B變量群值代入指令群1630存儲到變量群值代入指 令群保持部2096。
      (3.15)變量群值代入指令群保持部2096 變量群值代入指令群保持部2096,具備記憶指令群的區(qū)域。變量群值 代入指令群保持部2096,將變量群值代入指令群生成部2095生成的 STR一A變量群值代入指令群1620和STR一B變量群值代入指令群1630記 憶到記憶區(qū)域。
      在所述的具體例子的情況下,變量群值代入指令群保持部2096,保持 變量群值代入指令群生成部2095生成的STR—A變量群值代入指令群1620 和STR_B變量群值代入指令群1630,即保持"var—abO=l;"和"var—ab0=8;"。
      (3.16) 分支指令群生成部2097
      分支指令群生成部2097,生成用于從B指令群1440分支到A指令群 1420的BR一B分支指令群1660。
      具體而言,在圖18的輸入程序1310是處理對象的情況下,分支指令 群生成部2097,生成分支到A指令群1420的BR一B分支指令群1660, 即生成"gotoA;"。
      (3.17) 分支指令群保持部2098
      分支指令群保持部2098,具備記憶指令群的區(qū)域。分支指令群保持部 2098,將分支指令群生成部2097生成的BR_B分支指令群1660記憶到記 憶區(qū)域。
      例如,在所述的具體例子的情況下,分支指令群保持部2098,保持分 支指令群生成部2097生成的BR_B分支指令群1660,即保持"goto A;"。
      (3.18) 竄改防止程序生成部2099
      竄改防止程序生成部2099,利用輸入程序保持部2020保持的輸入程 序1310、以及各個指令群保持部保持的指令群,來生成竄改防止程序1330。 具體而言,竄改防止程序生成部2099,針對輸入程序1310,將各個指令 群保持部保持的指令群加入或配置到以下的位置,從而生成竄改防止程序 1330。
      A) 竄改防止程序生成部2099,向PRE—A指令群1410中的任何位置 加入STR_A變量群值代入指令群1620。
      B) 竄改防止程序生成部2099,在A指令群1420的最后配置CBR—AB 條件分支指令群1610。
      C) 竄改防止程序生成部2099,向B指令群1440中的任何位置加入 STR一B變量群值代入指令群1630。
      D) 竄改防止程序生成部2099,在B指令群1440的最后配置保留指令 群1640,進(jìn)一步,在其后面配置BR_B分支指令群1660。
      E) 竄改防止程序生成部2099,在SUC一B指令群1450的緊前,配置 恢復(fù)指令群1650。
      作為具體例子,竄改防止程序生成部2099,針對圖18的輸入程序1310,若加入所生成并保持的各個指令群,則生成圖20的竄改防止程序 1330。
      而且,在已經(jīng)對輸入程序1310本身進(jìn)行依據(jù)其它的難讀化方法的變換 等的情況下,有可能存在在A指令群1420或B指令群1440的最后包含以 正常系統(tǒng)執(zhí)行時不執(zhí)行的偽指令等的情況。在此情況下,CBR一AB條件分 支指令群1610或保留指令群1640,并不一定需要位于各個指令群的最后。 也就是,配置以正常系統(tǒng)來執(zhí)行的指令中的最后的位置即可。
      (3.19) 竄改防止程序輸出部2100
      竄改防止程序輸出部2100,接受并存儲竄改防止程序生成部2099生 成的竄改防止程序1330。并且,竄改防止程序輸出部2100,將改防止程 序1330記錄到記錄介質(zhì)1350。
      而且,在本實(shí)施例中,分支目標(biāo)決定用的G—VAL—AB變量(變量 "var_abO")相當(dāng)于追加變量,條件分支指令群生成部2092被構(gòu)成為變量 生成單元。并且,STR—A變量群值代入指令群1620相當(dāng)于第一條件值代 入指令,STR—B變量群值代入指令群1630相當(dāng)于第二條件值代入指令, 變量群值代入指令群生成部2095被構(gòu)成為條件值代入指令生成單元。
      (3.20) 竄改防止處理生成裝置1320的處理流程
      圖27是示出竄改防止處理生成裝置1320的工作的流程圖。利用圖24 說明將輸入程序1310變換為竄改防止程序1330的處理,即說明難讀化的 流程。
      首先,竄改防止處理生成裝置1320的輸入部2010,接受輸入程序 1310、輸入程序1310中的A指令群1420、 PRE—A指令群1410、 SUC—A 指令群1430、 B指令群1440、 SUCLB指令群1450的位置的指定,并將 其存儲到輸入程序保持部2020(步驟S400)。
      被代入變量解析部2030,解析輸入程序保持部2020保持的A指令群 1420的被代入變量信息,并將其存儲到被代入變量信息保持部2040(步驟 S402)。
      被保留變量解析部2050,確定在執(zhí)行輸入程序保持部2020保持的輸 入程序1310中的SUC_B指令群1450、以及SUC_B指令群1450以后時 需要的變量。并且,被保留變量解析部2050,將確定的變量中被代入變量信息保持部2040所保持的變量作為被保留變量,并將其存儲到被保留變量 信息保持部2060(步驟S404)。
      保留指令群生成部2070,生成保留指令群1640,并將其存儲到保留 指令群保持部2080(步驟S406)。
      恢復(fù)指令群生成部2090,生成恢復(fù)指令群1650,并將其存儲到恢復(fù) 指令群保持部2091涉驟S408)。而且,在步驟S404沒有找到任何被保留 變量的情況下,由于不需要生成保留指令群1640以及恢復(fù)指令群1650, 因此不進(jìn)行步驟S406以及步驟S408的處理。
      條件分支指令群生成部2092,生成CBR_AB條件分支指令群1610, 并將其存儲到條件分支指令群保持部2094(步驟S410)。
      變量群值代入指令群生成部2095,生成STR_B變量群值代入指令群 1630以及STR一A變量群值代入指令群1620,并將其存儲到變量群值代入 指令群保持部2096(步驟S412)。
      分支指令群生成部2097,生成BR_B分支指令群1660,并將其存儲 到分支指令群保持部2098(步驟S414)。
      竄改防止程序生成部2099,生成竄改防止程序1330,并將其存儲到 竄改防止程序輸出部2100(步驟S416)。并且,竄改防止程序輸出部2100, 將竄改防止程序記錄到記錄介質(zhì)1350。
      (3.21)竄改防止處理生成裝置1320的效果
      竄改防止處理生成裝置1320,能夠?qū)⒆鳛檩斎虢邮艿妮斎氤绦?310 變換為能夠獲得與輸入程序1310相同結(jié)果的竄改防止程序1330。在此, 如竄改防止程序1330的說明中所述,非法解析人即使實(shí)際操作竄改防止程 序1330來進(jìn)行解析,也難以知道輸入程序1310的指令群的執(zhí)行順序或控 制構(gòu)造。
      并且,竄改防止處理生成裝置1320,能夠?qū)⑤斎氤绦?310難讀化, 以作為具有更復(fù)雜的控制構(gòu)造的竄改防止程序1330。 (其它變形例)
      而且,根據(jù)所述實(shí)施例說明了本發(fā)明,但是,本發(fā)明不限定于所述實(shí) 施例。本發(fā)明也包含以下的情況。
      (l)在實(shí)施例1、其變形例、實(shí)施例2以及實(shí)施例3中,為了符合C語
      87言的表示法,在難讀化的處理中追加變量聲明等的指令,但是,追加這些 的指令的吋機(jī)不限定于所述的時機(jī)??梢栽陔y讀化的處理結(jié)束后、最后追 加這些指令,也可以以其它的時機(jī)來追加。并且,根據(jù)難讀化后的描述語 言,有可能不需要其處理的情況。
      (2) 在實(shí)施例1、其變形例以及實(shí)施例2中,執(zhí)行處理裝置和竄改防止
      處理生成裝置是不同的裝置,但不僅限于此。例如,可以使執(zhí)行處理裝置 包括具有與竄改防止處理生成裝置同等的功能的處理生成部,在程序的執(zhí)
      行時,通過其處理生成部進(jìn)行難讀化后執(zhí)行程序。根據(jù)其結(jié)構(gòu),由于被執(zhí)
      行的程序成為進(jìn)行了本發(fā)明的難讀化的程序,因此與實(shí)施例1以及實(shí)施例2 相同能夠防止非法竄改以及解析。而且,在此情況下,當(dāng)然優(yōu)選的是,通 過以抗竄改化等來保護(hù)執(zhí)行處理裝置內(nèi)的程序的存儲部分,從而保護(hù)原程 序。
      而且,執(zhí)行處理裝置也可以是執(zhí)行從程序分發(fā)服務(wù)器分發(fā)到的程序的 裝置,在結(jié)構(gòu)上除了竄改防止處理生成裝置以外,還包括解密裝置,將加 密并分發(fā)后的程序解密、進(jìn)一步難讀化后執(zhí)行程序。根據(jù)這些結(jié)構(gòu),能夠 通過執(zhí)行處理裝置將從程序分發(fā)服務(wù)器分發(fā)到的程序難讀化后執(zhí)行。
      并且,在實(shí)施例3中,執(zhí)行處理裝置的結(jié)構(gòu)和竄改防止處理生成裝置 的結(jié)構(gòu)不同,但是,同樣不僅限于此。與實(shí)施例1以及實(shí)施例2相同可以 考慮如上所述的變形例。
      (3) 在實(shí)施例3中,被保留變量解析部2050,將被代入變量信息保持 部2040的一部分的變量作為被保留變量,但也可以將被代入變量信息保持 部2040保持的所有的變量作為被保留變量。在利用這些結(jié)構(gòu)的情況下,雖 然存在連即使不保留也結(jié)果不受影響的變量都多余地被保留的可能性,但 是,由于不需要選擇被保留變量的處理,因此能夠使難讀化的處理更為高 速。
      并且,可以在結(jié)構(gòu)上將A指令群1420中包含的所有的變量作為被保 留變量,或?qū)⑤斎氤绦?310中包含的所有的變量作為被保留變量。利用這 些結(jié)構(gòu),由于不需要被代入變量的解析本身,因此能夠使難讀化的處理更 為高速。
      (4) 在實(shí)施例3中,保留指令群生成部2070生成保留指令群1640
      88"var—saveO=var—org2;",但也可以生成"var—saveO=var—org2+2;"等的 可以逆變換的其它的指令。在此情況下,恢復(fù)指令群生成部2090,生成成 為逆變換的恢復(fù)指令群1650 "var—org2= var—save0 — 2;"。而且,對于生 成可以逆變換的指令的方法,不限定于所述的方法,而可以利用公知的方 法、或?qū)硐氲降姆椒ā?br> 并且,可以在結(jié)構(gòu)上生成通過多階段的處理來將一個被保留變量保留 的保留指令群,也可以在結(jié)構(gòu)上生成針對多個被保留變量最后所有的被保 留變量被保留的多個保留指令群。也就是,若通過保留指令群的執(zhí)行最后 被保留變量被保留,則不論保留指令群的結(jié)構(gòu)。而且,也可以針對一部分 的被保留變量生成多個保留指令群,針對其它的被保留變量分別生成一個 保留指令群。利用這些結(jié)構(gòu),非法解析人,從竄改防止程序中包含的指令 群中難以找到保留指令群或恢復(fù)指令群。
      并且,說明了保留指令群生成部2070,在結(jié)構(gòu)上追加新的變量,以作 為保留用變量,但也可以在結(jié)構(gòu)上與為了難讀化而生成的其它的變量同時 使用保留用變量。作為這些變量的例子可以考慮為,在依據(jù)其它的方法的 難讀化中附加以正常系統(tǒng)執(zhí)行時不執(zhí)行的偽處理的情況下,在偽處理中所 使用的變量等。并且,可以使用在程序中已經(jīng)不使用的變量等。利用這些 結(jié)構(gòu),非法解析人,難以解析在竄改防止程序所使用的變量中哪個變量是 從難讀化前已經(jīng)存在的變量、哪個變量是保留用變量。因此,難以知道在 竄改防止程序中的哪個部分適用本方法。
      (5)在實(shí)施例3中,將竄改防止程序1330中包含的各個指令群分別示 出為獨(dú)立的指令群,但也可以生成將其中的多個指令群合成的指令群。并 且,與所述內(nèi)容相同,在與實(shí)施例l、其變形例以及實(shí)施例2中,也可以生 成將多個指令群合成的指令群。例如,在實(shí)施例3中也可以,不生成作為 恢復(fù)指令群1650的"var—org2二 var—saveO;"和作為SUC_B指令群1450 的"var_orgl=var_orgl+var—org2;var_orgl=var_orgl*123;",而是生成 將其合成的指令群"var_orgl=var_orgl+var—saveO;var—orgl=var_orgl* 123;"。在所述的例子中,由于通過解析程序可以知道變量"var—org2"的 值與"var_save0"的值相同,因此將SUC—B指令群1450中的var_org2 置換為var—save0。利用這些結(jié)構(gòu),非法解析人,從竄改防止程序中難以找到恢復(fù)指令群或保留指令群。因此,難以知道在竄改防止程序中的哪個 部分適用本方法。
      而且,除了所述的例子以外,在編譯器等的領(lǐng)域周知的方法是在前后 沒有矛盾的狀態(tài)下合成多個指令來生成新的指令的方法。雖然省略詳細(xì)說 明,但是,當(dāng)然可以針對本方法適當(dāng)?shù)乩眠@些方法。
      (6) 在實(shí)施例3中,分支指令群生成部2097可以不生成作為BR_B分 支指令群1660的"goto A;",而生成條件分支指令群。例如,可以將BI^B 分支指令群1660作為"if(var—org2>200) goto A;"。
      利用這些結(jié)構(gòu),根據(jù)var一org2值,竄改防止程序1330的工作成為不 同的工作。在所述的例子中,竄改防止程序1330,按照"vai^org2"的值 是否超過"200"來變更工作。據(jù)此,能夠使非法解析人認(rèn)為"200"的值(本 來是沒有特別的意義的值)是重要的值,因此解析工作變得更困難。
      而且,在實(shí)施例l、其變形例以及實(shí)施例2中,也與所述的內(nèi)容相同, 分支處理指令群生成部203、 203b可以不生成作為分支處理指令群320、 320a、 320b的"plainData=decrypt(encryptedData)",而生成條件分支 指令群。。
      (7) 在實(shí)施例3中說明了,在輸入程序中B指令群1440之前存在A 指令群1420的情況,但也可以是相反的情況。
      (8) 在實(shí)施例3中說明了,在輸入程序中A指令群的分支源塊只是一 個PRE—A指令群的情況,但也可以存在多個分支源塊。在存在第一 PRE—A 指令群、第二PRE一A指令群、…的多個分支源塊的情況下,向各個分支源 塊追加STi^A變量群值代入指令群即可。利用這些結(jié)構(gòu),通過竄改防止處 理生成裝置1320可以將控制構(gòu)造復(fù)雜的程序難讀化。在此情況下,可以將 向各個分支目標(biāo)塊追加STILA變量群值代入指令群,分別作為雖然最后的 計(jì)算結(jié)果相同但是中途的計(jì)算過程不同的指令。據(jù)此,能夠使非法解析人 難以知道STI^A變量群值代入指令群是哪個指令。
      并且,在實(shí)施例3中,針對一個A指令群存在一個B指令群,但也可 以其任一方、或兩者是多個。利用這些結(jié)構(gòu),由于竄改防止程序富于變化, 因此可以使非法解析人依據(jù)竄改防止程序難以想到輸入程序。而且,與所 述內(nèi)容相同,在實(shí)施例1、其變形例以及實(shí)施例2中,也可以在沒有矛盾的
      90范圍內(nèi)存在同一種的指令群的個數(shù)為多個。
      (9)在實(shí)施例3中,在輸入程序中B指令群的分支目標(biāo)塊只是一個 SUCLB指令群,但也可以存在多個分支目標(biāo)塊。例如,在B指令群1440 的分支目標(biāo)塊是第一 SUC_B指令群和第二 SUCLB指令群的情況下,在B 指令群1440的最后根據(jù)"Var_0rg2"的值來決定分支目標(biāo)。例如,將如此 決定分支目標(biāo)的CBR—B條件分支指令,被表示為"if(var_org2 % 2==0){gotoSUC_B—l;}else{gotoSUC—B—2;}"。在此情況下,CBR一AB條 件分支指令群1610,在"var—ab0%2! =0"時,將SUC_A作為分支目標(biāo), 在"var_ab0%2==0"時,根據(jù)"var_org2"的值來決定分支目標(biāo)。也就 是,以下利用C語言來具體描述進(jìn)行該處理的CBR一AB條件分支指令群 1610。
      "if(var_ab0%2==0){ if(var一org2%2==0){goto SUC—B_1;} else{goto SUC—B-2;} J,,
      而且,"SUC—B_l"是附上第一SUC—B指令群的標(biāo)簽,"SUC—B—2" 是附上第二 SUC一B指令群的標(biāo)簽。
      在這些CBR—AB條件分支指令群1610中,在PRE—A指令群被執(zhí)行 后A指令群被執(zhí)行的情況下,成為"var—ab%2!=0",因此,就在CBR—AB 條件分支指令群1610后的SUC—A指令群成為分支目標(biāo)。并且,在B指令 群被執(zhí)行后A指令群被執(zhí)行的情況下,成為"var—ab%2==0",因此,根 據(jù)所述的指令群的第二行到第三行中包含的CBR—B條件分支指令的條件 來第一 SUC_B指令群或第二 SUC—B指令群成為條件分支目標(biāo)。
      而且,如上所述,CBIAB條件分支指令群1610,不限定于以下的結(jié) 構(gòu),即,與實(shí)施例3相同使CBR一AB條件分支指令群1610包含CBR—B 條件分支指令。在所述的例子的情況下,若進(jìn)行以下的處理,則可以 CBR一AB條件分支指令群1610的結(jié)構(gòu)是其它的結(jié)構(gòu),在所述的處理中, 在"var—ab%2! =0"時SUC—A指令群成為分支目標(biāo)、在"var_ab%2==0" 且"var—org2 % 2==0 "時第一 SUC—B指令群成為分支目標(biāo)、在 "var—ab%2==0"且"var—org2%2! =0"時第二 SUC—B指令群成為分
      91支目標(biāo)。
      例如,可以將CBR一AB條件分支指令群1610作為以下的指令群。
      "tmp =(var—abO % 2)*2+(var_org2 % 2); switch(tmp){case 0: case 1: goto SUC_A; esse 2:
      goto SUC_B_1; case 3:
      goto SUC—B_2;},,
      并且,同樣,對于A指令群的分支目標(biāo)塊說明了,只是一個SUC—A 指令群的情況,但也可以存在多個分支目標(biāo)塊。以下示出,在第一SUC一A 指令群和第二 SUC—A指令群按照變量"var一org2"的值是否為2的倍數(shù) 來成為分支目標(biāo)的情況下的CBR—AB條件分支指令群1610的例子。 "if(var一abO% 2==0){goto SUC_B;}
      else(
      if(var—org2%2==0){goto SUC_A_1;}
      else {goto SUC_A_2;}
      }"
      而且,"SUC—A—1"是附上第一SUCLA指令群的標(biāo)簽,"SUC—A—2" 是附上第二 SUC一A指令群的標(biāo)簽。
      在所述的例子中,只在"var—abO"不能被2除盡的情況下,進(jìn)行分支 到第一SUC一A指令群、還是分支到第二SUCLA指令群的處理。而且,在 存在多個SUC一A指令群的情況下制作CBR—AB條件分支指令群1610的 方法,也不僅限于此。對于具體例子,與存在多個SUC一B指令群的情況相 同,因此省略說明。
      并且,可以SUC—A指令群以及SUC^B指令群的兩者都當(dāng)然也可以都 存在多個。
      以下,說明利用這些結(jié)構(gòu)的情況下的效果。
      對于非法解析人的攻擊的例子,可以考慮在進(jìn)行程序的非法竄改時將條件分支指令竄改為無條件分支指令。例如,在竄改對象的程序是,檢查
      用戶輸入的ID是否是準(zhǔn)確的值、且在準(zhǔn)確的值時進(jìn)行第一 SUC_B指令群、在錯誤的值時進(jìn)行第二 SUC—B指令群的程序的情況下,非法解析人將條件分支指令竄改,來竄改為分支到第一SUC—B指令群的無條件分支指令。在進(jìn)行這些竄改的情況下,即使不知道準(zhǔn)確的ID,也可以執(zhí)行與知道準(zhǔn)確的ID的正規(guī)的用戶同等的程序。在此,在進(jìn)行將條件分支指令替換為無條件分支指令的竄改的情況下,例如,在將如上所述的CBR—AB條件分支指令群1610置換為"gotoSUC_B—1;"的情況下,能夠使進(jìn)行了所述的難讀化的程序,在所輸入的ID不是準(zhǔn)確的值時也進(jìn)行第一 SUC_B指令群(若沒有竄改,則第二 SUC一B指令群應(yīng)該被執(zhí)行)。但是,由于進(jìn)行了所述難讀化的CBR一AB條件分支指令群1610,在執(zhí)行SUC—A之前也被調(diào)用,因此,若進(jìn)行這些竄改,則導(dǎo)致在應(yīng)該進(jìn)行SUC—A指令群的情況下也無條件地進(jìn)行第一 SUCLB指令群。因此,若進(jìn)行這些竄改,則產(chǎn)生像SUC—A指令群的執(zhí)行本身不被進(jìn)行那樣的、非法解析人不希望受到的影響。據(jù)此,能夠使非法解析人難以把握因自己進(jìn)行的竄改而引起的影響,因此能夠使非法解析人難以進(jìn)行非法解析行為以及竄改行為。
      尤其在將所述的結(jié)構(gòu)和變形例(6)所述的結(jié)構(gòu)組合的情況下,根據(jù)輸入值等(例如,根據(jù)"vai^org2"的值)來存在因所述的竄改而引起的影響發(fā)生的情況、和不發(fā)生的情況。據(jù)此,在利用不發(fā)生影響的輸入值來進(jìn)行解析的情況下,非法解析人更難以把握適用了本方法的部分,因此難以進(jìn)行非法解析行為以及竄改行為。
      并且,也可以追加包含像非專利文獻(xiàn)1所述的難度化技術(shù)那樣的、實(shí)際上不分支的偽分支目標(biāo)的條件分支指令群。具體而言,可以在所述的條件分支指令群的例子中追加"case 4"、 "case 5"、…等的偽分支目標(biāo)。利用這些結(jié)構(gòu),即使試圖只將分支到第二 SUC一B指令群的部分竄改來無條件地分支到第一SUC一B指令群,也難以知道應(yīng)該竄改哪個部分。并且,在將以匯編語言等來描述的程序難讀化的情況下,也可以利用依據(jù)相對轉(zhuǎn)移的條件分支指令。
      并且,也可以設(shè)置進(jìn)行與第一 SUC—B指令群同等的處理的第一SUC—B指令群l、第一SUCLB指令群2、,在本來分支到第一 SUC_B指令群的條件時、分支到所述同等的處理的任何指令群。對于第二SUCLB指令群、第一SUC一A指令群也是同樣的。根據(jù)所述內(nèi)容,能夠使非法解析人難以確定哪個指令群示出相當(dāng)于第一 SUC—B指令群等的處理。
      (IO)在實(shí)施例3中說明了 SUC_B指令群的分支源只是一個B指令群的情況,但也可以除了 B指令群以外,還存在作為SUC—B指令群的分支源的C1指令群、C2指令群、…。在此情況下,由于向SUCLB指令群追加恢復(fù)指令群,因此向C1指令群、C2指令群、…也需要追加對應(yīng)于恢復(fù)指令的保留指令群。并且,在C1指令群存在作為SUC一B指令群以外的分支目標(biāo)的D1分支目標(biāo)指令群、D2分支目標(biāo)指令群、…的情況下,由于向Cl指令群追加恢復(fù)指令群,因此向Dl分支目標(biāo)指令群、D2分支目標(biāo)指令群、…也追加保留指令群。
      對于控制構(gòu)造復(fù)雜的程序,反復(fù)進(jìn)行所述的操作,決定成為追加保留指令群的對象的指令群、和成為追加恢復(fù)指令群的對象的指令群。通過向決定的指令群追加保留指令群、恢復(fù)指令群,從而能夠進(jìn)行本發(fā)明的難讀化。
      (IO)在實(shí)施例3中示出了在B指令群后A指令群被執(zhí)行的情況下A指令群的執(zhí)行結(jié)果不被使用的結(jié)構(gòu),但也可以在結(jié)構(gòu)上在SUC_B指令群使用進(jìn)行A指令群后的結(jié)果。在此情況下,可以獲得實(shí)施例l或?qū)嵤├?相同的效果。
      圖25是本變形例涉及的竄改防止程序的結(jié)構(gòu)圖。
      竄改防止程序1330a包括PRE—A指令群1410; STI^A變量群值代入指令群1620; A指令群1420; CBR—AB條件分支指令群1610; SUC—A指令群1430; B指令群1440; STR_B變量群值代入指令群1630;保留指令群1640;被參考變量值代入處理指令群2210; BR_B分支指令群1660;恢復(fù)指令群1650;以及SUC_B依賴處理指令群2220。
      也就是,本變形例涉及的竄改防止程序1330a,與實(shí)施例3的竄改防止程序1330相比,還包括被參考變量值代入處理指令群2210,并且,取代竄改防止程序1330的SUC—B指令群1450而包括SUC—B依賴處理指令群2220。
      并且,在本變形例涉及的竄改防止程序1330a中,A指令群1420相當(dāng)于實(shí)施例1的第一處理指令群140,被參考變量值代入處理指令群2210相當(dāng)于實(shí)施例1的被參考變量值代入處理指令群310, BR—B分支指令群1660相當(dāng)于實(shí)施例1的分支處理指令群320, SUC—B依賴處理指令群2220相當(dāng)于實(shí)施例1的依賴處理指令群330。
      圖26是示出以C語言來表示的竄改防止程序1330a的具體例子的圖。
      被參考變量值代入處理指令群2210是,對在調(diào)用并執(zhí)行A指令群1420時需要的各種參數(shù)設(shè)定值的處理。具體而言,被參考變量值代入處理指令群2210被表示為"var—org2=5;",示出將值"5"代入到被參考變量"var—org2"的處理。
      因此,在依據(jù)BR_B分支指令群1660來處理分支到A指令群1420的情況下,若該A指令群1420未被竄改,則依據(jù)A指令群1420的處理來估計(jì)值"40(=5X8)"被代入到被代入變量"var—org0"、且7(=5+2)被代入到變量"var_org2"。
      另一方面,SUC—B依賴處理指令群2220是調(diào)用A指令群1420后被執(zhí)行的處理指令群,也是進(jìn)行與輸入程序1310的SUC_B指令群1450同等的處理的程序指令群。與SUC一B指令群1450本身不同,SUCLB指令群1450的一部分的處理,被置換為使用A指令群1420的處理結(jié)果的處理。
      具體而言,例如,SUC_B依賴處理指令群2220被表示為"var_orgl=var—orgl+var—org2; var—orgl=var—orgl*(var_org0*3+3)"。也就是,在SUC—B依賴處理指令群2220中,SUC_B指令群1450的"123",被置換為使用A指令群1420的處理結(jié)果的"(var_org0*3+3)"。
      因此,SUC—B依賴處理指令群2220,若依據(jù)A指令群1420的處理來獲得作為被代入變量"var—org0"的值的估計(jì)值"40",則能夠執(zhí)行與SUC—B指令群1450同等的處理。
      圖27是示出竄改防止程序1330a的處理流程的圖。
      竄改防止程序1330a的處理,與圖22示出的竄改防止程序1330的處理相比,還包括執(zhí)行被參考變量值代入處理指令群2210的處理(步驟S315),并且,取代圖22示出的步驟S320的處理而包括執(zhí)行SUC—B依賴處理指令群2220的處理(步驟S321)。
      也就是,執(zhí)行處理裝置1340,在執(zhí)行竄改防止程序1330a的情況下,執(zhí)行保留指令群1640后(步驟S314),執(zhí)行被參考變量值代入處理指令群2210(步驟S315)。然后,執(zhí)行處理裝置1340,執(zhí)行BR—B分支指令群1660(步驟S316)并且,執(zhí)行處理裝置1340,在執(zhí)行恢復(fù)指令群1650后(步驟S318),執(zhí)行SUC—B依賴處理指令群2220(步驟S321)。
      圖28是本變形例涉及的竄改防止處理生成裝置生成竄改防止程序1330a的工作的說明圖。
      而且,在圖28中,PRE—A示出PRE—A指令群1410, A示出A指令群1420,SUC—A示出SUCLA指令群1430,B示出B指令群1440, SUC—B示出SUC—B指令群1450或SUC—B依賴處理指令群2220。并且,變量"XO"示出變量"var—orgO",變量"XI"示出變量"var—orgl",變量"X2"示出變量"var—org2"。進(jìn)一步,變量"Y"示出變量"var_ab0",變量"P"示出變量"var—save0"。
      竄改防止處理生成裝置,若獲得輸入程序1310,則確定應(yīng)該作為保護(hù)對象的指令群,將其輸入程序1310難讀化,以使其保護(hù)對象的指令群由多個處理路徑被執(zhí)行。也就是,竄改防止處理生成裝置,在作為一個處理路徑的一部分來存在的保護(hù)對象的指令群被竄改的情況下,生成竄改防止程序1330a,以使其它的處理路徑依據(jù)其竄改來產(chǎn)生異常。
      具體而言,如圖28的(a)示出,竄改防止處理生成裝置,將B指令群1440和SUCUB指令群1450之間設(shè)定為選擇位置。而且,如圖28的(b)示出,竄改防止處理生成裝置,變更輸入程序的執(zhí)行路徑(處理路徑),以使保護(hù)對象的A指令群1420在該選擇位置被再次執(zhí)行。
      也就是,竄改防止處理生成裝置,追加作為新路徑的BR—B分支指令群1660 "goto A",以使處理從B指令群1440分支到A指令群1420。
      此時,竄改防止處理生成裝置,追加幾個指令群,以在PRE—A指令群1410后A指令群1420被執(zhí)行時,此后,SUCLA指令群1430被執(zhí)行;在B指令群1440后A指令群1420被執(zhí)行時,此后,SUC—B指令群1450被執(zhí)行。例如,竄改防止處理生成裝置,追加STR_A變量群值代入指令群1620 "Y=l"、 STR—B變量群值代入指令群1630 "Y=8"、 CBR—AB條件分支到指令群1610 "if(Y%2==0)goto SUC_B"。
      其次,如圖28的(c)示出,竄改防止處理生成裝置確保SUCLB指令群1450的匹配性,以使SUC_B指令群1450的處理結(jié)果不發(fā)生下列變化, 所述變化是指依據(jù)像在B指令群1440之后A指令群1420被再次執(zhí)行那樣 的執(zhí)行路徑的變更而發(fā)生的變化。
      也就是,竄改防止處理生成裝置,追加保留指令群1640 "P=X2"和 恢復(fù)指令群1650 "X2=P"。據(jù)此,竄改防止處理生成裝置,即使在B指令 群1440后A指令群1420被執(zhí)行,也能夠防止其執(zhí)行結(jié)果影響到SUC_B 指令群1450的處理結(jié)果。
      而且,如圖28的(d)示出,竄改防止處理生成裝置,將SUCLB指令群 1450變更為SUC一B依賴處理指令群2220,以使SUC—B指令群1450的 處理結(jié)果依賴于在B指令群1440后被執(zhí)行的A指令群1420的處理結(jié)果。 此時,竄改防止處理生成裝置,追加被參考變量值代入處理指令群2210 "X2=5,,。
      其結(jié)果是,在A指令群1420未被竄改的情況下,通過在B指令群1440 后A指令群1420被執(zhí)行,從而獲得作為變量"X0"的值的估計(jì)值"40", SUC—B依賴處理指令群2220成為與SUC—B指令群1450同等的處理。 另一方面,在A指令群1420被竄改的情況下,通過在B指令群1440后A 指令群1420被執(zhí)行,也不能獲得作為變量"X0"的值的估計(jì)值"40", SUC一B 依賴處理指令群2220成為與SUC—B指令群1450不同的異常的處理。
      如此本變形例涉及的竄改防止處理生成裝置,生成使用A指令群1420 的執(zhí)行結(jié)果的SUC_B依賴處理指令群2220。在本變形例涉及的竄改防止 處理生成裝置,具有與實(shí)施例1以及其變形例的竄改防止處理生成裝置 110、 110a相同的結(jié)構(gòu)時,可以實(shí)現(xiàn)所述內(nèi)容。也就是,本變形例涉及的 竄改防止處理生成裝置是,向?qū)嵤├?的圖23示出的竄改防止處理生成裝 置1320追加實(shí)施例1以及其變形例中的估計(jì)值算出部290、 290a以及依 賴處理指令群生成部201、 201a等來構(gòu)成的。
      在此,保護(hù)對象的A指令群1420或SUCLB指令群1450,可以包含 關(guān)于用戶接口或外部存取的API(Application Program Interface:應(yīng)用程 序接口),以取代函數(shù)。
      圖29是本變形例涉及的竄改防止處理生成裝置生成包含API的竄改 防止程序的工作的說明圖。
      97而且,在圖29中,PRE—A示出PRE-A指令群,A示出A指令群, SUC—A示出SUC一A指令群,B示出B指令群,SUC—B示出SUC一B指 令群或SUC—B依賴處理指令群。
      在此,如圖29的(a)示出,例如,A指令群被表示為"X:GetText(V)"。 "GetText(V)"是將用戶輸入的字符串存儲到地址變量V示出的地址的 API。同樣,例如,SUC—B指令群被表示為"S二GetText(T)"。"GetText(T)" 是將用戶輸入的字符串存儲到地址變量T示出的地址的API。
      也就是,如圖29的(a)示出,竄改防止處理生成裝置,獲得在A指令 群以及SUC—B指令群包含API的輸入程序。在此情況下,與所述內(nèi)容相 同,竄改防止處理生成裝置,將其輸入程序難讀化,以確定應(yīng)該作為保護(hù) 對象的指令群,并使其保護(hù)對象的指令群由多個處理路徑被執(zhí)行。也就是, 竄改防止處理生成裝置,在作為一個處理路徑的一部分來存在的保護(hù)對象 的指令群被竄改的情況下,生成竄改防止程序,以使其它的處理路徑依據(jù) 其竄改來產(chǎn)生異常。
      具體而言,竄改防止處理生成裝置,判定在成為保護(hù)對象的A指令群 是否包含API。在此,竄改防止處理生成裝置,若判定為包含API,則檢 索調(diào)用該API的其它的處理。其結(jié)果是,竄改防止處理生成裝置,若找到 調(diào)用該API的SUC—B指令群,如圖29的(a)示出,則將B指令群和SUC—B 指令群之間設(shè)定為選擇位置。而且,如圖29的(b)示出,竄改防止處理生成 裝置,變更輸入程序的執(zhí)行路徑(處理路徑),以使保護(hù)對象的A指令群在該 選擇位置被再次執(zhí)行。
      也就是,竄改防止處理生成裝置,追加作為新路徑的BR一B分支指令 群"goto A",以使處理從B指令群分支到指令群。
      此時,竄改防止處理生成裝置,追加幾個指令群,以在PRE一A指令群 后A指令群被執(zhí)行時,此后,SUC一A指令群被執(zhí)行;在B指令群后A指 令群被執(zhí)行時,此后,SUC—B指令群被執(zhí)行。例如,竄改防止處理生成裝 置,追加STR—A變量群值代入指令群"Y=l"、 STR_B變量群值代入指令 群"Y=8"、 CBR_AB條件分支到指令群"if(Y%2==0)gotoSUC_B"。
      其次,如圖29的(c)示出,竄改防止處理生成裝置,確保變量X以及 地址變量V的匹配性,從而即使在B指令群后變更地址變量V的值來再次A指令群被執(zhí)行,也不使變量X以及地址變量V在SUC一B指令群以后的 處理中不必要地被變更。也就是,竄改防止處理生成裝置,追加保留指令
      群"Pi=x;P2=v"和恢復(fù)指令群"x=pi;v=P2"。
      而且,如圖29的(d)示出,竄改防止處理生成裝置,將SUC—B指令群 "S=GetText(T)"變更為SUC—B依賴處理指令群"S=X;*T=*V",以使 SUC一B指令群的處理結(jié)果依賴于在A指令群的處理結(jié)果。也就是,竄改防 止處理生成裝置,由于在地址變量V所示的地址存儲有處理結(jié)果,因此使 用該處理結(jié)果來取代本來的SUCLB指令群的處理結(jié)果。而且,此時,竄改 防止處理生成裝置,追加被參考變量值代入處理指令群"V=T"。
      其結(jié)果是,若A指令群未被竄改,則SUC—B依賴處理指令群成為與 SUC_B指令群同等的處理。另一方面,若A指令群被竄改,g卩,若在A 指令群是輸入串行的處理的情況下非法解析人進(jìn)行例如像作為"X二(串行的 值的常數(shù))"那樣的竄改,則SUC_B依賴處理指令群成為與SUC一B指令 群不同的異常的處理。
      (12)在實(shí)施例3中,PRE—A指令群、A指令群、SUC—A指令群、B 指令群以及SUCLB指令群是在同一輸入程序中包含的指令群,但也可以以 不同的函數(shù)來實(shí)現(xiàn)。
      例如,可以考慮以下的情況,BP,與實(shí)施例1相同,將相當(dāng)于第一處 理指令群的A指令群、和相當(dāng)于第二處理指令群的B指令群以及SUC_B 指令群,作為不同的函數(shù)來輸入的情況等。在此情況下,從B指令群中讀 出包含A指令群的函數(shù),若丟棄該函數(shù)的處理結(jié)果(或,若不明確丟棄也不 參考),則能夠不使在SUC_B指令群以后的處理中出現(xiàn)指令群A的影響, 并且,能夠進(jìn)行與實(shí)施例3相同的難讀化。而且,在以參考調(diào)用來調(diào)用包 含A指令群的函數(shù)的情況下等,有可能因作為引數(shù)而提供的變量發(fā)生變化, 而在SUC—B指令群以后的處理中產(chǎn)生影響,因此,與實(shí)施例3相同,將 保留處理指令群或恢復(fù)處理指令群追加到函數(shù)調(diào)用的前后。
      并且,在實(shí)施例以及其變形例中,第一處理指令群和第二處理指令群 分別被輸入,但是,與實(shí)施例3相同,當(dāng)然可以作為同一的輸入程序中的 其它的處理、或作為同一的函數(shù)中的其它的處理。當(dāng)然,在此情況下也可 以獲得與所述的效果相同的效果。
      99在結(jié)構(gòu)上利用BR一B分支指令群1660,以 在B指令群后A指令群被執(zhí)行,但不僅限于此。例如,也可以不使用分支 指令,而重新排列指令群的處理順序,來就在保留指令群1640后配置A 指令群。在此情況下,不需要BR_B分支指令群1660,但是,為了使指令 群的執(zhí)行順序與輸入程序1310相同,而需要進(jìn)行變換,以在STR—A變量 群值代入指令群1620后加入向A指令群的分支指令等。
      (14) 在實(shí)施例3中,在結(jié)構(gòu)上由用戶指定將輸入程序中的哪個部分作 為A指令群、將哪個部分作為B指令群,但也可以在結(jié)構(gòu)上將竄改防止處 理生成裝置從輸入程序中隨機(jī)地選擇的指令群作為A指令群或B指令群。 在采用這些結(jié)構(gòu)的情況下,竄改防止處理生成裝置,決定A指令群或B指 令群后,需要決定PRE一A指令群以及SUCLA指令群。在此情況下,竄改 防止處理生成裝置,解析決定的A指令群的分支源塊,并將解析的塊作為 第一 PRE—A指令群、第二 PRE—A指令群、…。對于第一 PRE_B指令群、 第二PRE—B指令群、…也是同樣的。并且,竄改防止處理生成裝置,解析 指令群的分支目標(biāo)塊,并將解析的塊作為第一 SUC—A指令群、第二 SUC—A 指令群、…。對于第一 SUC—B指令群、第二SUC—B指令群、…也是同樣 的。
      (15) 在實(shí)施例3中,分支目標(biāo)決定用的G_VAL_AB變量,只是 "var_abO"的1個,但也可以是多個。在此情況下,例如,能夠?qū)⑹境鍪?br> 否需要分支到SUC一A指令群的變量、和示出是否需要分支到SUC_B指令 群的變量作為不同的變量等。
      (16) 在實(shí)施例3中,利用包含SUC—A指令群的輸入程序,以作為向 竄改防止處理生成裝置1320的輸入,但不僅限于此。例如,在作為A指 令群的分支目標(biāo)的指令是OS側(cè)的函數(shù)的情況下等,并不一定在輸入程序 中包含相當(dāng)于SUC_A指令群的指令。也就是,竄改防止處理生成裝置 1320,在不被提供作為輸入的SUC一A指令群的情況下,只要知道作為A 指令群的分支目標(biāo)的指令的地址或函數(shù)名,就通過構(gòu)成CBR一AB條件分支 到指令群,以分支到其地址或函數(shù)名示出的指令群,從而能夠難讀化。
      (17) 在實(shí)施例1、其變形例以及實(shí)施例2、 3的說明中,示出了程序的 生成處理流程,但是,對于相互沒有依賴關(guān)系的處理,也可以調(diào)換順序、
      100或并行執(zhí)行。
      并且,也可以所述的難讀化與其它的難讀化方法一起適用。
      例如,在實(shí)施例l、其變形例以及實(shí)施例2、 3中,基本上將輸入的指 令群原封不動地包含在將輸出的指令群,但不僅限于此。也可以通過其它 的難讀化方法,根據(jù)輸入程序,來生成與各個指令群等價的指令群后,將 該指令群包含在難讀化后的程序。據(jù)此,能夠使輸入程序的指令群和將輸 出的指令群之間的對應(yīng)關(guān)系難以被得知。在此,也可以不是依據(jù)所有的指 令群來生成與各個指令群等價的指令群,而是對于一部分的指令群,生成 等價的指令群,對于其它的指令群,將輸入程序的指令群原封不動地輸出。 也就是,在本實(shí)施例中,等價的指令群也包含不進(jìn)行任何變換的指令群, 等價的指令群的生成也包含只是從輸入程序中抽出各個指令群的處理。而 且,為了獲得所述的效果,只要各個指令群中至少一個指令群被變換為與 本來的指令群雖不同但進(jìn)行等價的處理的指令群,就無論其它的指令群被 變換為與本來的指令群不同的指令群。.
      (18)在此,例如,在通過與本發(fā)明不同的其它的方法將圖3示出的第 二處理指令群150難讀化、并使其被執(zhí)行處理裝置130執(zhí)行的情況下,通 過不解析其難讀化的第二處理指令群150,而將其移植到其它的設(shè)備,從 而能夠使第二處理指令群150被該設(shè)備正常執(zhí)行。
      例如,對于第二處理指令群150,利用加密密鑰來進(jìn)行解密。該加密 密鑰或解密處理的細(xì)節(jié)是應(yīng)該保密的信息(秘密信息),因此,應(yīng)該不被解析。 因此,如上所述,第二處理指令群.150被難讀化。但是,在容易進(jìn)行如上 所述的移植的非法行為的情況下,即使第二處理指令群150被難讀化、且 防止該秘密信息被解析,其難讀化也無意義。并且,為了防止這些非法行 為,而需要使難讀化后的第二處理指令群150的代碼大小大幅度地增加。
      因此,在實(shí)施例以及其變形例的竄改防止處理生成裝置110中,可以 生成輸出處理指令群160,以將本來在執(zhí)行處理裝置130中包含的指令群 作為第一處理指令群140來利用,并使處理路徑分支到該第一處理指令群 140。據(jù)此,能夠在將輸出處理指令群160的代碼大小的增大抑制來變小的 同時,使如上所述的移植變得困難。
      圖30是在本來在執(zhí)行處理裝置130中包含第一處理指令群140的情況下的本發(fā)明的效果的說明圖。
      竄改防止處理生成裝置110,獲得作為保護(hù)對象的第二處理指令群
      150。例如,第二處理指令群150包含處理塊B0、 Bl、…B9。并且,本 來在執(zhí)行處理裝置130中包含構(gòu)成第一處理指令群140的處理塊BA。在 此,竄改防止處理生成裝置110,校正第二處理指令群150,來生成輸出處 理指令群160,以使處理路徑從處理塊B0分支到處理塊BA后返回到處理 塊B1。也就是,竄改防止處理生成裝置110,將第一處理指令群140作為 保護(hù)對象的一部分,將第二處理指令群150難讀化為輸出處理指令群160。
      其結(jié)果是,非法解析人,在進(jìn)行非法行為、以使其它的設(shè)備執(zhí)行依據(jù) 第二處理指令群150的處理的情況下,除了第二處理指令群150以外,還 需要將第一處理指令群140移植。但是,第一處理指令群140是進(jìn)行本來 被編入到執(zhí)行處理裝置的處理的指令群,因此難以移植到其它的設(shè)備。因 此,能夠使這些非法行為變得困難。而且,依據(jù)第二處理指令群150的難 讀化,指令群不會大幅度地增加,因此能夠?qū)⑤敵鎏幚碇噶钊?60的代碼 大小的增大被抑制得變小。并且,通過將進(jìn)行各個執(zhí)行處理裝置固有的處 理的指令群選擇為第一處理指令群140,從而能夠使移植變得更困難。
      而且,并不一定需要第一處理指令群140是程序指令,也可以是本來 在執(zhí)行處理裝置130中包含的裝置或電路(例如,用于音頻播放的電路)等。 并且,為了使移植變得困難,而可以向執(zhí)行處理裝置130追加具有第一處 理指令群140的功能的專用裝置或電路。在這些情況下,使分支處理指令 群包含使所述的裝置或電路工作的指令,而取代分支到第一處理指令群140 的工作。而且,例如,被參考變量成為向其裝置或電路的輸入,被代入變 量成為其裝置或電路的輸出。
      利用這些結(jié)構(gòu),在沒有所述的裝置或電路的環(huán)境下,即使將通過執(zhí)行 處理裝置130工作的程序單純地移植,也不能使移植的程序工作,因此能 夠防止非法解析人將程序移植的攻擊。
      (19)在此,例如有,在包含加密等的秘密信息的處理(指令群)中包含 查找表或移位運(yùn)算等特征性的運(yùn)算(以下,特征性運(yùn)算)的情況,該特征性運(yùn) 算是一般不經(jīng)常使用的。因此,在圖16示出的執(zhí)行處理裝置1340執(zhí)行輸 入程序1310的情況下,非法解析人,以特征性運(yùn)算為目標(biāo),從輸入程序1310中容易找到包含秘密信息的指令群,從而能夠進(jìn)行非法解析。
      因此,例如,實(shí)施例3的竄改防止處理生成裝置1320,也可以將包含
      特征性運(yùn)算的指令群作為A指令群1420,來生成竄改防止程序1330。 圖31是在A指令群1420包含特征性運(yùn)算的情況下的本發(fā)明的效果的
      說明圖。
      竄改防止處理生成裝置1320,若獲得輸入程序1310,則檢索包含特 征性運(yùn)算的指令群,并將找到的指令群作為A指令群1420,從而進(jìn)行與所 述的實(shí)施例3相同的難讀化處理。其結(jié)果是,竄改防止處理生成裝置1320 生成的程序成為,與所述的實(shí)施例3相同的、反復(fù)執(zhí)行包含特征性運(yùn)算的 A指令群1420的竄改防止程序1330。
      據(jù)此,在竄改防止程序1330的處理路徑中執(zhí)行特征性運(yùn)算的部分增 加。因此,能夠使非法解析人尋找包含秘密信息的指令群的非法行為變得 困難。
      而且,在實(shí)施例1、其變形例以及實(shí)施例2中也與所述內(nèi)容相同,竄改 防止處理生成裝置,可以將包含特征性運(yùn)算的指令群作為第一指令群處理, 來生成輸出處理指令群。
      (20)在此,在實(shí)施例l、其變形例以及實(shí)施例2、 3中生成了分支到作 為保護(hù)對象的指令群(第一處理指令群或A指令群)的分支處理指令群,但也 可以不生成該分支處理指令群,而只進(jìn)行圖28的(d)示出的依賴化。
      例如,可以設(shè)想以下的攻擊,即,將限制內(nèi)容的再生的程序竄改,來 解除該程序的再生限制。這些程序,例如,若內(nèi)容的再生次數(shù)為規(guī)定的限 制次數(shù)以下,則許可該內(nèi)容的再生?;蛘撸绦?,認(rèn)證再生內(nèi)容的設(shè)備, 并只許可正當(dāng)?shù)脑O(shè)備再生該內(nèi)容?;蛘?,程序,判定該內(nèi)容是否被非法復(fù) 制,若未被非法復(fù)制,則許可該內(nèi)容的再生。
      也就是,非法解析人試圖將條件分支指令竄改為無條件分支指令,以 從該程序中找到用于判定內(nèi)容的再生與否的條件分支指令,從而總是許可 再生。
      圖32是示出由非法解析人的竄改的例子的圖。
      如圖32的(a)以及(b)示出,非法解析人,執(zhí)行程序,比較再生許可時 的日志和再生不許可時的日志。其結(jié)果是,如圖32的(c)以及(d)示出,非
      103法解析人,'確定產(chǎn)生日志的差異的部位,找到該部位緊前的、用于判定內(nèi)
      容的再生與否的條件分支指令(處理塊B19)。
      于是,非法解析人,解析作為條件分支指令的處理塊B19,來解析在 處理塊B19中,在再生許可時將1代入到變量a,在再生不許可時將0代 入到變量a。因此,非法解析人試圖將該處理塊B19從條件分支指令變更 為無條件分支指令,以在處理塊B19中總是將1代入到變量a。
      于是,為了應(yīng)對其攻擊,本發(fā)明中可以只進(jìn)行如圖28的(d)示出的依賴化。
      圖33是示出本變形例涉及的竄改防止處理生成裝置只進(jìn)行依賴化的例 子的圖。
      本變形例涉及的竄改防止處理生成裝置400,獲得包含圖32示出的條 件分支指令的程序,以作為輸入程序Pi。而且,竄改防止處理生成裝置400, 確定該輸入程序Pi中的再生許可時的處理(被限制處理)中包含的一個常 數(shù)。也就是,竄改防止處理生成裝置400,找到處理塊B26中包含的常數(shù) "10"。而且,竄改防止處理生成裝置400,通過該輸入程序Pi的條件分 支指令(處理塊B19),從處理塊B19中抽出判定變量a和被限制值"1", 該判定變量a是將內(nèi)容的再生許可與否的判定結(jié)果存儲的變量,該被限制 值"1"是示出在再生許可時該判定變量a所存儲的判定結(jié)果的值。
      其結(jié)果是,竄改防止處理生成裝置400,通過將處理塊B26中包含的 常數(shù)"10"變換為在"a=l"時與該常數(shù)"10"相同的公式"a*5+5",從 而使處理塊B26的處理依賴于處理塊B19的處理結(jié)果(執(zhí)行結(jié)果)。
      也就是,竄改防止處理生成裝置400,刪除再生不許可時的錯誤處理(處 理塊B30 B39),以在輸入程序Pi中無論處理塊B19的判定結(jié)果如何, 而再生許可時的處理被執(zhí)行,并且,將處理塊B26 "x=x+10"置換為處理 塊B26a "x=x+a*5+5",從而生成竄改防止程序Po。
      據(jù)此,在竄改防止程序Po中,在處理塊B26許可再生時,即在將1 代入到變量a時,進(jìn)行處理,以正常再生內(nèi)容。另一方面,在以處理塊B26 不許可再生時,即在將0代入到變量a時,進(jìn)行處理,以不正常再生內(nèi)容, 而進(jìn)行異常的處理。因此,在正當(dāng)?shù)闹滴创氲脚卸ㄗ兞縜的情況下,不 能正常再生內(nèi)容,因此能夠進(jìn)行與輸入程序Pi同等的處理。并且,在本實(shí)施例中,由于執(zhí)行竄改防止程序Po時的日志,在再生許
      可時和再生不許可時不同,因此,能夠使作為保護(hù)對象的條件分支指令難 以被找到、并難以被竄改為無條件分支指令。
      圖34是示出本變形例涉及的竄改防止處理生成裝置400的結(jié)構(gòu)的一個 例子的圖。
      竄改防止處理生成裝置400包括輸入程序保持部401、常數(shù)選擇部 402、變量抽出部403、變換部404以及竄改防止程序保持部405。 輸入程序保持部401,獲得并保持輸入程序Pi。
      常數(shù)選擇部402,確定輸入程序Pi中的再生許可時的處理(被限制處 理),并選擇該處理中包含的一個常數(shù)。
      變量抽出部403,將在輸入程序Pi的條件分支指令中存儲判定結(jié)果的 判定變量,從該條件分支指令中抽出。而且,變量抽出部403抽出被限制 值,該被限制值是在條件分支指令中判定為應(yīng)該執(zhí)行被限制處理時該判定 變量所存儲的值。
      而且,將示出判定結(jié)果的值存儲到判定變量的條件分支指令,也可以 是由多個指令構(gòu)成的指令群。并且,判定變量也可以不是輸入程序Pi中明 確出現(xiàn)的變量。例如,也可以判定變量是棧。在此情況下,被限制值是該 棧所存儲的值。并且,判定變量也可以是與地址變量所指定的位置相對應(yīng) 的記憶區(qū)域。在此情況下,被限制值是該位置所存儲的值。而且,被限制 值也可以不是一個值,而是值的集合。在此情況下,無論被代入到判定變 量的值是屬于該集合的哪個值,也都生成進(jìn)行與處理塊B26相同的處理的 指令群,以作為處理塊B26a。具有這些性質(zhì)的指令群的生成方法,與實(shí)施 例1的變形例6中的依賴處理指令群的生成方法相同。
      并且,在這些條件分支指令中向判定變量代入被限制值的處理,與實(shí) 施例1、其變形例以及實(shí)施例2中的第一處理指令群的處理、或?qū)嵤├? 的A指令群的處理相同。
      變換部404,刪除輸入程序Pi中的錯誤處理,從而無論條件分支指令 的判定結(jié)果如何,都會被限制處理被執(zhí)行。而且,變換部404,將常數(shù)選 擇部402所選擇的常數(shù)變換為利用判定變量的公式。而且,變換部404, 可以將該常數(shù)變換為利用判定變量的函數(shù)。此時,變換部404,生成公式,
      105以在被限制值被代入到判定變量時,使通過該公式算出的值與所述的常數(shù)
      相同。變換部404,通過這些處理,生成竄改防止程序Po,并將其存儲到竄改防止程序保持部405。而且,變換部404,通過進(jìn)行與實(shí)施例l、其變形例以及實(shí)施例2中的依賴處理指令群生成部201、 201a、 201b相同的處理,從而生成所述的公式。
      竄改防止程序保持部405,獲得并保持變換部404所生成的竄改防止程序Po。
      圖35是示出本變形例涉及的竄改防止處理生成裝置400的工作的一個例子的流程圖。
      首先,竄改防止處理生成裝置400,選擇輸入程序Pi的被限制處理中包含的常數(shù)(步驟S500)。其次,竄改防止處理生成裝置400,從輸入程序Pi的條件分支指令中抽出判定變量以及被限制值(步驟S502)。而且,竄改防止處理生成裝置400,將在步驟S500所選擇的常數(shù)變換為利用判定變量的公式(歩驟S504)。并且,此時,竄改防止處理生成裝置400,刪除輸入程序Pi中的錯誤處理,從而無論條件分支指令的判定結(jié)果如何,都會被限制處理被執(zhí)行。其結(jié)果是,輸入程序Pi被變換為竄改防止程序Po。
      (21)并且,在實(shí)施例1以及其變形例中說明了,第二處理指令群150是將壓縮的內(nèi)容解壓的處理,但也可以是其它的處理。而且,在實(shí)施例l、其變形例以及實(shí)施例2中說明了,第一處理指令群140是將內(nèi)容的加密的再生可能次數(shù)解密來輸出明文的再生可能次數(shù)的處理,但也可以是其它的處理。也就是,本發(fā)明的適用對象,不僅限于進(jìn)行實(shí)施例l、其變形例以及實(shí)施例2所述的解密處理或解壓處理等的指令群。只要是需要防止竄改的
      指令群,任何指令群就能夠被適用。例如,可以將管理內(nèi)容的利用權(quán)的指令群等作為其適用例子。
      (23)實(shí)施例1、其變形例以及實(shí)施例2、 3中舉例示出了各個程序或指令群是C語言的程序的情況,但不僅限于此。也可以分別是其他的編程語言、UML等的建模語言、編輯程序等的中間語言、匯編語言、機(jī)器語言等。
      (23)在實(shí)施例1、其變形例以及實(shí)施例2、 3中,對于難讀化的對象,不僅僅是計(jì)算機(jī)編序語言,也可以是邏輯電路描述語言等的邏輯電路的設(shè)計(jì)的信息(具體而言,以VHDL等的硬件描述語言來描述的程序等)。對于通過難讀化獲得的程序也是同樣的。也就是,在本發(fā)明中作為難讀化對象 的程序以及通過難讀化獲得的程序,在概念上除了以計(jì)算機(jī)編程語言來描 述的程序以外,還包含所述的邏輯電路的設(shè)計(jì)的信息。
      (24) 具體而言,所述的各個裝置是由微處理器、ROM、 RAM、硬盤 單元、顯示單元、鍵盤以及鼠標(biāo)等構(gòu)成的計(jì)算機(jī)系統(tǒng)。該RAM或硬盤單元 存儲有計(jì)算機(jī)程序。也就是,微處理器根據(jù)計(jì)算機(jī)程序來工作,從而各個 裝置實(shí)現(xiàn)其功能。在此,計(jì)算機(jī)程序是,為了實(shí)現(xiàn)規(guī)定的功能,將示出對 計(jì)算機(jī)的指示的多個指令代碼組合而構(gòu)成的。而且,各個裝置,也可以不 是包括微處理器、ROM、 RAM、硬盤單元、顯示單元、鍵盤以及鼠標(biāo)等全 部的計(jì)算機(jī)系統(tǒng),而是由這些的一部分構(gòu)成的計(jì)算機(jī)系統(tǒng)。
      (25) 構(gòu)成所述的各個裝置的構(gòu)成要素的一部分或全部,也可以由一個 系統(tǒng)LSI(Large Scale Integration:大規(guī)模集成電路)構(gòu)成。系統(tǒng)LSI是在 一個芯片上集成多個構(gòu)成部來制造的超多功能LSI,具體而言,系統(tǒng)LSI 是包括微處理器、ROM以及RAM等來構(gòu)成的計(jì)算機(jī)系統(tǒng)。該RAM記憶 計(jì)算機(jī)程序。也就是,微處理器根據(jù)計(jì)算機(jī)程序來工作,從而系統(tǒng)LSI實(shí) 現(xiàn)其功能。
      (26) 構(gòu)成所述的各個裝置的構(gòu)成要素的一部分或全部,也可以由與各 個裝置可裝卸的IC卡或單體的模塊構(gòu)成。該IC卡或模塊是,由微處理器、 ROM以及RAM構(gòu)成的計(jì)算機(jī)系統(tǒng)。該IC卡或模塊,也可以包括所述的 超多功能LSI。也就是,微處理器根據(jù)計(jì)算機(jī)程序來工作,從而該IC卡或 模塊實(shí)現(xiàn)其功能。該IC卡或模塊,也可以具有抗竄改性。
      (27) 本發(fā)明,也可以實(shí)現(xiàn)為所述的竄改防止處理生成裝置生成竄改防 止處理的方法。并且,本發(fā)明,也可以實(shí)現(xiàn)為通過這些方法來使計(jì)算機(jī)生 成竄改防止處理的計(jì)算機(jī)程序、或由計(jì)算機(jī)程序構(gòu)成的數(shù)字信號。
      (28) 本發(fā)明,也可以實(shí)現(xiàn)為將所述的計(jì)算機(jī)程序或數(shù)字信號記錄了的 計(jì)算機(jī)可讀的記錄介質(zhì),例如是軟盤、硬盤、CD—ROM、 MO、 DVD、 DVD — ROM、 DVD—RAM, BD(Blu—ray Disc)、半導(dǎo)體存儲器等。并 且,也可以實(shí)現(xiàn)為這些記錄介質(zhì)所記錄的數(shù)字信號。
      (29) 并且,本發(fā)明,也可以實(shí)現(xiàn)為電通信電路、無線通信電路、有線 通信電路、以互聯(lián)網(wǎng)為代表的網(wǎng)絡(luò)、或經(jīng)由數(shù)據(jù)廣播等而傳輸?shù)乃龅挠?jì)算機(jī)程序或數(shù)字信號。
      (30) 并且,本發(fā)明,也可以實(shí)現(xiàn)為包括微處理器和存儲器的計(jì)算機(jī)系 統(tǒng)。在此情況下,該存儲器記憶所述的計(jì)算機(jī)程序,微處理器根據(jù)該計(jì)算 機(jī)程序來工作。
      (31) 并且,通過將計(jì)算機(jī)程序或數(shù)字信號記錄到記錄介質(zhì)、并將其轉(zhuǎn) 送,或?qū)⒂?jì)算機(jī)程序或數(shù)字信號經(jīng)由網(wǎng)絡(luò)等來轉(zhuǎn)送,從而也可以以獨(dú)立的 其它的計(jì)算機(jī)系統(tǒng)來實(shí)施本發(fā)明的處理。
      (31)本發(fā)明,也可以是這些實(shí)施例以及變形例的組合。
      并且,本發(fā)明涉及的指令生成裝置,由于能夠?qū)⑻幚砑用苊荑€等秘密 信息的程序變換為更難以解析的程序,因此有用于生成利用秘密信息的軟 件等的設(shè)備等,該秘密信息若被非法解析人泄漏則導(dǎo)致不利。并且,本發(fā) 明涉及的指令生成裝置所生成的程序,由于在形式上非法解析人難以解析, 因此能夠適用于執(zhí)行利用秘密信息的處理的軟件等的設(shè)備等,該秘密信息 若被非法解析人泄漏則導(dǎo)致不利。
      權(quán)利要求
      1、一種指令生成裝置,為了保護(hù)使計(jì)算機(jī)將數(shù)據(jù)代入到被代入變量的第一處理指令,而生成由使所述計(jì)算機(jī)執(zhí)行的多個指令構(gòu)成的輸出處理指令群,其特征在于,所述指令生成裝置包括分支指令生成單元,生成分支指令,以作為所述輸出處理指令群的一部分,所述分支指令,使處理路徑分支到所述第一處理指令,以使所述計(jì)算機(jī)執(zhí)行所述第一處理指令;以及依賴處理指令生成單元,生成依賴處理指令,以作為所述輸出處理指令群的一部分,所述依賴處理指令,依賴于示出所述計(jì)算機(jī)根據(jù)所述分支指令執(zhí)行所述第一處理指令的結(jié)果的、被代入到所述被代入變量的數(shù)據(jù),并在所述數(shù)據(jù)示出預(yù)定的細(xì)節(jié)的情況下,使所述計(jì)算機(jī)執(zhí)行在所述輸出處理指令群以后應(yīng)該進(jìn)行的預(yù)定的處理。
      2、 如權(quán)利要求1所述的指令生成裝置,其特征在于,所述依賴處理指令生成單元,獲得使所述計(jì)算機(jī)執(zhí)行預(yù)定的處理的第二處理指令,并將其變換為所 述依賴處理指令,從而生成所述依賴處理指令,所述依賴處理指令,在示出所述第一處理指令被執(zhí)行的結(jié)果的、代入 到所述被代入變量的值示出預(yù)定的估計(jì)值的情況下,使所述計(jì)算機(jī)導(dǎo)出與 所述第二處理指令的執(zhí)行結(jié)果相同的執(zhí)行結(jié)果。
      3、 如權(quán)利要求2所述的指令生成裝置,其特征在于, 所述指令生成裝置,還包括獲得單元,獲得輸入程序,該輸入程序包含不使用所述第一處理指令 的所述第二處理指令、和使用所述第一處理指令來使所述計(jì)算機(jī)執(zhí)行與所述第二處理指令不同的處理的第三處理指令;以及輸出單元,輸出包含所述輸出處理指令群和所述第三處理指令的輸出 程序,所述輸出處理指令群包含所述依賴處理指令,所述依賴處理指令是 所述輸入程序的所述第二處理指令由所述依賴處理指令生成單元變換而被 生成的。
      4、 如權(quán)利要求2所述的指令生成裝置,其特征在于,所述指令生成裝置,還包括估計(jì)值算出單元,算出根據(jù)預(yù)定的條件且依據(jù)所述第一處理指令來被 代入到所述被代入變量的值,以作為所述估計(jì)值,所述依賴處理指令生成單元,生成依賴處理指令,該依賴處理指令, 在示出所述第一處理指令被執(zhí)行的結(jié)果的、被代入到所述被代入變量的值 示出所述估計(jì)值算出單元所算出的估計(jì)值的情況下,使所述計(jì)算機(jī)導(dǎo)出與 所述第二處理指令的執(zhí)行結(jié)果相同的執(zhí)行結(jié)果。
      5、 如權(quán)利要求4所述的指令生成裝置,其特征在于, 所述指令生成裝置,還包括被參考代入處理生成單元,生成被參考代入處理指令,以作為所述輸 出處理指令群的一部分,所述被參考代入處理指令,在所述計(jì)算機(jī)執(zhí)行所 述第一處理指令的情況下,使所述計(jì)算機(jī)將值代入到所述第一處理指令所 參考的被參考變量,所述估計(jì)值算出單元,將被代入到所述被參考變量的值作為所述條件, 算出根據(jù)所述被參考變量的值且依據(jù)所述第一處理指令來被代入到所述被 代入變量的值,以作為所述估計(jì)值。
      6、 如權(quán)利要求5所述的指令生成裝置,其特征在于, 所述指令生成裝置,還包括被參考確定單元,確定所述第一處理指令所參考的被參考變量, 所述被參考代入處理生成單元,生成所述被參考代入處理指令,所述被參考代入處理指令使所述計(jì)算機(jī)將值代入到所述被參考確定單元所確定的被參考變量。
      7、 如權(quán)利要求5所述的指令生成裝置,其特征在于, 所述指令生成裝置,還包括值保持單元,保持成為被代入到所述被參考變量的值的候補(bǔ)的多個值, 以作為被參考變量值的集合,所述被參考代入處理生成單元,生成所述被參考代入處理指令,所述被參考代入處理指令,使所述被 參考變量值的集合中包含的任一個值被代入到所述被參考變量。
      8、 如權(quán)利要求7所述的指令生成裝置,其特征在于,所述估計(jì)值算出單元,算出根據(jù)所述被參考變量值的集合中包含的各 個值且依據(jù)所述第一處理指令來被代入到所述被代入變量的值的集合,以 作為估計(jì)值的集合,所述依賴處理指令生成單元,利用所述被參考變量值的集合和所述估計(jì)值的集合來生成所述依賴處 理指令,所述依賴處理指令,在示出所述第一處理指令被執(zhí)行的結(jié)果的、所述被代入變量的值是所 述估計(jì)值的集合中包含的值的情況下,使所述計(jì)算機(jī)導(dǎo)出與所述第二處理 指令的執(zhí)行結(jié)果相同的執(zhí)行結(jié)果。
      9、 如權(quán)利要求1所述的指令生成裝置,其特征在于, 所述依賴處理指令,使所述計(jì)算機(jī)比較被代入到所述被代入變量的值和預(yù)定的估計(jì)值,在 所述被代入變量的值與所述估計(jì)值相同的情況下,使所述計(jì)算機(jī)執(zhí)行預(yù)定 的處理,在所述被代入變量的值與所述估計(jì)值不同的情況下,使所述計(jì)算 機(jī)抑制所述預(yù)定的處理的執(zhí)行。
      10、 如權(quán)利要求l所述的指令生成裝置,其特征在于,所述指令生成裝置,還包括-被代入確定單元,確定所述第一處理指令中包含的所述被代入變量, 所述依賴處理指令生成單元,生成所述依賴處理指令,所述依賴處理指令,使所述計(jì)算機(jī)執(zhí)行依賴 于被代入到所述被代入確定單元所確定的所述被代入變量的數(shù)據(jù)的處理。
      11、 如權(quán)利要求1所述的指令生成裝置,其特征在于,所述指令生成裝置,還包括獲得單元,獲得輸入程序,該輸入程序包含所述第一處理指令、成為 所述第一處理指令的分支源的第一先行指令、成為所述第一處理指令的分 支目標(biāo)的第一后續(xù)指令、成為第一后續(xù)指令的分支目標(biāo)的第二處理指令、 以及成為所述第二處理指令的分支目標(biāo)的第二后續(xù)指令;條件分支指令生成單元,生成條件分支指令,該條件分支指令,使所 述處理路徑從所述第一處理指令分支到其它的指令,以使在滿足第一條件的情況下的所述第一處理指令的分支目標(biāo)、和在滿足第二條件的情況下的 所述第一處理指令的分支目標(biāo)不同;以及輸出單元,輸出包含所述第一處理指令、所述第一先行指令、所述第 一后續(xù)指令以及所述第二處理指令的輸出程序,所述依賴處理指令生成單元,生成所述依賴處理指令,所述依賴處理指令,在所述被代入變量的數(shù) 據(jù)示出預(yù)定的細(xì)節(jié)的情況下,使所述計(jì)算機(jī)導(dǎo)出與所述第二后續(xù)指令的執(zhí) 行結(jié)果相同的執(zhí)行結(jié)果,所述分支指令生成單元,生成所述分支指令,所述分支指令,使處理路徑從所述第二處理指令 分支到所述第一處理指令,以使所述計(jì)算機(jī)在執(zhí)行所述第二處理指令后再 次執(zhí)行所述第一處理指令,所述條件分支指令生成單元,生成所述條件分支指令,所述條件分支指令,在滿足所述第一條件的 情況下,使所述處理路徑從所述第一處理指令分支到所述第一后續(xù)指令, 在滿足所述第二條件的情況下,使所述處理路徑從所述第一處理指令分支 到所述依賴處理指令,所述輸出單元,輸出包含所述依賴處理指令、所述分支指令以及所述條件分支指令的 所述輸出程序,所述第一條件是,在所述第一處理指令由所述計(jì)算機(jī)執(zhí)行的情況下, 在執(zhí)行所述第一處理指令的緊前,所述第一先行指令被執(zhí)行,所述第二條 件是,在所述第一處理指令由所述計(jì)算機(jī)執(zhí)行的情況下,在執(zhí)行所述第一 處理指令的緊前,所述第二處理指令被執(zhí)行。
      12、如權(quán)利要求11所述的指令生成裝置,其特征在于,所述輸入程序中包含多個所述第一后續(xù)指令,所述條件分支指令生成單元,生成所述條件分支指令,所述條件分支 指令,在滿足所述第一條件的情況下,使所述處理路徑從所述第一處理指 令分支到多個第一后續(xù)指令中的按照第三條件的一個第一后續(xù)指令,從而 在所述第一處理指令被執(zhí)行后使所述第一后續(xù)指令被執(zhí)行,以作為分支目標(biāo)第一后續(xù)指令。
      13、 如權(quán)利要求12所述的指令生成裝置,其特征在于, 所述第三條件是,被代入到變量的值, 所述條件分支指令生成單元,生成所述條件分支指令,所述條件分支指令,根據(jù)示出是否滿足所述 第一條件的變量的值、和示出是否滿足所述第二條件的變量的值來使所述 處理路徑分支。
      14、 如權(quán)利要求ll所述的指令生成裝置,其特征在于,所述輸入程序中包含多個所述第二后續(xù)指令, 所述依賴處理指令,將所述多個第二后續(xù)指令分別變換為所述依賴處理指令, 所述條件分支指令生成單元,生成所述條件分支指令,所述條件分支 指令,在滿足所述第二條件的情況下,使所述處理路徑從所述第一處理指 令分支到所述多個第一后續(xù)指令中的按照第四條件的依賴處理指令,從而 在所述第一處理指令被執(zhí)行后使所述依賴處理指令被執(zhí)行,以作為分支目 標(biāo)依賴處理指令。
      15、 如權(quán)利要求14所述的指令生成裝置,其特征在于, 所述第四條件是,被代入到變量的值, 所述條件分支指令生成單元,生成所述條件分支指令,所述條件分支指令,根據(jù)示出是否滿足所述 第一條件的變量的值、和示出是否滿足所述第二條件的變量的值來使所述 處理路徑分支。
      16、 如權(quán)利要求ll所述的指令生成裝置,其特征在于, 所述指令生成裝置,還包括變量生成單元,生成所述輸入程序未使用的追加變量;以及條件值代入指令生成單元,在滿足所述第一條件的情況下,生成使所 述計(jì)算機(jī)將第一條件值代入到所述追加變量的第一條件值代入指令,在滿 足所述第二條件的情況下,生成使所述計(jì)算機(jī)將第二條件值代入到所述追 加變量的第二條件值代入指令,所述條件分支指令生成單元,生成條件分支指令,所述條件分支指令,在被代入到所述追加變量的 值是所述第一條件值的情況下,使所述處理路徑從所述第一處理指令分支 到所述第一后續(xù)指令,在被代入到所述追加變量的值是所述第二條件值的 情況下,使所述處理路徑從所述第一處理指令分支到所述依賴處理指令。
      17、 如權(quán)利要求ll所述的指令生成裝置,其特征在于, 所述第二后續(xù)指令以及所述依賴處理指令是,使用在所述第二處理指令被執(zhí)行完畢時獲得的執(zhí)行結(jié)果,來使所述計(jì)算機(jī)執(zhí)行相互同等的處理的 指令,所述指令生成裝置,還包括/。 itn A A iVi aU A /□ tin +匕A /□ Gn +匕八 t f- eGJi e_ ''、工田士匕'l木田tr目,"土/3乂平乂Li,'土P乂'I木田J日"T, R'I木田J日'7,1X/7I化先 處埋f日令被執(zhí)行之前,將在所述第二處理指令被執(zhí)行完畢時獲得的執(zhí)行結(jié)果保留; 以及恢復(fù)指令生成單元,生成恢復(fù)指令,該恢復(fù)指令,在所述第一處理指 令再次被執(zhí)行后,使所保留的執(zhí)行結(jié)果恢復(fù)。
      18、 如權(quán)利要求ll所述的指令生成裝置,其特征在于, 所述分支指令生成單元,生成所述分支指令,所述分支指令,在所述第一處理指令包含API的 情況下,檢索調(diào)用與所述API相同的API的指令,以作為所述第二后續(xù)指 令,并使處理路徑從成為所述第二后續(xù)指令的分支源的所述第二處理指令 分支到所述第一處理指令。
      19、 如權(quán)利要求l所述的指令生成裝置,其特征在于, 所述指令生成裝置,還包括獲得單元,獲得包含所述第一處理指令的輸入程序;以及 輸出單元,通過將所述分支指令生成單元以及所述依賴處理指令生成 單元所生成的所述分支指令以及所述依賴處理指令追加到所述輸入程序, 從而生成并輸出包含所述第一處理指令、所述分支指令以及所述依賴處理 指令的輸出程序。
      20、 一種程序,為了保護(hù)使計(jì)算機(jī)將數(shù)據(jù)代入到被代入變量的第一處 理指令,由使所述計(jì)算機(jī)執(zhí)行的多個指令構(gòu)成,其特征在于,所述程序包 括7分支指令,使處理路徑分支到所述第一處理指令,以使所述計(jì)算機(jī)執(zhí) 行所述第一處理指令;以及依賴處理指令,依賴于示出所述計(jì)算機(jī)根據(jù)所述分支指令執(zhí)行所述第 一處理指令的結(jié)果的、被代入到所述被代入變量的數(shù)據(jù),并在所述數(shù)據(jù)示 出預(yù)定的細(xì)節(jié)的情況下,使所述計(jì)算機(jī)執(zhí)行在所述輸出處理指令群以后應(yīng) 該進(jìn)行的預(yù)定的處理。
      21、 一種指令生成方法,為了保護(hù)使計(jì)算機(jī)將數(shù)據(jù)代入到被代入變量 的第一處理指令,而生成由使所述計(jì)算機(jī)執(zhí)行的多個指令構(gòu)成的輸出處理 指令群,其特征在于,所述指令生成方法包括分支指令生成步驟,生成分支指令,以作為所述輸出處理指令群的一 部分,所述分支指令,使處理路徑分支到所述第一處理指令,以使所述計(jì) 算機(jī)執(zhí)行所述第一處理指令;以及依賴處理指令生成步驟,生成依賴處理指令,以作為所述輸出處理指 令群的一部分,所述依賴處理指令,依賴于示出所述計(jì)算機(jī)根據(jù)所述分支 指令執(zhí)行所述第一處理指令的結(jié)果的、被代入到所述被代入變量的數(shù)據(jù), 并在所述數(shù)據(jù)示出預(yù)定的細(xì)節(jié)的情況下,使所述計(jì)算機(jī)執(zhí)行在所述輸出處 理指令群以后應(yīng)該進(jìn)行的預(yù)定的處理。
      22、 一種程序,為了保護(hù)使計(jì)算機(jī)將數(shù)據(jù)代入到被代入變量的第一處 理指令,而用于生成由使所述計(jì)算機(jī)執(zhí)行的多個指令構(gòu)成的輸出處理指令 群,其特征在于,所述程序包括分支指令生成步驟,生成分支指令,以作為所述輸出處理指令群的一 部分,所述分支指令,使處理路徑分支到所述第一處理指令,以使所述計(jì) 算機(jī)執(zhí)行所述第一處理指令;以及依賴處理指令生成步驟,生成依賴處理指令,以作為所述輸出處理指 令群的一部分,所述依賴處理指令,依賴于示出所述計(jì)算機(jī)根據(jù)所述分支 指令執(zhí)行所述第一處理指令的結(jié)果的、被代入到所述被代入變量的數(shù)據(jù), 并在所述數(shù)據(jù)示出預(yù)定的細(xì)節(jié)的情況下,使所述計(jì)算機(jī)執(zhí)行在所述輸出處 理指令群以后應(yīng)該進(jìn)行的預(yù)定的處理。
      23、 一種集成電路,為了保護(hù)使計(jì)算機(jī)將數(shù)據(jù)代入到被代入變量的第 一處理指令,而生成由使所述計(jì)算機(jī)執(zhí)行的多個指令構(gòu)成的輸出處理指令群,其特征在于,所述集成電路包括-分支指令生成單元,生成分支指令,以作為所述輸出處理指令群的一 部分,所述分支指令,使處理路徑分支到所述第一處理指令,以使所述計(jì) 算機(jī)執(zhí)行所述第一處理指令;以及依賴處理指令生成單元,生成依賴處理指令,以作為所述輸出處理指 令群的一部分,所述依賴處理指令,依賴于示出所述計(jì)算機(jī)根據(jù)所述分支 指令執(zhí)行所述第一處理指令的結(jié)果的、被代入到所述被代入變量的數(shù)據(jù), 并在所述數(shù)據(jù)示出預(yù)定的細(xì)節(jié)的情況下,使所述計(jì)算機(jī)執(zhí)行在所述輸出處 理指令群以后應(yīng)該進(jìn)行的預(yù)定的處理。
      全文摘要
      一種竄改防止處理生成裝置(100),是生成確實(shí)能夠保護(hù)保護(hù)對象代碼的程序的裝置,也是為了保護(hù)使執(zhí)行處理裝置(130)將數(shù)據(jù)代入到被代入變量的第一處理指令群(140)而生成使執(zhí)行處理裝置(130)執(zhí)行的輸出處理指令群(160),所述竄改防止處理生成裝置(100)包括分支處理指令群生成部(203),生成分支處理指令群(320),以作為輸出處理指令群(160)的一部分,所述分支處理指令群(320),使處理路徑分支到第一處理指令群(140),以使執(zhí)行處理裝置(130)執(zhí)行第一處理指令群(140);以及依賴處理指令群生成部(201),生成依賴處理指令群(330),以作為輸出處理指令群(160)的一部分,所述依賴處理指令群(330),使執(zhí)行處理裝置(130)執(zhí)行依賴于示出執(zhí)行處理裝置(130)根據(jù)分支處理指令群(320)執(zhí)行第一處理指令群(140)的結(jié)果的、被代入到被代入變量的值的處理。
      文檔編號G06F21/00GK101490693SQ20078002702
      公開日2009年7月22日 申請日期2007年7月18日 優(yōu)先權(quán)日2006年7月18日
      發(fā)明者佐藤太一, 淺井理惠子 申請人:松下電器產(chǎn)業(yè)株式會社
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1