• ポートフォリオ機能


ポートフォリオを新規に作成して保存
既存のポートフォリオに追加保存

  • この表をプリントする
PDF PDFをダウンロード
審決分類 審判 査定不服 5項独立特許用件 特許、登録しない。 G06F
審判 査定不服 2項進歩性 特許、登録しない。 G06F
管理番号 1283016
審判番号 不服2012-9682  
総通号数 170 
発行国 日本国特許庁(JP) 
公報種別 特許審決公報 
発行日 2014-02-28 
種別 拒絶査定不服の審決 
審判請求日 2012-05-24 
確定日 2013-12-24 
事件の表示 特願2008-526922「モジュール内の実行アプリケーション・プログラムの安全性を検査するシステム、方法、及びコンピュータプログラム」拒絶査定不服審判事件〔平成19年 2月22日国際公開、WO2007/021320、平成21年 2月 5日国内公表、特表2009-505275〕について、次のとおり審決する。 
結論 本件審判の請求は、成り立たない。 
理由 1.手続の経緯
本願は、平成18年3月29日を国際出願日(優先権主張日:2005年8月15日、米国)とする出願であって、平成23年6月22日付けで拒絶理由通知がなされ、同年9月20日付けで意見書の提出とともに手続補正がなされたが、平成24年1月26日付けで拒絶査定がなされ、これに対して平成24年5月24日付けで拒絶査定不服審判請求がなされるとともに同日付けで手続補正がなされ、平成24年11月15日付けの当審の前置報告を引用した審尋に対して、平成25年2月19日に回答がなされたものである。

2.平成24年5月24日付けの手続補正についての補正却下の決定
[補正却下の決定の結論]
平成24年5月24日付けの手続補正を却下する。
[理 由]
(1)補正後の本願発明
平成24年5月24日付けの手続補正(以下、「本件補正」という。)により、特許請求の範囲は、
本件補正前には、
「 【請求項1】
コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラム開発方法であって、
コンパイル及びアセンブルされた実行アプリケーション・プログラムを前記コンピュータ・モジュール内に読み出す工程と、
前記実行アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程と、
前記安全性検査実行コードを挿入された前記実行アプリケーション・プログラムを前記コンピュータ・モジュール内に記憶する工程と
を備え、
安全性検査実行コードを挿入する前記工程は、
前記コンピュータ・モジュールに読み出されたプログラムに前記安全性検査実行コードを挿入するように構成された前記コンピュータ・モジュールのマシンコード安全化ツールを提供する工程と、
前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラムに前記安全性検査実行コードを挿入するために、前記マシンコード安全化ツールを用いて前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラムを処理する工程と
を含むことを特徴とするアプリケーション・プログラム開発方法。
【請求項2】
前記アプリケーション・プログラム用のソースコードを記述及びデバッグする工程と、
前記コンパイル及びアセンブルされた実行アプリケーション・プログラムを提供するために前記アプリケーション・プログラム用の前記ソースコードをコンパイル及びアセンブルする工程とが、コンパイル及びアセンブルされた実行アプリケーション・プログラムを前記コンピュータ・モジュール内に読み出す前記工程に先行することを特徴とする請求項1に記載の方法。
【請求項3】
コンパイル及びアセンブルする前記工程は、前記実行アプリケーション・プログラムが利用できる前記コンピュータ・モジュールの組み込み関数に前記実行アプリケーション・プログラムをリンクする工程をさらに含むことを特徴とする請求項2に記載の方法。
【請求項4】
安全性検査実行コードを挿入する前記工程は、前記安全性検査実行コードを挿入された前記実行アプリケーション・プログラムを再リンクする工程をさらに含むことを特徴とする請求項3に記載の方法。
【請求項5】
前記安全性検査実行コードが挿入された前記実行アプリケーション・プログラムを記憶する前記工程の後に、前記安全性検査実行コードが挿入された前記実行アプリケーション・プログラムを前記中央演算処理ユニット上で実行する工程が処理されることを特徴とする請求項1乃至4の何れか1項に記載の方法。
【請求項6】
安全性検査実行コードを挿入する前記工程は、
前記実行アプリケーション・プログラムによる前記コンピュータ・モジュールの前記指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを防止するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程をさらに含むことを特徴とする請求項1乃至5の何れか1項に記載の方法。
【請求項7】
前記コンピュータ・モジュールは揮発性メモリ及び不揮発性メモリを含み、
安全性検査実行コードを挿入する前記工程は、
前記実行アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程を含むことを特徴とする請求項1乃至6の何れか1項に記載の方法。
【請求項8】
前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部を含み、
前記実行アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成されることを特徴とする請求項1乃至7の何れか1項に記載の方法。
【請求項9】
請求項1乃至8の何れか1項に記載の方法を実行するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。
【請求項10】
請求項1乃至8の何れか1項に記載の方法を実行するように構成されたアプリケーション開発環境。
【請求項11】
コンピュータ・モジュールであって、
中央演算処理ユニットと、
前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
前記中央演算処理ユニット上で直接実行されるように構成された前記メモリ内のマシンコード・アプリケーション・プログラムと、
前記中央演算処理ユニット上で直接実行され、前記マシンコード・アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するように構成された前記メモリ内のマシンコード安全化ツールと
を備え、
前記メモリは揮発性メモリ及び不揮発性メモリを含み、
前記マシンコード安全化ツールは、前記マシンコード・アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記マシンコード・アプリケーション・プログラムに安全性検査実行コードを挿入するように構成される
ことを特徴とするコンピュータ・モジュール。
【請求項12】
前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部をさらに備え、
前記マシンコード・アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成されることを特徴とする請求項11に記載のコンピュータ・モジュール。
【請求項13】
請求項11又は12に記載のマシンコード安全化ツールを提供するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。
【請求項14】
コンピュータ・モジュールであって、
中央演算処理ユニットと、
前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
前記中央演算処理ユニット上で直接実行し、
アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入するように構成された前記メモリ内のマシンコード安全化ツールと、
前記中央演算処理ユニット上で直接実行するように構成され、前記安全性検査実行コードを含む、前記メモリ内の1以上のアプリケーション・プログラムと
を備えるコンピュータ・モジュール。
【請求項15】
前記メモリは揮発性メモリ及び不揮発性メモリを含み、
前記マシンコード安全化ツールは、
前記アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに前記安全性検査実行コードを挿入するように構成されることを特徴とする請求項14に記載のコンピュータ・モジュール。
【請求項16】
前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部をさらに備え、
前記アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成されることを特徴とする請求項14又は15に記載のコンピュータ・モジュール。
【請求項17】
請求項14乃至16の何れか1項に記載のマシンコード安全化ツールを提供するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。」
であったものが、
「 【請求項1】
コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラム開発方法であって、
中央演算処理ユニットで直接実行されるようにコンパイル及びアセンブルされたマシンコードの実行アプリケーション・プログラムを前記コンピュータ・モジュール内に読み出す工程と、
前記実行アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程と、
前記安全性検査実行コードを挿入された前記実行アプリケーション・プログラムを前記コンピュータ・モジュール内に記憶する工程と
を備え、
安全性検査実行コードを挿入する前記工程は、
前記コンピュータ・モジュールに読み出されたプログラムに前記安全性検査実行コードを挿入するように構成された前記コンピュータ・モジュールのマシンコード安全化ツールを提供する工程と、
前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラムに前記安全性検査実行コードを挿入するために、前記マシンコード安全化ツールを用いて前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換える工程と
を含むことを特徴とするアプリケーション・プログラム開発方法。
【請求項2】
前記アプリケーション・プログラム用のソースコードを記述及びデバッグする工程と、
前記コンパイル及びアセンブルされた実行アプリケーション・プログラムを提供するために前記アプリケーション・プログラム用の前記ソースコードをコンパイル及びアセンブルする工程と
が、コンパイル及びアセンブルされた実行アプリケーション・プログラムを前記コンピュータ・モジュール内に読み出す前記工程に先行することを特徴とする請求項1に記載の方法。
【請求項3】
コンパイル及びアセンブルする前記工程は、前記実行アプリケーション・プログラムが利用できる前記コンピュータ・モジュールの組み込み関数に前記実行アプリケーション・プログラムをリンクする工程をさらに含むことを特徴とする請求項2に記載の方法。
【請求項4】
安全性検査実行コードを挿入する前記工程は、前記安全性検査実行コードを挿入された前記実行アプリケーション・プログラムを再リンクする工程をさらに含むことを特徴とする請求項3に記載の方法。
【請求項5】
前記安全性検査実行コードが挿入された前記実行アプリケーション・プログラムを記憶する前記工程の後に、
前記安全性検査実行コードが挿入された前記実行アプリケーション・プログラムを前記中央演算処理ユニット上で実行する工程
が処理されることを特徴とする請求項1乃至4の何れか1項に記載の方法。
【請求項6】
安全性検査実行コードを挿入する前記工程は、
前記実行アプリケーション・プログラムによる前記コンピュータ・モジュールの前記指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを防止するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程をさらに含むことを特徴とする請求項1乃至5の何れか1項に記載の方法。
【請求項7】
前記コンピュータ・モジュールは揮発性メモリ及び不揮発性メモリを含み、
安全性検査実行コードを挿入する前記工程は、
前記実行アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程
を含むことを特徴とする請求項1乃至6の何れか1項に記載の方法。
【請求項8】
前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部を含み、
前記実行アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成される
ことを特徴とする請求項1乃至7の何れか1項に記載の方法。
【請求項9】
請求項1乃至8の何れか1項に記載の方法を実行するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。
【請求項10】
請求項1乃至8の何れか1項に記載の方法を実行するように構成されたアプリケーション開発環境。
【請求項11】
コンピュータ・モジュールであって、
中央演算処理ユニットと、
前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
前記中央演算処理ユニット上で直接実行されるようにコンパイル及びアセンブルされた前記メモリ内のマシンコード・アプリケーション・プログラムと、
前記中央演算処理ユニット上で直接実行され、前記マシンコード・アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するように構成された前記メモリ内のマシンコード安全化ツールと
を備え、
前記メモリは揮発性メモリ及び不揮発性メモリを含み、
前記マシンコード安全化ツールは、前記マシンコード・アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記マシンコード・アプリケーション・プログラムに安全性検査実行コードを挿入し、前記マシンコード・アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換えるように構成される
ことを特徴とするコンピュータ・モジュール。
【請求項12】
前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部をさらに備え、
前記マシンコード・アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成される
ことを特徴とする請求項11に記載のコンピュータ・モジュール。
【請求項13】
請求項11又は12に記載のマシンコード安全化ツールを提供するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。
【請求項14】
コンピュータ・モジュールであって、
中央演算処理ユニットと、
前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
前記中央演算処理ユニット上で直接実行し、
アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入し、前記アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換えるように構成された前記メモリ内のマシンコード安全化ツールと、
前記中央演算処理ユニット上で直接実行するようにコンパイル及びアセンブルされ、前記安全性検査実行コードを含む、前記メモリ内の1以上のマシンコードのアプリケーション・プログラムと
を備えるコンピュータ・モジュール。
【請求項15】
前記メモリは揮発性メモリ及び不揮発性メモリを含み、
前記マシンコード安全化ツールは、
前記アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに前記安全性検査実行コードを挿入するように構成される
ことを特徴とする請求項14に記載のコンピュータ・モジュール。
【請求項16】
前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部をさらに備え、
前記アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成されることを特徴とする請求項14又は15に記載のコンピュータ・モジュール。
【請求項17】
請求項14乃至16の何れか1項に記載のマシンコード安全化ツールを提供するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。」
と補正された。

上記補正についてみると、
本件補正後の請求項1では、本件補正前の請求項1に係る発明を特定するために必要な事項である「実行アプリケーション・プログラム」が、「中央演算処理ユニットで直接実行されるように」コンパイル及びアセンブルされた「マシンコード」であるとの限定を付加したものであり、また、同様に本件補正前の「前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラムに前記安全性検査実行コードを挿入するために、前記マシンコード安全化ツールを用いて前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラムを処理する工程」が、さらに「実行アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換える」処理を行うものであるとの限定を付加したものである。
また、本件補正後の請求項11では、本件補正前の請求項11に係る発明を特定するために必要な事項である「マシンコード・アプリケーション・プログラム」が、中央演算処理ユニット上で直接実行されるように「コンパイル及びアセンブル」されるものであるとの限定を付加したものであり、また、同様に本件補正前の「マシンコード安全化ツール」がさらに「マシンコード・アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換える」処理を行うものであるとの限定を付加したものである。
また、本件補正後の請求項14では、本件補正前の請求項14に係る発明を特定するために必要な事項である「アプリケーション・プログラム」が、中央演算処理ユニット上で直接実行するように「コンパイル及びアセンブル」されるものであって、「マシンコード」であるとの限定を付加したものであり、また、同様に本件補正前の「マシンコード安全化ツール」がさらに「アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換える」処理を行うものであるとの限定を付加したものである。
よって、本件補正は、平成18年法律第55号改正附則第3条第1項によりなお従前の例によるとされる同法による改正前の特許法第17条の2第4項第2号に掲げる特許請求の範囲の減縮を目的とするものに該当する。

そこで、本件補正後の上記請求項14に記載された発明(以下、「本件補正発明」という。)が特許出願の際独立して特許を受けることができるものであるか(平成18年法律第55号改正附則第3条第1項によりなお従前の例によるとされる同法による改正前の特許法第17条の2第5項において準用する同法第126条第5項の規定に適合するか)について以下に検討する。

(2)引用例
(2-1)原査定の拒絶の理由に引用され、本願の優先日前の平成13年9月11日に出願公表された特表2001-514411号公報(以下、「引用例1」という。)には、図面とともに以下の各記載がある。
(a)「【請求項7】
ネイティブプロセッサと、
メモリと、
該ネイティブプロセッサと、
該ネイティブプロセッサによって直接実行可能であるネイティブコードで書かれた信頼されないプログラムを実行するためのエミュレータと、
オペレーティングシステムのインターフェースモジュールを使用することによって実行可能であるオペレーティングシステムと、
を有するコンピュータシステムであって、
エミュレータが、
信頼されないプログラムをメモリの境界領域内にロードするためのロードモジュールと、
メモリの境界領域の外で、信頼されないプログラムによるアクセスを制限するための信頼されないプログラム内に挿入可能なチェックコードと、
オペレーティングシステムのインターフェースモジュールの対応するセットにアクセスするための信頼されないプログラムにリンク可能な変換コードモジュールのセットと、
を備える、コンピュータシステム。」
(b)「【0001】
【発明の属する技術分野】
本発明は、電子的データ処理に関し、特に、信頼できないコードを包含する実行可能プログラムからのシステム損傷を回避することに関する。
【0002】
【従来の技術】
インターネットブラウザの進歩は、WWW(ワールドワイドウェブ:World Wide Web)の動的及びインタラクティブなページを作り出す。しかしながら、進歩はまた、ウェブページを単に見ることから発生する多くのコンピュータシステムセキュリティリスクを作り出す。インターネットブラウザは、プログラム又は、ウェブページに埋め込まれた他の実行可能なコードを自動的にダウンロードし、実行する。リモートコンピュータからプログラムをダウンロードし、実行する能力は、ホストコンピュータを種々のセキュリティリスクに曝す。例えばコンピュータシステム又は、コンピュータシステムのデータを修正する敵意のあるプログラムは、パスワード、銀行預金口座情報のようなユーザデータを盗み、ユーザにシステムリソースを利用できなくさせる。その結果、セキュリティの問題は、インターネットアプリケーションの開発において重要である。
【0003】
ある従来技術のアプローチにより、Javaアプレットとして知られる実行可能なコードの特定のフォームにセキュリティを設けた。実行可能なコードソースプログラムは、書き込まれ、プラットフォーム独立バイトコードに変換されダウンロードされる。プラットフォーム独立トークン化されたバイトコードは、実行可能コードがすることができる厳格な制限を配置する仮想マシーンで走る。従来技術のアプローチにおける実行可能なコードは、オペレーティングシステムへのアクセスが非常に制限されていた。従って、Java言語はより強力になるので、オペレーティングシステムがすでに実行できる多くの関数を複製しなければならない。
【0004】
ActiveXコントロールは、Javaの制限された能力を回避する実行可能なコードのフォームである。ActiveXは、OLE(Object Linking and Embedding)及びCOM(Component Object Model)と呼ばれるマイクロソフト社の2つの技術の産物である。ActiveXは、それがインターネットを利用することができるという特徴をサポートする。例えば、ActiveXコントロールは、Webブラウザによって自動的にダウンロードされ、実行される。
【0005】
ActiveXコントロールが、ネイティブコードで書かれるので、それらはオペレーティングシステムに十分にアクセスでき、コントロールが稼働するメモリを処理することができる。このアクセスは、コントロールが、スタンドアロンアプリケーションに対する拡張のようなきつく制御された環境で稼働するときに、強力である。しかしながら、ActiveXコントロールが、インターネットエクスプローラのようなウェブブラウザのようなアプリケーションによってインターネット上の知らない又は信用できないソースからダウンロードされるとき、オペレーティングシステムへの十分なアクセスは、深刻なセキュリティの問題を生ずる。ActiveXコントロールは、いかなるオペレーティングシステムのサービスにもアクセスするように設計される。敵意のあるActiveXコントロールは、ホストシステムのハードドライブのお情報を検索することができ、ウィルスを注入することができ、又は、ホストシステムを損傷させることができた。オペレーティングシステムに対するActiveXの無制限のアクセスによる問題は、無制限のアクセスが、セキュリティ違反に対するリスクにホストシステムを置くことである。
【0006】
従って、ホストシステムのセキュリティを妥協することのない、ホストオペレーティングシステムのパワーにアクセスする能力を備えた実行可能なコードのフォームの必要性がある。
【0007】
【発明が解決しようとする課題】
本発明は、ネイティブ、即ち直接実行可能なコードで書かれた信頼されたい実行可能なコードに関するセキュリティポリシーを実行する。実行可能なコードは、メモリの外側へのリファレンスが制限される予め割り当てられたメモリ範囲、即ちサンドボックス内にロードされる。実行中、実行可能なコードに追加されたチェック(「スニフコード(sniff code)」)は、これらの制限を強制する。信頼されないコードにおける在来のアプリケーションプログラムインターフェース(API)コールは、ホストシステムのセキュリティの侵害を防止しながら、実行コードがホストオペレーティングシステムにアクセスすることができる変換コードモジュール(「サンク(thunks)」)で置換される。コントロール又はアプレットにおける静的リンクは、コールによってサンクモジュールに置換される。実行中にAPIコールが作られるとき、コントロールはサンクに移送し、APIコールがオペレーティングシステムで実行されることが許容されるべきか否か判断する。」
(c)「【0010】
図1は、本発明が実施される適当な計算環境の簡単な一般的な説明を提供する。本発明は、以下において、他の環境でも可能であるが、パーソナルコンピュータ(PC)によって実行されるプログラムモジュールのようなコンピュータ実行可能な命令の一般的なコンテキストとして記載する。プログラムモジュールは、特定のタスクを実行し、特定の抽象データ型を実行するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを包含する。本発明が、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベース又はプログラム可能なカスタマエレクトロニック、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、などを包含する他のコンピュータシステムで実行されうることは、当業者には明らかであろう。本発明はまた、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散計算環境でも実行される。分散計算環境では、プログラムモジュールは、ローカルとリモートの両方のメモリ記憶装置に配置される。
【0011】
図1は、本発明を実行するためのシステムの例を示す。それは従来のパーソナルコンピュータ20のフォームにおいて、汎用のコンピュータデバイスを採用し、該コンピュータは、演算ユニット21と、システムメモリ22と、システムメモリ及び他のシステムコンポーネントを演算ユニット21に接続するシステムバス23とを含む。システムバス23は、メモリバス又はメモリコントローラ、周辺バス、及び、ローカルバスを包含する種々のタイプのものであってよく、多数のバス構造を使用するものであってよい。システムメモリ22は、ROM24とRAM25を包含する。ROM24にストアされた基本入力/出力システム(BIOS)は、パーソナルコンピュータ20のコンポーネントの間に情報を転送する基本ルーチンを包含する。BIOS24はまた、システムのスタートアップルーチンを包含する。パーソナルコンピュータは更に、ハードディスク(図示せず)から読み出し、該ディスクに書き込むハードディスクドライブ27と、リムーバブル磁気ディスク29から読み出し、該ディスク29に書き込む磁気ディスクドライブ28と、CD-ROM又は他の光学媒体のようなリムーバブル光ディスク31から読み出し、該ディスク31に書き込む光ディスクドライブ30とを包含する。ハードディスクドライブ27、磁気ディスクドライブ28、及び、光ディスクドライブ30は、ハードディスクドライブインターフェース32と磁気ディスクドライブインターフェース33と、光ディスクドライブインターフェース34のそれぞれによってシステムバス23に接続される。ドライブ及びそれらの関係するコンピュータ読み取り可能媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、及び、パーソナルコンピュータ20に関する他のデータの不揮発的なストレージを提供する。ここで記載した例示的な環境は、ハードディスク、リムーバブル磁気ディスク29及びリムーバブル光ディスク31を採用するけれども、コンピュータによってアクセス可能なデータをストアすることができる他のタイプのコンピュータ読み取り可能媒体をまた具体的な操作環境に使用することもできることは当業者にとって明らかであろう。かかる媒体は、磁気カセット、フラッシュメモリカード、ディジタル汎用ディスク、ベルヌーイカートリッジ、RAM、ROM及び同様なものを包含する。
【0012】
プログラムモジュールは、ハードディスク、磁気ディスク29、光ディスク31、ROM24、及びRAM25にストアされうる。プログラムモジュールは、オペレーティングシステム35と、1又はそれ以上のアプリケーションプログラム36と、他のプログラムモジュール37と、プログラムデータ38とを包含しうる。ユーザは、ユーザは、キーボード40及びポインティングデバイス42のような入力デバイスを介してコマンド及び情報をパーソナルコンピュータに入力する。他の入力デバイス(図示せず)は、マイクロホン、ジョイスティック、ゲームパッド、衛生アンテナ(サテライト・ディッシュ)、スキャナ等を包含する。これら及び他の入力デバイスはしばしば、システムバス23に接続されたシリアルポートインターフェース46を介して演算ユニット21に接続されるが、それらは、パラレルポート、ゲームポート、又はユニバーサルシリアルバス(USB)のような図1に示されていない他のインターフェースを介して接続されうる。モニタ47又は他の表示デバイスまたは、ビデオアダプタ48のようなインターフェースを介してシステムバス23に接続されうる。モニタに加え、パーソナルコンピュータは典型的には、スピーカ及びプリンタのような楽しゅう偏出力デバイス(図示せず)を含む。」
(d)「【0015】
本発明では、アプリケーションプログラム36としてパーソナルコンピュータ20で稼働する在来のウェブブラウザが、リモートコンピュータ49からアプレットを自動的にダウンロードする。「アプレット」は短いプログラムであり、通常は単一の関数で実行され、他のアプリケーション内で実行されるように設計されている。アプレットは、それらが必要なときにリモートコンピュータからしばしばダウンロードされ、それらがプライマリアプリケーションによって実行された後、ローカルコンピュータからときどき消去されうる。
【0016】
図2は、本発明における、アプレットを稼働するためのファシリティを含む殆どが在来の実行環境を示す。用語「アプレット」は、従来技術において正確に定義されていない。この用語は一般的には、単一の関数又は制限された範囲の関数を実行するための小さなプログラムと呼ばれるが、用語は本来は、プログラムのサイズ又はその関数の範囲を制限されない。アプレットは、特定の目的でWWWページのようなオンラインソースからしばしばダウンロードされ、実際には、アプレットはダウンロードされるとすぐに実行され、ついで実行後削除される。以下に記載する好ましい実施形態では、用語「コントロール」又は「ActiveXコントロール」は、アプレットと同意語と考えて良い。ある場合では、発明それ自身が小さなプログラム、ダウンロードされたプログラム、又は、他のいかなるプログラムの特定のフォームで使用することを制限しない。本発明は、「信頼される」ことがないいかなるプログラムについても有用である、即ち、該プログラムとは、システムリソースに十分にアクセスしたならば、システムを損傷させるかも知れない、不確実な出所又は効果のプログラムである。
【0017】
Windows95のようなオペレーティングシステム35は、通常のアプリケーションプログラム36をメモリ内にロードするためのローダモジュール351を採用する。プログラム36は、ライン361によって表されるような演算ユニット21に命令を直接送信することによって、オペレーティングシステム35の制御下で実行する。プログラム36は、アプリケーションプログラムインターフェース(API)コード352-354のブロックを呼び出すことによって標準のAPIファンクションを実行する。各APIは、図1のディスプレィ47にダイアログボックスを表示するように、特定のレベルのファンクションを実行するためのプロセッサ21によって直接実行可能な命令を包含する。OS35は、一般的に、数千の独立したAPIを含んでおり、数ダースのダイナミックリンクライブラリ(DLL)として通常パッケージングされており、Microsoft WindowsNTオペレーティングシステムでは、これらのDLLは、集合名詞的に「Win32」として知られている。
【0018】
エミュレータプログラムによって、ある演算ユニット21用に書かれたアプリケーションプログラムが、異なる命令セットを有する別の演算ユニットで実行される。ここで採用する特定のWx86VMエミュレータ39は、インテル「x86」プロセッサ(80386、80486、ペンティアムなど)用に書かれたプログラムをDigital Equipment Corp.のAlpha及びIBMのPowerPCのようなプロセッサで実行するためにオリジナルに開発されたものである。それについては、出願中であるシリアル番号08/912、454及び08/904、057により詳細に記載してある。本目的に関して、Wx86VMと呼ばれるいくぶん修正されたバージョンは、殆どの修正されていない命令をx88プロセッサ21に通すが、記載するようなその他をブロックし、変換する。Wx86VMは、「サンクコード」(又は単に「サンク」)391-393と呼ばれる変換モジュールによってAPIを実行する際にWx86をまねるが、ここでのサンクコードの目的は、セキュリティを提供することであり、異なるプラットフォーム用に書かれたAPIコードを実行するために、あるプラットフォームからAPIコールをすることができるというそれらの本来の目的ではない。
【0019】
362のようなアプレットが実行されるとき、インターネットウェブブラウザのようなホストプログラム36は、エミュレータ39を呼び出す。エミュレータは、アプレットコードを所定のメモリ領域にロードするため、及びそれの使用のために別の所定のメモリ領域を割り当てるために、それ自身のローダモジュール396を採用する。これらの領域は、そのアプレットに関する「サンドボックス(sandbox)」と呼ばれる。アプレットの実行中、エミュレータ39は、アプレットのコードを、サンドボックスの外側に存在するコンパイルされたキャッシュにコンパイルする。コンパイルプロセス中、エミュレータはまた、メモリスニフ(sniff)コード394をキャッシュ内に挿入する。
【0020】
アプレット362は、それが書かれた同じプロセッサプラットフォーム21で実行するので、エミュレータ39は、ActiveXコントロールを実行するために(ライン363で表された)個々の命令を変換する必要がない。しかしながら、それは、セキュリティを提供する目的のためにそれらをフィルタリングし、変換する。例えば、APIはオペレーティングシステム35のカーネルを呼び出すために、x86割り込み(INT)命令を使用する。それ故、コントロールにおけるINT命令は、APIサンク391-393及びスニフコード394をバイバスすることができ、カーネルを直接呼び出すことができる。それ故、エミュレータ39は、この命令を無条件にブロックし、それは、ライン364に全く出力コードを生成しない。ライン363でのサブルーチンコール(CALL)及びリターン(RET)、無条件/条件付のジャンプ(JMP/Jxx)のような他の問題のある命令は、サブルーチンコールによってライン364に置換され、これらの命令のひとつがシミュレーションされたとき、既にコンパイルされたコードのキャッシュは、コール又はジャンプのキャッシュ内の宛先アドレスを判断するために検索される必要がある。
【0021】
アプレット362からのAPIコールは、APIコード352-354に直接処理されない。むしろ、サンクコード391-393はそれらをインターセプトし、それらで何をするか決定する。391でのようないくつかのコールは、サンク391によって対応するAPI352に直接通され、これらのコールは、システムに大混乱をもたらすことはなく、従って、セキュリティリスクが存在しない。392のような他のサンクは、その特定のコールの所定の特徴に依存して、それに対応するAPI353にコールを通すかどうか決定し、それをAPIに出す前にコールを修正することができる。393のようなあるサンクは、コールをそれらのAPI354に完全に認めず、これらのコールは、システムのセキュリティを犯し、信頼できないアプレット362によって許容されない。」
(e)「【0022】
図3は、パーソナルコンピュータ20で実行されるアプレットがパーソナルコンピュータのセキュリティを有しない全てのオペレーティングシステムサービスにアクセスすることができる発明のある実施形態の大まかなステップ400を図示する。
【0023】
ステップ410では、ウェブブラウザのようなホストアプリケーションがアプレットを割り当てられたメモリ範囲にロードする。割り当てられたメモリ範囲を、このアプリケーションではサンドボックスと呼ぶ。サンドボックスは、アプレットをストアするための最初のメモリセグメントと、アプレットを実行する間、ストレジをアドレス可能にするためのランタイムメモリセグメントとの両方を含み、これらは在来のいかなる手段でも割り当てられ得る。この実施形態では、OS35は、ステップ411でエミュレータ39を呼び出す。ステップ412は、アプレット362のコードをストアするために、図1のRAM22におけるアドレスの領域及び範囲を割り当て、ランタイムワーキングストレージを使用するためのアプレットに関する他の領域を割り当て、これらの2つの領域は、他のいかなるアプレット、アプリケーションプログラム、又は他のシステムのファシリティに影響を与えることなく、安全に実行することができるサンドボックスを一緒に構成する。それらは、各セキュリティドメインのためのひとつのXW86サンドボックスとなる、即ち同じセキュリティ設定を有する全てのコントロールが同じサンドボックスでプレイする。セキュリティ設定がウェブページのURL(uniform resource locator)を含むので、各オープンウェブページは、少なくとも1つのサンドボックスを有する。通常、同じウェブページの全てのコントローラは、同じサンドボックスにある。それらのカスタムインターフェースが安全でないけれども、サンドボックス内でインターアプレットを実行することは許容される。
【0024】
ステップ420は、実行のためにアプレットを準備する。
【0025】
ステップ421は、リンクを備えるアプレットの静的リンクをサンクモジュールと置換する。即ち、エミュレータ39は、アプレット362のコード内でAPI352-354に対する全てのコールを見つけ、それらを対応するサンク391-393に対するコールに変更する。静的リンクは、アプレットの実行中、一定を維持するリンクである。DLL即ちダイナミックリンクライブラリは、実行可能な関数のライブラリ、又は、Windowsアプリケーションによって使用することができるデータである。典型的には、DLLは、1又はそれ以上の特定の関数を提供し、DLLは、DLLに対する静的又は動的なリンクのいずれかを生成することによってアクセスされる。DLLは、最後に拡張子.dllを備える記述でファイルされる。サンクDLLは、サンドボックス内の安全なAPIである。サンクDLLは、安全であると考えられない多くのAPIをブロックし、制限する。例えば、CreateFileが知られたロケーションにだけ許容されうる。同様に、アプレットは、パスワードを記録するための他の処理を生成することができない。上述のように、いくつかのサンクは、対応するAPIにコントロールを単に通す。例えば、「CreateWindow」、「CreateDialog」、「CreateIcon」、「CreateCursor」と名付けられたWin32API及び同様な関数は、他のプロセスに影響せず、信頼できないコードを許容しうる。一方、所定の他のAPIは、信頼できないコードを完全に利用できなくさせなければならない。例えば、「CreateProcess」を許容することにより、信頼できないアプレットをサンドボックスの外側で別のプログラムを実行することができ、「ExitWindowsEx()」のようなオペレーションを完全にブロックすることができ、それにより、信頼できないコードは現在のユーザをログオフすることができず、コンピュータをオフにすることができない。393のようなサンクが、ライン395によって表示されたコントロールにエラーコードバックを戻すことによってAPIをブロックする。
【0026】
いくつかのAPIはある条件下、又は所定の修正で許容されうる。この場合、392のようなサンクは、それが対応するAPI353を呼び出すか又はブロックするかのいずれかであった後、内部演算を実行し、修正されたパラメータをAPIに通す。例えば、「SendMessage()」は通常メッセージをウィンドウに送信する。SendMessageサンクにより、ActiveXコントロールがメッセージをそのコントロールによって生成されたウィンドウに送信することができる。しかしながら、サンクは、ウェブブラウザによって、又は他のアプリケーションプログラムによるそれ自身の全てのメッセージをブロックする。このことにより、コントロールが、他のプログラムに属するウィンドウによって実行されるべきであるキーストロークをまねるためにVM_CHARメッセージを送信することによってセキュリティを侵害することを防止する。
【0027】
他の例は、メモリをどんな場所にも普通に割り当てる「GlobalAlloc」、「HeapCreate」のようなWin32APIを含む。これらのAPIに関するサンクは、対応するAPIの全体のコードを組み込み、サンドボックスメモリ内で完全に実行するようにリコンパイルし、サンドボックスの境界内のみでメモリを割り当てることができる。
【0028】
次いで、ステップ422は、アプレットのコードを図2のエミュレータ39によって実行されうるオブジェクトコードにコンパイルする。コードが要求されたものになったとき、コンパイルは直ちに又はパート毎に全て進行し、コンパイルされたコードは、サンドボックスの外側に配置された図4のコンパイルされたキャッシュ357に配置される。これらの方法におけるコンパイルは、在来のものであり、発明の本質には関係しない。
【0029】
ステップ423は、認められないメモリリファレンスに対する禁止を強化するためにアプレット自身のコードにチェックコードを挿入する。「スニフ(sniff)コード」と呼ばれるこのチェックコードは、アプレットのコードによって全てのメモリの読み書きを調べ、その結果からそれらを許可し、又は許可しない。アプレットがサンドボックスの外側のメモリにアクセスするのを防止することにより、アプレットのセキュリティは向上する。予め割り当てられた範囲からだけのアプレットに対して全てのメモリを提供することにより、スニフコードオーバーヘッドを低減させ、その結果、メモリ範囲の効率的なチェックを生じる。更なる最適化技術が、基本のブロックレベルでコードをコンパイルすることによって追加される。例えば、種々のメモリリファレンスが同じレジスタを使用するアプレットによってなされるならば、コンパイラは、各アクセスに関するスニフコードに対する別々のコールを生成するのではなく、一回だけそのレジスタによってアドレス可能な全体の範囲をチェックすることができる。詳細な例を図4と一緒に示す。基本的には、スニフコードによって、割り当てられたサンドボックス内と、システムを損傷しない所定の他のメモリ内とだけで、アプレットがRAMアドレスを参照することができる。(エミュレータ39がサンドボックスの外側でメモリを参照することができないが、それはサンドボックスにメモリ領域を割り当てるための能力を有する。デバイス独立ビットマップイメージのような目的に関して、余分のスニフコードオーバーヘッドは労力より小さく、さもなければ最初のサンドボックス領域内にイメージをコピーするように要求される。)
ステップ430は、アプレットを実行する。ステップ431は、命令シーケンスに続く。
【0030】
現在の命令がAPIに対するコールであるならば、ステップ421によって配置されたリンクは、コールがステップ432で完全にブロックされ、ステップ433で実行され、ステップ434で更に処理され、次いで、ブロックされ又は許可されうるかどうか判断する。
【0031】
現在の命令が、LOAD又はSTOREのようなメモリリファレンス命令であるならば、ステップ435によって、命令がそのサンドボックス内のアドレスを参照するならば、ステップ436がその命令を実行することができる。もしそうでなければ、ステップ437は、リファレンスがさもなければ許容されるかどうか判断する。もしそうならば、ステップ435はそれを実行し、さもなければ、ステップ438はアクセスをブロックし、エラーを返す。スニフコードはこれらのステップを実行する。他のX86命令は、ステップ436によって直接実行される。各命令の後、コントロールはステップ431に戻る。プロセス400は、ホストアプリケーションがそれを終了するまで、続く。」
(f)「【0033】
図4は、本発明に関するそれらの領域のみを示すシステムRAM25のメモリマップである。予め割り当てられた範囲251は、サンドボックスを形成する。それは、アプレット362と、アプレットの実行中に、アドレス可能なワーキングストレージに関するランタイムメモリセグメント252と、変換コードサンク391-393(ここではサンク391としてだけ示す)をストアするためのセグメントと、をストアするための最初のメモリセグメントを包含する。サンドボックス251の外側のメモリ22は、ここでは352によって表されるAPIDLLと、カーネル32355とを包含する。他のワーキングメモリ領域は、356として表される。コンパイルされたキャッシュ357はまた、サンドボックス215の外側に配置される。セキュリティポリシーが実際に実行されることがここであるので、サンドボックス215の外側のWHKRNL32325の位置は、特に重要であり、それがサンドボックスの内側にあるならば、ルージュアプレットが、それを修正することによってセキュリティを妥協することができうる。」
(g)「【0042】
アプレットの実行は、必要とされるコードをコンパイルし、コードをコンパイルされたキャッシュに置くことにより始まる。コンパイルされたコードは、メモリ読み書きオペレーションが安全なオペレーションであることを確認するためにそれにおいてスニフチェックを有する。アクセスされるメモリが、所定のサンドボックス領域の外側であるならば、メモリにアクセスする試みのオペレーションは失敗する。例えば、アプレットfoo.ocxが命令MOV EAX、[ESI+4]を包含するならば、コンパイラは、命令が安全であることを確認するためのMOV命令の前にスニフコードを挿入する。以下の命令:
MOV EAX、[ESI+4]
は、スニフコードが挿入された後に、
LEA ECX、[ESI+4]
CALL SNIFFREAD4.ECX
MOV EAX、[ECX]
となる。」

ここで、上記(a)乃至(g)の記載について検討する。
(ア)上記(b)によると、引用例1の課題は、ネイティブ即ち直接実行可能なコードで書かれたActiveXコントロールに対するセキュリティの確保であって、また、「実行可能なコードは、メモリの外側へのリファレンスが制限される予め割り当てられたメモリ範囲、即ちサンドボックス内にロードされる。実行中、実行可能なコードに追加されたチェック(「スニフコード(sniff code)」)は、これらの制限を強制する。」と記載されているように、該直接実行可能なコードのメモリへのアクセス制限を行うことである。
(イ)上記(c)によると、引用例1の対象とするシステムは、パーソナルコンピュータ20のフォームにおいて、演算ユニット21と、システムメモリ22を備えており、該システムメモリ22のRAMに各種プログラムが記憶され、また、該プログラムは上記演算ユニット21により実行されるものであることは明らかであるから、ここには、
「演算ユニット21と、該演算ユニット21により実行されるプログラムを記憶するシステムメモリ22を備えたシステム」
が記載されているといえる。
(ウ)上記(d)の第【0016】段落に「アプレットは、特定の目的でWWWページのようなオンラインソースからしばしばダウンロードされ、実際には、アプレットはダウンロードされるとすぐに実行され、ついで実行後削除される。以下に記載する好ましい実施形態では、用語「コントロール」又は「ActiveXコントロール」は、アプレットと同意語と考えて良い。ある場合では、発明それ自身が小さなプログラム、ダウンロードされたプログラム、又は、他のいかなるプログラムの特定のフォームで使用することを制限しない。本発明は、「信頼される」ことがないいかなるプログラムについても有用である、即ち、該プログラムとは、システムリソースに十分にアクセスしたならば、システムを損傷させるかも知れない、不確実な出所又は効果のプログラムである。」と記載されているように、対象とするプログラムは、ActiveXコントロールを含む直接実行可能なコードであるアプレットであり、また、その他システムを損傷させるかも知れない、不確実な出所又は効果のプログラムである。
(エ)上記(d)の第【0019】段落の「エミュレータは、アプレットコードを所定のメモリ領域にロードするため、及びそれの使用のために別の所定のメモリ領域を割り当てるために、それ自身のローダモジュール396を採用する。これらの領域は、そのアプレットに関する「サンドボックス(sandbox)」と呼ばれる。アプレットの実行中、エミュレータ39は、アプレットのコードを、サンドボックスの外側に存在するコンパイルされたキャッシュにコンパイルする。コンパイルプロセス中、エミュレータはまた、メモリスニフ(sniff)コード394をキャッシュ内に挿入する。」との記載、また、上記(e)の第【0029】段落の「ステップ423は、認められないメモリリファレンスに対する禁止を強化するためにアプレット自身のコードにチェックコードを挿入する。「スニフ(sniff)コード」と呼ばれるこのチェックコードは、アプレットのコードによって全てのメモリの読み書きを調べ、その結果からそれらを許可し、又は許可しない。アプレットがサンドボックスの外側のメモリにアクセスするのを防止することにより、アプレットのセキュリティは向上する。」との記載、及び上記(g)の記載によると、エミュレータ39は、アプレットにサンドボックス(sandbox)と呼ばれる所定のメモリ領域を割り当ててロードし、アプレットの実行によりサンドボックスの外側のメモリにアクセスするのを防止するために、アプレット自身のコードにメモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ(sniff)コードと呼ばれるチェックコードをコンパイルプロセス中に挿入してキャッシュに記憶するものである。
なお、上記エミュレータ39自体は、上記(イ)の演算ユニット21で直接実行されるものであり、また、システムメモリ22に記憶されるものであることは、当業者であれば自明な事項である。
そうするとここには、
「演算ユニット21で直接実行され、
アプレットの実行により、該アプレットに割り当てられたメモリ領域であるサンドボックスの外側のメモリにアクセスするのを防止するために、アプレット自身のコードにメモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ(sniff)コードと呼ばれるチェックコードを挿入してキャッシュに記憶するように構成されたシステムメモリ22に記憶されるエミュレータ39」
が記載されているといえる。
(オ)上記(a)の記載、また、上記(ア)及び(ウ)で述べたように、アプレットは演算ユニット21で直接実行可能なネイティブコードで書かれており、また、上記(エ)で述べたように、エミュレータ39によりアプレットのコードにスニフ(sniff)コードと呼ばれるチェックコードが挿入されてキャッシュに記憶される。なお、該キャッシュは上記(f)に示されるようにシステムメモリ22内のRAM25に配置されるものである。
そうするとここには、
「演算ユニット21で直接実行可能なネイティブコードで書かれ、メモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ(sniff)コードと呼ばれるチェックコードが挿入され、システムメモリ22に記憶されたアプレット」
が記載されているといえる。

以上、(ア)乃至(オ)によれば、引用例1には以下の発明(以下、「引用発明」という)が記載されていると認められる。
「演算ユニット21と、
該演算ユニット21により実行されるプログラムを記憶するシステムメモリ22と、
前記演算ユニット21で直接実行され、
アプレットの実行により、該アプレットに割り当てられたメモリ領域であるサンドボックスの外側のメモリにアクセスするのを防止するために、アプレット自身のコードにメモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ(sniff)コードと呼ばれるチェックコードを挿入してキャッシュに記憶するように構成されたシステムメモリ22に記憶されるエミュレータ39と、
前記演算ユニット21で直接実行可能なネイティブコードで書かれ、メモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ(sniff)コードと呼ばれるチェックコードが挿入され、システムメモリ22に記憶されたアプレットと
を備えたシステム」
(2-2)原査定の拒絶の理由に引用され、本願の優先日前の平成16年9月16日に出願公開された特開2004-258728号公報(以下、「引用例2」という。)には、図面とともに以下の記載がある。
(h)「【0008】
図1は、本発明の適用対象システム構成の一例を示す図である。本システムは、第2実行プログラム11を実行し、その実行時間を測定するコンピュータであるプログラム実行マシン1と、プログラムを開発し、ソースプログラム21を実行形式または中間コードの第1実行プログラム23に変換するコンピュータである開発機2と、第1実行プログラム23に実行時間測定のための監視コードを追加し第2実行プログラム11を生成するコンピュータであるプログラム操作機3と、それらを接続するネットワーク4とからなる。
・・・(省略)・・・
【0018】
次に監視コード追加部32は、ステップS25およびステップS27で前記監視コード追加に伴い監視コード自体および第1実行プログラム23の解析結果にJavaバイトコードレベルでのジャンプ先番地変更等の必要があるか否かを判断し、監視コードの修正の必要があれば、ステップS26で監視コードの修正を行い、第1実行プログラム23の修正の必要があれば、ステップS28で第1実行プログラム23の修正を行う。ステップS28における第1実行プログラム23の修正は、例えば、後述する図4のJavaソースプログラム第8行目および第19行目のtry節、finally節の追加が該当する。」
そうすると、引用例2には以下の技術事項(以下、「引用例2記載事項」という)が記載されていると認められる。
「実行プログラムに実行時間測定のための監視コードを追加した際に、前記監視コード追加に伴いジャンプ先番地変更等の必要があるか否かを判断して実行プログラムの修正を行うこと」
(2-3)原査定の拒絶の理由に周知技術として引用された「真島馨、ツールを使ってボトルネックを突き止めよう、日経ソフトウエア、日経BP社、2000年3月24日、第3巻、第4号、p.98-105」には、特に第101頁左欄第11行乃至第18行に以下の記載がある。
(j)「Quantifyは、前述したように対象となるアプリケーションの実行ファイル(exe)さえあれば、パフォーマンス分析できる。これは、アプリケーションのバイナリ・コードに直接チェック命令を挿入して、メモリー・アクセスを監視する方法によるもので、開発元の米Rational Softwareでは、OCI(Object Code Insertion)技術と呼んでいる。」

(3)対比
そこで、本件補正発明と引用発明とを対比する。
(3-1)引用発明における「演算ユニット21」及び「該演算ユニット21により実行されるプログラムを記憶するシステムメモリ22」は、本件補正発明の「中央演算処理ユニット」及び「前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリ」に相当することは明らかであり、また、引用発明のシステムも、特定の処理を実行するコンピュータそのものであって、コンピュータ・モジュールであると言える。
そうすると、本件補正発明と引用発明は、
「コンピュータ・モジュールであって、中央演算処理ユニットと、前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリ」
を備える点で一致する。
(3-2)引用発明の「エミュレータ39」と、本件補正発明の「マシンコード安全化ツール」を比較すると、引用発明の「アプレット」は一種のアプリケーション・プログラムであるから本件補正発明の「アプリケーション・プログラム」に相当し、また、引用発明の「サンドボックス」は本件補正発明の「前記コンピュータ・モジュールの指定メモリ領域」に相当し、また、引用発明の「アプレットの実行により、該アプレットに割り当てられたメモリ領域であるサンドボックスの外側のメモリにアクセスするのを防止するために、アプレット自身のコードにメモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ(sniff)コードと呼ばれるチェックコードを挿入」することは、本件補正発明の「アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入し」に相当するものと認められる。
また、引用発明の「エミュレータ39」は「演算ユニット21で直接実行され」、「システムメモリ22に記憶される」ものであり、本件補正発明の「マシンコード安全化ツール」も「中央演算処理ユニット上で直接実行し」、「メモリ内」に置かれる点で一致している。
そうすると、本件補正発明と引用発明は、
「前記中央演算処理ユニット上で直接実行し、アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入するように構成された前記メモリ内のツール」
である点で共通するものである。
(3-3)引用発明の「アプレット」は「演算ユニット21で直接実行可能なネイティブコードで書かれ」ており、本件補正発明の「アプリケーション・プログラム」も「中央演算処理ユニット上で直接実行するように」なっている点で共通しており、また、引用発明の「アプレット」は「メモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ(sniff)コードと呼ばれるチェックコードが挿入され、システムメモリ22に記憶され」ており、本件補正発明の「アプリケーション・プログラム」も「 前記安全性検査実行コードを含む、前記メモリ内の1以上」記憶される点で共通しているものと認められる。
そうすると、本件補正発明と引用発明は、
「前記中央演算処理ユニット上で直接実行され、前記安全性検査実行コードを含む、前記メモリ内の1以上のアプリケーション・プログラム」
である点で共通するものである。
(3-4)以上のことから、本件補正発明と引用発明とは、
「コンピュータ・モジュールであって、
中央演算処理ユニットと、
前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
前記中央演算処理ユニット上で直接実行し、
アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入するように構成された前記メモリ内のツールと、
前記中央演算処理ユニット上で直接実行され、前記安全性検査実行コードを含む、前記メモリ内の1以上のアプリケーション・プログラムと
を備えるコンピュータ・モジュール。」
である点で一致し、以下の点で相違する。

[相違点1]
本件補正発明の「マシンコード安全化ツール」では、「前記アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換えるように構成」されているのに対し、引用発明ではそのようになっていない点。
[相違点2]
本件補正発明の「アプリケーション・プログラム」は、「中央演算処理ユニット上で直接実行するようにコンパイル及びアセンブル」されたものであるのに対し、引用発明の「アプレット」は「演算ユニット21で直接実行可能なネイティブコードで書かれ」てはいるものの、「コンパイル及びアセンブル」されたものであるか否かが不明である点。
[相違点3]
本件補正発明の「アプリケーション・プログラム」は、「マシンコード」であるのに対し、引用発明の「アプレット」はどのようなコードとされているのか不明である点。

(4)当審の判断
上記相違点について検討する。
(4-1)[相違点1]について
この点について、上記引用例2には「実行プログラムに実行時間測定のための監視コードを追加した際に、前記監視コード追加に伴いジャンプ先番地変更等の必要があるか否かを判断して実行プログラムの修正を行うこと」(引用例2記載事項)が記載されており、また、一般にプログラムのパッチ修正時にコードの挿入・削除に伴う飛び先アドレスの補正は周知の技術(例えば、特開平5-189225号公報等参照)である。
そして、引用発明においても「アプレット」に「メモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ(sniff)コードと呼ばれるチェックコード」を追加挿入すれば、各コードのアドレスにずれが生じ、ジャンプ先アドレスの変更等が必要になる場合があることは当業者ならば自明であるから、該アドレスのずれに対処するために上記周知技術を採用し上記相違点1に係る構成とすることは当業者であれば容易に想到しえたことである。
したがって、この[相違点1]には格別の技術的進歩性はない。
(4-2)[相違点2]について
一般に、プログラムの作成にコンパイラやアセンブラを使用して最終的に直接実行可能ないわゆるマシンコードを生成することは技術常識であるから、引用発明の「アプレット」についても「コンパイル及びアセンブル」されたものであることは当業者であれば自明である。
したがって、この[相違点2]には格別の技術的進歩性はない。
(4-3)[相違点3]について
引用発明における「エミュレータ39」について、上記(2-1)(e)には「【0028】次いで、ステップ422は、アプレットのコードを図2のエミュレータ39によって実行されうるオブジェクトコードにコンパイルする。コードが要求されたものになったとき、コンパイルは直ちに又はパート毎に全て進行し、コンパイルされたコードは、サンドボックスの外側に配置された図4のコンパイルされたキャッシュ357に配置される。これらの方法におけるコンパイルは、在来のものであり、発明の本質には関係しない。」と記載されており、アプレットのコードをエミュレータ39によって実行されうるオブジェクトコードにコンパイルするとの記載があるものの、ここでいうオブジェクトコードがどのようなコードであるのかは不明である。
しかしながら、「アプレット」はそもそも演算ユニット21で直接実行可能なネイティブコードで書かれているのであるから、これをわざわざ別のコードに変換し、これをエミュレータ39が例えばインタープリタで解釈実行するというのは技術常識からして少々無理がある。
また、上記(2-1)(d)の「【0018】・・・ここで採用する特定のWx86VMエミュレータ39は、インテル「x86」プロセッサ(80386、80486、ペンティアムなど)用に書かれたプログラムをDigital Equipment Corp.のAlpha及びIBMのPowerPCのようなプロセッサで実行するためにオリジナルに開発されたものである。それについては、出願中であるシリアル番号08/912、454及び08/904、057により詳細に記載してある。本目的に関して、Wx86VMと呼ばれるいくぶん修正されたバージョンは、殆どの修正されていない命令をx88プロセッサ21に通すが、記載するようなその他をブロックし、変換する。・・・」、「【0020】アプレット362は、それが書かれた同じプロセッサプラットフォーム21で実行するので、エミュレータ39は、ActiveXコントロールを実行するために(ライン363で表された)個々の命令を変換する必要がない。しかしながら、それは、セキュリティを提供する目的のためにそれらをフィルタリングし、変換する。・・・」、及び上記(2-1)(e)の「【0031】現在の命令が、LOAD又はSTOREのようなメモリリファレンス命令であるならば、ステップ435によって、命令がそのサンドボックス内のアドレスを参照するならば、ステップ436がその命令を実行することができる。もしそうでなければ、ステップ437は、リファレンスがさもなければ許容されるかどうか判断する。もしそうならば、ステップ435はそれを実行し、さもなければ、ステップ438はアクセスをブロックし、エラーを返す。スニフコードはこれらのステップを実行する。他のX86命令は、ステップ436によって直接実行される。各命令の後、コントロールはステップ431に戻る。プロセス400は、ホストアプリケーションがそれを終了するまで、続く。」との記載(なお、下線は当審で付加したものである)によれば、エミュレータ39はアプレットのX86命令を変換せずにプロセッサ21(演算ユニット21)に渡して直接実行させていることから、スニフ(sniff)コードと呼ばれるチェックコードが挿入されたアプレットも少なくとも一部は演算ユニット21で直接実行可能なコード、すなわちマシンコードであるとするのが相当である。
また、さらに上記(2-3)(j)で示したように、アプリケーションのバイナリ・コードに直接チェック命令を挿入して、メモリー・アクセスを監視することは周知の技術であることも考え合わせれば、そもそも直接実行可能なアプレットに対して、メモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ(sniff)コードと呼ばれるチェックコードを挿入したアプレットも、演算ユニット21で直接実行可能なマシンコードとすることは、当業者であれば容易に想到しえたことである。
したがって、この[相違点3]には格別の技術的進歩性はない。
(4-4)結論
したがって、上記[相違点1]乃至[相違点3]に係る本件補正発明の構成は、引用発明、引用例2記載事項及び周知技術に基づいて当業者が容易に発明をすることができたものである。
そして、本件補正発明の作用効果も、引用発明、引用例2記載事項及び周知技術から当業者が予測できる範囲のものである。

(5)むすび
以上のとおり、本件補正発明は、引用発明、引用例2記載事項及び周知技術に基づいて当業者が容易に発明をすることができたものであるから、特許法第29条第2項の規定により、特許出願の際独立して特許を受けることができないものである。
したがって、本件補正は、平成18年法律第55号改正附則第3条第1項によりなお従前の例によるとされる同法による改正前の特許法第17条の2第5項で準用する同法第126条第5項の規定に違反するものであるから、同法第159条第1項で読み替えて準用する同法第53条第1項の規定により却下すべきものである。

3.本願発明について
平成24年5月24日付けの手続補正は上記のとおり却下されたので、本願の請求項14に係る発明(以下、「本願発明」という。)は、平成23年9月20日付け手続補正書の特許請求の範囲の請求項14に記載された、次のとおりのものである。
「【請求項14】
コンピュータ・モジュールであって、
中央演算処理ユニットと、
前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
前記中央演算処理ユニット上で直接実行し、
アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入するように構成された前記メモリ内のマシンコード安全化ツールと、
前記中央演算処理ユニット上で直接実行するように構成され、前記安全性検査実行コードを含む、前記メモリ内の1以上のアプリケーション・プログラムと
を備えるコンピュータ・モジュール。」

(1)引用例
原査定の拒絶の理由で引用された引用例及びその記載事項は、前記「2.(2)」に記載したとおりである。

(2)対比・判断
本願発明は、前記「2.(1)」で検討した本件補正発明の発明特定事項である「アプリケーション・プログラム」が、中央演算処理ユニット上で直接実行するように「コンパイル及びアセンブル」されるものであって、「マシンコード」であるとの限定を省き、また、「マシンコード安全化ツール」がさらに「アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換える」処理を行うものであるとの限定を省いたものに相当するものである。
そうすると、本願発明の発明特定事項を全て含み、更に他の限定事項を付加したものに相当する本件補正発明が前記「2.(4)」に記載したとおり、引用発明、引用例2記載事項及び周知技術に基づいて当業者が容易に発明をすることができたものであるから、本件補正発明から上記限定事項を省いた本願発明も、同様の理由により、引用発明、引用例2記載事項及び周知技術に基づいて当業者が容易に発明をすることができたものである。

(3)むすび
以上のとおり、本願発明は、引用発明、引用例2記載事項及び周知技術に基づいて、当業者が容易に発明をすることができたものであるから、その余の請求項について検討するまでもなく、特許法第29条2項の規定により特許を受けることができない。
よって、結論のとおり審決する。
 
審理終結日 2013-07-25 
結審通知日 2013-07-29 
審決日 2013-08-12 
出願番号 特願2008-526922(P2008-526922)
審決分類 P 1 8・ 121- Z (G06F)
P 1 8・ 575- Z (G06F)
最終処分 不成立  
前審関与審査官 多胡 滋  
特許庁審判長 金子 幸一
特許庁審判官 飯田 清司
仲間 晃
発明の名称 モジュール内の実行アプリケーション・プログラムの安全性を検査するシステム、方法、及びコンピュータプログラム  
代理人 木村 秀二  
代理人 大塚 康弘  
代理人 高柳 司郎  
代理人 大塚 康徳  
  • この表をプリントする

プライバシーポリシー   セキュリティーポリシー   運営会社概要   サービスに関しての問い合わせ