JP4594475B2 - プログラム判別システム - Google Patents
プログラム判別システム Download PDFInfo
- Publication number
- JP4594475B2 JP4594475B2 JP2000034485A JP2000034485A JP4594475B2 JP 4594475 B2 JP4594475 B2 JP 4594475B2 JP 2000034485 A JP2000034485 A JP 2000034485A JP 2000034485 A JP2000034485 A JP 2000034485A JP 4594475 B2 JP4594475 B2 JP 4594475B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- data
- program data
- processing unit
- output
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Landscapes
- Storage Device Security (AREA)
Description
【発明の属する技術分野】
この発明は半導体記憶装置およびそれを用いるプログラム判別システムに関し、特にたとえばゲーム機用カートリッジのような、プログラムを記憶しているROM等の半導体記憶装置とそのプログラム判別システムに関する。
【0002】
【従来の技術】
たとえばゲーム機用カートリッジは、ゲームプログラムをROMのような半導体記憶装置に書き込んでおき、使用に際して、ゲーム機本体に装着される。特にこのようなゲーム機用カートリッジの場合、記憶内容であるゲームプログラムを不正にコピーした偽物が横行する。
【0003】
そこで、本件出願人は、先に、たとえば特開平2−31256号公報[G06F 12/14]に開示したように、真偽を判別して、真正なカートリッジではない場合、プログラムメモリへのアクセスを禁止するようにすることによって、ゲームプログラムや他のプログラムの不正な複製やデータの改変を防止できるシステムを提案した。
【0004】
この先行技術は、「アドレスデコード方式」を用いて、プログラムメモリから実際に読み出したデータを用いて真偽を判別するようにしているので、一定以上の高い信頼性で、偽物を排除できる。
【0005】
【発明が解決しようとする課題】
しかしながら、上で挙げた先行技術では、多数のアドレスをデコードする必要があるので、ゲート数が多くなり、チップサイズが大きくなってしまうばかりでなく、デコードすべきアドレスが解析されてしまえば、不正利用のプロテクト効果を失うというさらに解決すべき問題があった。
【0006】
それゆえに、この発明の主たる目的は、解析を困難にしてプロテクト効果を長続きさせることができる、半導体記憶装置およびそれを用いるプログラム判別システムを提供することである。
【0012】
この発明に従ったプログラム判別システムは、プログラム記憶装置と中央処理装置とを備えたプログラム判別システムであって、プログラム記憶装置は、プログラムデータを固定的に記憶するプログラムデータ記憶手段、第1プログラムデータを変換するためのビット変換演算コードを発生するコード発生手段、および中央処理装置から出力されるアドレスデータに従ってプログラムデータ記憶手段から読み出された第1プログラムデータを受ける出力データ処理手段を備え、出力データ処理手段は、中央処理装置から制御信号が与えられたときにコード発生手段から発生されるビット変換演算コードに基づいて第1プログラムデータの少なくとも一部にビット変換演算を施した新たな第2プログラムデータを出力してその第2プログラムデータを中央処理装置に与え、中央処理装置から制御信号が与えられないときに第1プログラムデータを出力してその第1プログラムデータを中央処理装置に与え、中央処理装置は、第2プログラムデータと予め設定されているチェックデータとの比較によって両者が所定の関係にあるか否かを判断してプログラム記憶装置が真正品かどうかを判別する判断手段を備え、出力データ処理手段は、それぞれ異なる種類の演算を実行できるかつそれぞれが第1プログラムデータの少なくとも一部とビット変換演算コードとを演算してそれぞれ異なる第2プログラムデータを出力するための複数の演算器、および制御信号が与えられたときに第2プログラムデータを出力しかつ制御信号が与えられないときに第1プログラムデータを出力する選択器を備え、コード発生手段はさらに複数の演算器のいずれかを選択する演算器選択コードを発生し、選択器は演算器選択コードによって選択された演算器に関連する第2プログラムデータ、または第1プログラムデータを選択する、プログラム判別システムである。
【0013】
中央処理装置は、判断手段の判別の結果が偽物のプログラム記憶装置であることを示すとき、プログラムを強制的に終了させるプログラム強制終了手段をさらに備える。
【0014】
【作用】
半導体記憶装置においては、プログラムデータ記憶手段から読み出された特別プログラムデータに応答して中央処理装置から出力される制御信号が出力データ処理手段に与えられたとき、出力データ処理手段は、コード発生手段からのデータ演算コードに基づいて第1プログラムデータの全ビットまたは一部のビットに演算を施した第2プログラムデータを出力して、その第2プログラムデータをたとえば中央処理装置に与える。具体的には、出力データ処理手段の演算手段が第1プログラムデータとデータ演算コードとを演算して第2プログラムデータを出力し、選択器が制御信号に応答して第2プログラムデータを出力する。したがって、出力データ処理手段からは、制御信号に応答して、中央処理装置から出力されたアドレスデータに従って読み出された第1プログラムデータではなく、その第1プログラムデータを修飾処理した第2プログラムデータが出力される。
【0015】
中央処理装置では、第2プログラムデータが予め設定してあるチェックデータと一致するかどうか判断手段で判断する。両データが一致すると、判断手段は、そのときの半導体記憶装置(プログラムROM)が真正なものであると判断する。両データが不一致のときには、半導体記憶装置は偽物であるので、プログラムを強制的に終了する。
【0016】
したがって、プログラムデータ記憶手段に格納されているすべてのプログラムデータをコピーしたとしても、この発明の出力データ処理手段がない場合には、プログラムチェックの結果偽物と判断されるので、プログラムの実行は不可能である。
【0019】
【発明の効果】
この発明によれば、プログラムデータ記憶手段のすべてのプログラムデータをコピーしただけでは、出力データ処理手段における複数の演算器やビット変換演算コードなどのすべての要素が解析できなければ、そのプログラムデータを真正品と同様には実行できないので、プログラムの不正利用を有効に防止できる。
【0020】
したがって、ビット変換演算コードなどの要素を機種毎にあるいはバージョン毎に変更するようにすれば、ある1つのプログラム記憶装置の全要素が解析できたとしても、その解析結果を別のプログラム記憶装置にそのまま適用できないので、不正に利用しようとする者は、変更の都度新たに解析する必要がある。解析に膨大な時間と設備が必要なことを考えれば、プロテクト効果を長続きさせることができる。
【0021】
この発明の上述の目的,その他の目的,特徴,および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【0022】
【実施例】
図1に示すこの発明の一実施例の情報処理装置10は、中央処理装置であるCPU12を含み、このCPU12に、出力装置である表示装置14および入力装置である操作入力装置16が接続される。情報処理装置10はプログラム判別システムを構成し、その情報処理装置10がゲーム装置である場合、操作入力装置16はゲームコントローラであり、ジョイスティックや十字キーあるいは各種操作ボタンを含み、ゲーム装置に搭載されたCPU12は、そのような操作入力装置16の操作に応答して、プログラムROM18に記憶されているゲームプログラムを処理することによって、たとえばテレビジョンモニタや液晶ディスプレイである表示装置14にゲーム画像を表示する。なお、CPU12に接続されたワークメモリ20は、たとえばCPU12の内部RAMや外付けRAM等で構成され、上述のプログラム処理の過程において必要に応じて利用されるとともに、後述のプログラム真偽判別のためのチェック用プログラムおよびチェックデータを一時的に格納するために利用される。ワークメモリ20とCPU12の内部RAMとを利用することで、プログラムの解析をより困難にすることができる。
【0023】
半導体記憶装置あるいはプログラム記憶装置として機能するプログラムROM18は、たとえばPROM,フラッシュROM,EPROM,EEPROM等のプログラムデータを固定的に記憶しておく読出し専用半導体メモリである。このプログラムROM18は、従来のプログラムROMと呼ばれるものに相当するメモリコアであるプログラムデータ記憶部22に加えて、さらに出力データ処理部24およびコード記憶部26を含む。そして、この実施例では、プログラムデータ記憶部22,出力データ処理部24およびコード記憶部26は、同じ半導体チップ上に設けられる。そして、アドレスバスを通じてCPU12から出力されたアドレスデータはプログラムデータ記憶部22に与えられる。プログラムデータ記憶部22は、そのアドレスデータに従ってプログラムデータを読み出し、出力データ処理部24に与える。出力データ処理部24は、プログラムデータ記憶部22から読み出されたプログラムデータを処理して、それをデータバスを通してCPU12に出力する。
【0024】
なお、出力データ処理部24は、後に説明するように、制御バスを通じてCPU12から与えられる制御信号とコード記憶部26から与えられるコード(データ)とに基づいて、出力プログラムデータを処理する。
【0025】
図2に出力データ処理部24の具体的な一例が示される。図2に示すように、出力データ処理部24は、演算手段として機能する演算器28と、選択器30とを含む。演算器28は、プログラムROM18のチップ内に形成されたもので、たとえば乗算器,除算器,減算器,加算器,シフトレジスタあるいはその他の簡単な論理演算器(たとえばAND,NAND,OR,NOR,EX-OR等)である。
【0026】
プログラムデータ記憶部22から読み出されたたとえば8ビットの第1プログラムデータD0〜D7内の上位4ビットD4〜D7はそのまま選択器30の出力データと合成され、下位4ビットD0〜D3は演算器28の一方入力および選択器30の一方入力(Y)として与えられる。演算器28の他方入力には、コード発生手段として機能するコード記憶部26に設定されている4ビットのデータ演算コードd0〜d3が与えられる。演算器28は、2つの入力について上述の種類のいずれかの演算を実行し、その出力が選択器30の他方入力(X)として与えられる。たとえば演算器28がANDであった場合、演算器28は、データ演算コードd0〜d3と下位4ビットD0〜D3との論理積の結果D0´〜D3´を出力して選択器30の上述の他方入力に与える。
【0027】
選択器30には、先に述べた制御信号、たとえば書き込み信号がCPU12から与えられる。したがって、選択器30は、その制御信号すなわち書き込み信号に応答して他方入力(X)を選択し、第1プログラムデータD0〜D7内の下位4ビットD0〜D3を演算結果D0´〜D3´に置き換えて出力する。プログラムデータ記憶部22から読み出された第1プログラムデータD0〜D7の上位4ビットD4〜D7は上述のようにそのまま選択器30の出力に結合されているので、結果的に、選択器30すなわち出力データ処理部24からは、D0´〜D3´+D4〜D7の合計8ビットの第2プログラムデータが出力される。
【0028】
なお、CPU12から書き込み信号が選択器30に与えられていないときには、選択器30では、一方入力(Y)が選択されているので、プログラムデータの下位4ビットD0〜D3がそのまま選択器30から出力され、結果的に、出力データ処理部24からは、D0〜D3+D4〜D7の合計8ビットのプログラムデータすなわち第1プログラムデータがそのまま出力される。
【0029】
このようにして、後述の図5のステップS12では、CPU12へは、第1プログラムデータD0〜D7ではなく、第2プログラムデータD0´〜D3´+D4〜D7が出力される。一方、出力データ処理部24がない偽プログラムROMの場合には、プログラムデータ記憶部22から読み出されたままの第1プログラムデータD0〜D7がCPU12へ出力される。したがって、前者の場合にCPU12へ入力される第2プログラムデータは予め設定しているチェックデータと一致するが、後者の場合の第1プログラムデータはチェックデータと一致しない。
【0030】
なお、図2の実施例では、プログラムデータの下位4ビットだけを演算器28において演算コードと演算し、上位4ビットはそのまま出力するようにした。しかしながら、第1プログラムデータの全8ビットを演算器28で演算するようにしてもよい。この場合、図2において括弧書きで示されているように、プログラムデータ記憶部22から読み出したままの第1プログラムデータD0〜D7の全8ビットがそのまま演算器28の一方入力に与えられ、他方入力にはコード記憶部26からの8ビットのデータ演算コードd0〜d7が与えられる。したがって、演算器28からは、すべてのビットが修飾処理された第2プログラムデータD0'〜D7'が出力され、この第2プログラムデータD0'〜D7'が選択器30の入力(X)として与えられ、選択器30の入力(Y)としては第1プログラムデータD0〜D7が与えられる。したがって、選択器30からは、制御信号があるとき第2プログラムデータD0'〜D7'が出力され、制御信号がないとき第1プログラムデータD0〜D7が出力される。したがって、図5のステップS13では、第2プログラムデータD0'〜D7'の適否が判断される。
【0031】
図1のCPU12は、図3に示すメモリマップを有し、たとえば「0000h〜DFFFh」のメモリ空間がプログラムROM18に割り当てられたプログラム領域であり、「E000h〜FFFFh」がワークメモリ20に割り当てられたワーク領域である。
【0032】
プログラムROM18のプログラムデータ記憶部22は上述のプログラム領域の一部であり、プログラム領域には、さらにプログラム常駐エリア,チェック用プログラムエリアおよびチェック開始命令エリアが設定されている。チェック用プログラムエリアに格納されているチェック用プログラムは、後述の図4および図5のフロー図で実現できるものである。
【0033】
また、チェック用プログラムには、1つまたは複数のチェックデータが設定されている。このチェックデータは、チェック用プログラムを実行したときの結果が示すデータと比較してプログラムの真偽を判別するためのデータである。たとえば、この実施例では、プログラムの真偽を1回だけチェックする場合について説明するので、図3に図示するようにチェック用プログラム内に1つのチェックデータを設定しているが、単一のチェックデータを利用するチェック用プログラムを起動させるチェック開始命令を本体プログラム(たとえばゲームプログラム)内の複数箇所に設定したり、複数のチェックデータを利用する複数のチェック用プログラムをそれぞれ起動させるチェック開始命令を複数箇所に設定することによって、プログラムの真偽を複数回チェックさせて、プログラムの解析の困難性を高めることができる。
【0034】
さらに、チェック用プログラムが比較的小さい(たとえば数から数十バイト)場合には、チェック開始命令の代わりに、本体プログラム内の複数箇所にチェック用プログラムを設定することが、チェック用プログラムの解析の困難性を高める上でより好ましい。
【0035】
図4を参照して、情報処理装置10(図1)の電源(図示せず)をオンすると、CPU12によって、ステップS1がまず実行される。このステップS1では、CPU12は、プログラムROM18(図1)の出力データ処理部24から出力されるプログラムデータを読み込む。このとき、このとき、CPU12は制御信号を出力していないので、出力データ処理部24からは、プログラムデータ記憶部22から出力された第1プログラムデータ前記がそのまま出力される。CPU12は、その第1プログラムデータを読み込む。そして、その第1プログラムデータがプログラムの真偽チェックの実行を指示する特別プログラムデータであるかどうかが、ステップS2で判断される。
【0036】
ステップS2で“NO”、つまりそのときのプログラムデータが真偽チェックを命令するものでなかったときは、ステップS3でそのときのプログラムデータ(すなわち、他のプログラムのデータ)に従った処理を実行する。ステップS3の後ステップS4において、CPU12は、プログラムの終了かどうかを判断し、もし“YES”であればそのまま終了し、“NO”であれば、先のステップS1に戻る。このようにして、ステップS1〜S4を繰り返すことにより、プログラムデータ記憶部22に記憶されているプログラムを順次実行する。この状態においては、アドレス処理部22の選択器30には制御信号(たとえば書き込み信号)が付与されていないので、選択器30では入力(Y)が選択された状態で保持されている。したがって、CPU12から出力された第1プログラムデータがそのままプログラム記憶部22に与えられる。
【0037】
ステップS1〜S4を繰り返すことによってプログラムに含まれる各命令を順次実行している途中に、チェック用プログラムを実行するための命令がCPU12に入力されると、そのことがステップS2で判断されて、ステップS5に進む。その命令すなわち特別プログラムデータが図3に示すようにたとえばアドレス「030Eh」に設定されている場合には、CPU12は、アドレスがこの「030Eh」まできたときに、ステップS5に進むことになる。
【0038】
ステップS5では、CPU12は、図2に示すプログラム領域に設定されているチェック用プログラムおよびチェックデータを読み込んで、ワークメモリ20に書き込む(複製する)。したがって、ステップS6は、ワークメモリ20に複製されたチェック用プログラムおよびチェックデータに従って、実行される。ただし、このワークメモリ20に複製されたチェック用プログラムは、チェック終了後、ワークメモリ20から消去される。
【0039】
ステップS6のサブルーチンの詳細を図5に示す。図5のステップS11では、CPU12は、まず、制御バスを介して制御信号を発生して、図1に示すプログラムROM18に含まれる出力データ処理部24を能動化する。具体的には、CPU12は、制御バスを通してプログラムROM18の選択器30に書き込み信号(制御信号)を与える。ROM内のプログラムを実行中に書き込み信号がROM(読出し専用メモリ)に与えられることは通常ないので、その信号をプログラムROM18に出力することによって、出力データ処理部24の選択器30における入力(X)を選択させることにしている。このステップS11が制御信号付与手段を構成する。
【0040】
続くステップS12では、CPU12は、プログラムROM18のプログラムデータ記憶部22を読み出すためのアドレスデータを出力する。つまり、ステップS11で制御信号を出力した直後に、アドレス入力手段として機能するステップS12で任意のアドレスデータがCPU12からアドレスバスを通してプログラムデータ記憶部22に入力される。プログラムデータ記憶部22は、そのアドレスデータに従ってプログラムデータを読出し、それを出力データ処理部24に与える。出力データ処理部24には先に制御信号が与えられているので、出力データ処理部24は、第1プログラムを先に図2実施例で説明したようにして処理し、その処理結果である第2プログラムデータをCPU12に与えることになる。
【0041】
そして、ステップS13では、CPU12は、出力データ処理部24で処理された第2プログラムデータが正しい値であるかどうか判断する。すなわち、ステップS13は判断手段を構成し、ワークメモリ20に読み出されているチェックデータと、そのときの第2プログラムデータとが比較され、両者が一致するかどうか判断する。出力データ処理部24で所定の法則に従って処理された第2プログラムデータは、予め設定しているチェックデータと一致する筈である。したがって、この場合、“YES”となる。しかしながら、出力データ処理部24が設けられていない偽物のプログラムROMである場合、または出力データ処理部24に相当するものが存在していても出力プログラムデータ処理が所定の法則に則っていない偽物プログラムROMの場合には、このステップS13では“NO”と判断される。
【0042】
そして、ステップS13で“YES”と判断された真正プログラムROMの場合には、通常のプログラム処理にリターンする。他方、“NO”と判断された偽プログラムROMの場合、次のステップS14において、CPU12は、表示装置14(図1)にたとえば「このプログラムROM(カートリッジ)は偽物であり、本機では使用できません。」のような警告メッセージを表示するとともに、ステップS15でプログラムを強制的に終了する。したがって、偽物の場合、それ以上のプログラムの続行処理が不可能となる。つまり、ステップS14およびS15がプログラム強制終了手段に該当する。
【0043】
なお、上の説明では、判断手段であるステップS13で、第2プログラムデータと予め設定しているチェックデータとが一致するかどうか比較しているが、両者が必ずしも一致する必要はなく、両者が予め設定している所定の関係にあればよい。たとえば、一方が他方に比べて一定数だけ大きいかまたは小さいかの関係、あるいは一方(および/または他方)に一定の演算を施したとき両者が一致する関係、あるいは両者の絶対値が等しい関係等、任意の所定関係を設定することができる。
【0044】
図2実施例においても、プログラムデータは適宜の設備を用いればプログラムデータ記憶部22から完全な形でプログラムデータを読出し、それをコピーできる。しかしながら、図2実施例では、プログラムデータ記憶部22からプログラムデータを吸い上げてプログラムデータを復元するだけでは、そのプログラムデータを真正品と同様には、実行できない。
【0045】
つまり、プログラムデータだけを復元しても、このプログラムROM18のプログラムデータを不正に利用する者のメモリに出力データ処理部24やコード記憶部26がない場合、プログラムチェックを指示するプログラムデータが読み出されても、上述のプログラムデータの修飾処理が実行できないので、未修飾の第1プログラムデータD0〜D7がそのままCPU12に入力される。したがって、そのチェック命令があっても、第1プログラムデータD0〜D7がそのままCPU12に入力されることになる。この場合の第1プログラムデータは、図2実施例で得られた第2プログラムデータD0´〜D3+D4〜D7とは異なる。したがって、ステップS13で予め設定されているチェックデータとの比較において、不一致となってしまう。この不一致の判別結果が得られると、ステップS13で“NO”が判断されるので、プログラムが強制的に終了されてしまう。
【0046】
そのようなプログラムの強制終了を回避するようにするためには、図4のステップS2でチェック開始を指令する特別プログラムデータおよびそれのプログラムステップ(アドレス)を解析し、さらに演算器28における演算の種類やデータ演算コードおよびチェックプログラムに設定するチェックデータ(図2)等のすべての要素を解析しなければならない。たとえばマスクROM等でプログラムROM18を作った場合、そのような解析は困難で、解析にはかなり大掛かりな設備と長時間を要する。他方、演算器における演算の種類やデータ演算コード等の要素をたとえばプログラムROMの機種、ゲームカートリッジでいえばゲームタイトル毎、さらには同じ機種(ゲームタイトル)でもバージョン毎に変更するようにすれば、ある1つのプログラムROMの全てのセキュリティ要素が解析されたとしても、その解析結果を別のプログラムROMにそのまま適用できないので、不正に利用しようとする者は、その都度新たに全要素を解析する必要がある。したがって、この実施例によれば、解析に膨大な時間や費用がかかることを考慮すれば、プログラムROMの不正利用を実質的にできなくすることができる。
【0047】
図6は図2実施例の変形例であり、図6実施例では、出力データ処理部24の演算手段は、複数(n個)の演算器281〜28nを含む。各演算器281〜28nのそれぞれの一方入力にプログラムデータ記憶部22から読み出された第1プログラムデータの下位4ビットD0〜D3が与えられ、それぞれの他方入力には、コード記憶部26から出力される4ビットのデータ演算コードd0〜d3が共通に与えられる。さらに、コード記憶部26に設定されている演算器選択コードc0〜cXが制御信号とともに、選択器30に与えられる。演算器選択コードc0〜cXのビット数は、演算器の個数nに応じて設定され、4つの演算器28がある場合には、2ビットであり、8つの場合は3ビットでよい。そして、演算器選択コードc0〜cXは、複数の演算器281〜28nのいずれか1つを選択するように設定されている。
【0048】
図6実施例においても各演算器281〜28nは図2実施例の演算器28と同様にプログラムデータを演算ないし修飾するので、このプログラムデータ演算の具体的な説明は省略するが、図6実施例では、演算器281〜28nのそれぞれが異なる種類の演算を実行するように設定される。したがって、たとえばプログラムROMの機種(ゲームタイトル)毎に、あるいはバージョン毎に、演算器選択コードc0〜cXによって異なる演算器を選択するようにすると、図2で説明したプログラムの解析の困難性が一層増す。したがって、不正利用をさらに困難にする。
【0049】
この図6の実施例では、さらに別の利点がある。すなわち、図2実施例のように1つのチップに1つの演算器だけを形成しておき、機種やバージョンによってその演算器を変更する場合、プログラムROMがたとえばマスクROMであるときには、演算器の変更の都度、焼き付けマスクを変更しなければならない。これに対して、図6実施例のように、複数の演算器281〜28nを組み込んでおけば、演算器選択コードを変えるだけで、演算器すなわち演算の種類を選択できる。他方、演算器選択コードは、データ演算コードと同じ焼き付け工程で設定できるので、図6実施例では、演算器を変更する場合に、プログラムROMを安価に作れる。
【0050】
図6実施例においても、選択器30は、制御信号が与えられているときには入力(X)を選択し、与えられていないときには入力(Y)を選択するので、制御信号の有無に応じて、第1プログラムデータまたは第2プログラムデータが出力される。また、図6においても第1プログラムデータD0〜D7のすべてのビットを修飾処理する場合を括弧書きで示す。ただし、その動作は、先の図2実施例の説明から容易に理解されるであろうから、ここでは省略する。
【0051】
なお、上述の実施例では、出力データ処理部24からは制御信号があるとき演算器28(281〜28n)で一部または全部を演算したプログラムデータ(第2プログラムデータ)を出力し、制御信号がないときプログラムデータ記憶部22から読み出されたプログラムデータ(第1プログラムデータ)そのままを選択して出力するようにしている。しかしながら、制御信号がないとき、第1プログラムデータに対して第2プログラムデータとは異なる第2の演算を施した第3プログラムデータを出力するようにしてもよい。
【0052】
このような実施例が図7に示される。図7実施例では、図2実施例と同様の演算器28や選択器30の他に、第2演算器28'が出力データ処理部24に設けられる。そして、演算器28および28'のそれぞれの一方入力には、プログラムデータ記憶部22から読み出したプログラムデータD0〜D7(第1プログラムデータ)の下位4ビットD0〜D3がそのまま与えられる。演算器28および28'の他方入力には、コード記憶部26に設定されている4ビットのデータ演算コードd0〜d3が共通的に与えられる。演算器28および28'は、互いに異なる第1の種類の演算および第2の種類の演算を実行できるようにされている。
【0053】
演算器28は、データ演算コードd0〜d3と下位4ビットD0〜D3との第1の演算結果D0'〜D3'を出力して選択器30の入力(X)に与える。演算器28'は、データ演算コードd0〜d3と下位4ビットD0〜D3との第2の演算結果D0''〜D3''を出力して選択器30の入力(Y)に与える。このような演算器28および28'からの入力D0'〜D3'またはD0''〜D3''が選択器30によって選択される。
【0054】
選択器30には、制御信号、たとえば書き込み信号がCPU12から与えられるとともに、コード記憶部26に記憶されている演算器選択コードc0〜cXが与えられる。したがって、選択器30は、その制御信号があるときには、演算器28の出力すなわち入力(X)を選択し、その演算器28によって処理された下位4ビットのプログラムデータD0'〜D3'を出力する。選択器30は、また、制御信号がないときには、演算器28'の出力すなわち入力(Y)を選択し、その演算器28'によって処理された下位4ビットのプログラムデータD0''〜D3''を出力する。
【0055】
他方、第1プログラムデータD0〜D7の上位4ビットD4〜D7がそのまま選択器30の出力に結合されているので、結果的に、制御信号があるときには、選択器30すなわち出力データ処理部24からは、D0'〜D3'+D4〜D7の合計8ビットのプログラムデータ(第2プログラムデータ)が出力され、制御信号がないときには、選択器30すなわち出力データ処理部24からは、D0''〜D3''+D4〜D7の合計8ビットのプログラムデータ(第3プログラムデータ)が出力される。
【0056】
ただし、この図7の実施例においても、図7に括弧書きしたように、プログラムデータD0〜D7のすべてのビットを演算器28および演算器28'によって演算するようにしてもよい。
【0057】
図7実施例では、プログラムデータ記憶部22から読み出された第1プログラムデータD0〜D7は、CPU12が正規に実行しようとするプログラムデータではない。つまり、第1プログラムデータは、偽のプログラムデータに過ぎない。そして、第1演算器28および第2演算器28'のいずれか一方が、CPU12によって正規に実行されるべき第2プログラムデータまたは第3プログラムデータになるように、第1プログラムデータD0〜D7を変更ないし変換することになる。つまり、第2プログラムデータまたは第3プログラムデータのいずれか一方が正しいプログラムデータである。
【0058】
図7実施例では、プログラムを不正利用しようとする場合、第1演算器28だけでなく第2演算器28'についても解析する必要があり、解析の困難性をさらに増大させる。
【0059】
上述の実施例は、プログラムROM18に出力データ処理部24を設け、プログラムデータ記憶部22から読み出されたプログラムデータを加工ないし修飾するものであった。しかしながら、同様の考え方をプログラムデータ記憶部22に与えられるアドレスデータに適用し、プログラムデータとともにアドレスデータも加工ないし修飾処理することも可能である。
【0060】
そのようにするための実施例では、プログラムROM18には、プログラムデータ記憶部22の他に、図1実施例に示す出力データ処理部24およびコード記憶部26を含み、さらに、CPU12からアドレスバスを介して出力されるアドレスデータを受け、そのアドレスデータに所定の処理を施すアドレス処理部(図示せず)を設ける。このアドレス処理部は、具体的には、上で説明した出力データ処理部24と同様の動作を実行して、CPU12から出力されてプログラムデータ記憶部22に与えるべきアドレスデータを処理ないし修飾する。この場合、CPU12からの制御信号は、出力データ処理部24およびアドレス処理部の両方に与えられ、図5のステップS11で出力データ処理部24およびアドレス処理部がともに能動化される。そして、アドレス処理部では、CPU12から出力されるアドレスデータを加工または修飾して、プログラムデータ記憶部22に与える。したがって、図5のステップS13でCPU12に入力されるのは、アドレス処理部で処理されたアドレスデータに従ってプログラムデータ記憶部22から読み出されかつ出力データ処理部24で処理されたプログラムデータである。
【0061】
なお、いずれの実施例においても、コード発生手段としてプログラムROM18と同じチップに形成されたコード記憶部26を用いている。しかしながら、このコード発生手段は、任意のコード(データ)を演算手段に与えられるものであればよく、たとえばディップスイッチ等によって任意のデータを与える構成や任意のデータを外部から書き換え可能に記憶する外付けのフラッシュROMなどに置き換えてもよい。
【0062】
さらに、上述の実施例では、偽プログラムであった場合にはプログラムの実行を直ちに強制終了させたが、たとえば、一定時間後に強制終了させたり、ゲームの場合には、キャラクタのパラメータを書き換えたり、ゲームのバックアップデータを消去したり、ゲームを初期の状態に戻したりするような処理にすることもできる。
【図面の簡単な説明】
【図1】この発明の一実施例を示すブロック図である。
【図2】図1実施例の出力データ処理部の一例を示すブロック図である。
【図3】図1におけるCPUのメモリマップを示す図解図である。
【図4】図1実施例の動作を示すフロー図である。
【図5】図4フロー図のチェック用プログラムを示すフロー図である。
【図6】出力データ処理部の変形例を示すブロック図である。
【図7】出力データ処理部の他の変形例を示すブロック図である。
【符号の説明】
10 …情報処理装置
12 …CPU
18 …プログラムROM
20 …ワークメモリ
22 …プログラムデータ記憶部
24 …出力データ処理部
26 …コード記憶部
28,281〜28n,28´ …演算器
30 …選択器
Claims (3)
- プログラム記憶装置と中央処理装置とを備えたプログラム判別システムであって、
前記プログラム記憶装置は、
プログラムデータを固定的に記憶するプログラムデータ記憶手段、
第1プログラムデータを変換するためのビット変換演算コードを発生するコード発生手段、および
前記中央処理装置から出力されるアドレスデータに従って前記プログラムデータ記憶手段から読み出された前記第1プログラムデータを受ける出力データ処理手段を備え、
前記出力データ処理手段は、前記中央処理装置から制御信号が与えられたときに前記コード発生手段から発生される前記ビット変換演算コードに基づいて前記第1プログラムデータの少なくとも一部にビット変換演算を施した新たな第2プログラムデータを出力してその第2プログラムデータを前記中央処理装置に与え、前記中央処理装置から制御信号が与えられないときに前記第1プログラムデータを出力してその第1プログラムデータを前記中央処理装置に与え、
前記中央処理装置は、前記第2プログラムデータと予め設定されているチェックデータとの比較によって両者が所定の関係にあるか否かを判断して前記プログラム記憶装置が真正品かどうかを判別する判断手段を備え、
前記出力データ処理手段は、それぞれ異なる種類の演算を実行できるかつそれぞれが前記第1プログラムデータの少なくとも一部と前記ビット変換演算コードとを演算してそれぞれ異なる前記第2プログラムデータを出力するための複数の演算器、および前記制御信号が与えられたときに前記第2プログラムデータを出力しかつ前記制御信号が与えられないときに前記第1プログラムデータを出力する選択器を備え、
前記コード発生手段はさらに前記複数の演算器のいずれかを選択する演算器選択コードを発生し、
前記選択器は前記演算器選択コードによって選択された演算器に関連する前記第2プログラムデータ、または前記第1プログラムデータを選択する、プログラム判別システム。 - 前記プログラム記憶装置は、前記プログラム記憶手段に予め設定している前記プログラム記憶装置が真正品かどうかを判別するためのチェック用プログラムを含み、前記中央処理装置は、前記チェック用プログラムが読み出されたタイミングで前記制御信号を付与し、前記判断手段は、前記チェック用プログラムを用いて、前記第2プログラムデータと前記チェックデータとの比較によって両者が所定の関係にあるか否かを判断して前記プログラム記憶装置が真正品であるかどうかを判別する、請求項1記載のプログラム判別システム。
- 前記中央処理装置は、前記判断手段の判別の結果が偽物のプログラム記憶装置であることを示すとき、プログラムを強制的に終了させるプログラム強制終了手段をさらに備える、請求項1または2記載のプログラム判別システム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000034485A JP4594475B2 (ja) | 2000-02-14 | 2000-02-14 | プログラム判別システム |
TW089126552A TW509844B (en) | 2000-02-14 | 2000-12-13 | Semiconductor memory device and program discrimination system |
CN01104578.7A CN1309356A (zh) | 2000-02-14 | 2001-02-14 | 半导体存储器和程序判别系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000034485A JP4594475B2 (ja) | 2000-02-14 | 2000-02-14 | プログラム判別システム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001222423A JP2001222423A (ja) | 2001-08-17 |
JP4594475B2 true JP4594475B2 (ja) | 2010-12-08 |
Family
ID=18558823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000034485A Expired - Lifetime JP4594475B2 (ja) | 2000-02-14 | 2000-02-14 | プログラム判別システム |
Country Status (3)
Country | Link |
---|---|
JP (1) | JP4594475B2 (ja) |
CN (1) | CN1309356A (ja) |
TW (1) | TW509844B (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009095493A1 (en) * | 2008-02-01 | 2009-08-06 | Thomson Licensing | Copy-protected software cartridge |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS638937A (ja) * | 1986-06-30 | 1988-01-14 | Nec Corp | シングルチツプマイクロコンピユ−タ |
JPH0231256A (ja) * | 1988-07-21 | 1990-02-01 | Nintendo Co Ltd | 外部メモリとそれを用いる情報処理装置 |
JPH0436834A (ja) * | 1990-05-31 | 1992-02-06 | Sharp Corp | ワンチップマイクロコンピュータ |
JPH04102920A (ja) * | 1990-08-22 | 1992-04-03 | Nec Corp | 情報処理装置 |
JPH0644141A (ja) * | 1992-07-24 | 1994-02-18 | Nec Corp | メモリ情報読出方式 |
JPH07141153A (ja) * | 1993-06-25 | 1995-06-02 | J T:Kk | 制御装置 |
JPH08110876A (ja) * | 1994-10-11 | 1996-04-30 | Hitachi Maxell Ltd | 増設メモリ装置 |
JPH09282234A (ja) * | 1996-04-12 | 1997-10-31 | Kawasaki Steel Corp | コピー防止機能付rom |
JPH10240519A (ja) * | 1997-02-27 | 1998-09-11 | Takasago Electric Ind Co Ltd | 電子遊戯機用制御装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02212952A (ja) * | 1989-02-14 | 1990-08-24 | Fujitsu Ltd | メモリアクセス制御方式 |
JPH03237235A (ja) * | 1990-02-13 | 1991-10-23 | Nissan Motor Co Ltd | エンジン出力制御装置 |
JPH0844553A (ja) * | 1994-08-03 | 1996-02-16 | Nri & Ncc Co Ltd | 公開部分と非公開部分を有するソフトウェアを複数ユーザに使用させるシステム |
JPH11272570A (ja) * | 1998-03-24 | 1999-10-08 | Nec Ic Microcomput Syst Ltd | 半導体集積回路 |
-
2000
- 2000-02-14 JP JP2000034485A patent/JP4594475B2/ja not_active Expired - Lifetime
- 2000-12-13 TW TW089126552A patent/TW509844B/zh not_active IP Right Cessation
-
2001
- 2001-02-14 CN CN01104578.7A patent/CN1309356A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS638937A (ja) * | 1986-06-30 | 1988-01-14 | Nec Corp | シングルチツプマイクロコンピユ−タ |
JPH0231256A (ja) * | 1988-07-21 | 1990-02-01 | Nintendo Co Ltd | 外部メモリとそれを用いる情報処理装置 |
JPH0436834A (ja) * | 1990-05-31 | 1992-02-06 | Sharp Corp | ワンチップマイクロコンピュータ |
JPH04102920A (ja) * | 1990-08-22 | 1992-04-03 | Nec Corp | 情報処理装置 |
JPH0644141A (ja) * | 1992-07-24 | 1994-02-18 | Nec Corp | メモリ情報読出方式 |
JPH07141153A (ja) * | 1993-06-25 | 1995-06-02 | J T:Kk | 制御装置 |
JPH08110876A (ja) * | 1994-10-11 | 1996-04-30 | Hitachi Maxell Ltd | 増設メモリ装置 |
JPH09282234A (ja) * | 1996-04-12 | 1997-10-31 | Kawasaki Steel Corp | コピー防止機能付rom |
JPH10240519A (ja) * | 1997-02-27 | 1998-09-11 | Takasago Electric Ind Co Ltd | 電子遊戯機用制御装置 |
Also Published As
Publication number | Publication date |
---|---|
TW509844B (en) | 2002-11-11 |
JP2001222423A (ja) | 2001-08-17 |
CN1309356A (zh) | 2001-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6009523A (en) | Information processing apparatus with security checking function | |
JP4160625B1 (ja) | 誤り検出制御システム | |
US6745278B2 (en) | Computer capable of rewriting an area of a non-volatile memory with a boot program during self mode operation of the computer | |
US20090241200A1 (en) | Security memory device and method for making same | |
CN111563237B (zh) | 一种智能合约安全增强方法 | |
US20130091394A1 (en) | Data processing apparatus and validity verification method | |
US6571347B1 (en) | Apparatus and method for intelligent computer initiation program recovery | |
JP2008217799A (ja) | 処理システムおよび情報をram構体で読取りおよび復元する方法 | |
EP3574426A1 (en) | Method to secure a software code | |
JP4594475B2 (ja) | プログラム判別システム | |
US20070234244A1 (en) | System and method for checking equivalence between descriptions | |
US6578132B1 (en) | Semiconductor storage device and program authenticity determining system | |
WO2006040798A1 (ja) | 半導体集積回路装置および電子システム | |
JP2004287541A (ja) | 不揮発性メモリのアクセス制御システム | |
US4507743A (en) | Calculation system utilizing definable keys | |
JP3924568B2 (ja) | フラッシュメモリにおけるデータアクセス制御方法、データアクセス制御プログラム | |
CN107239415A (zh) | 一种执行临界区操作的方法及装置 | |
JPH0934796A (ja) | メモリ | |
JPH0719311B2 (ja) | データ処理装置 | |
JP2002278934A (ja) | セキュリティ管理装置およびセキュリティ管理方法 | |
JP2548706B2 (ja) | 文書処理装置 | |
JP2001092713A (ja) | データ書き込み装置とその書き込み方法 | |
KR20000068374A (ko) | 메인 파일과 보조 파일간의 링크를 생성하는 수단을 구비하는 보안 모듈 | |
JP2008299930A (ja) | 半導体記憶装置 | |
JP2002049904A (ja) | Icカードおよびicカード搭載処理プログラムの変更・追加方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070110 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100323 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100521 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100608 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100802 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20100824 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20100917 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130924 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4594475 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |