JP5728979B2 - 情報処理装置、ソフトウェア検査方法およびソフトウェア検査プログラム - Google Patents
情報処理装置、ソフトウェア検査方法およびソフトウェア検査プログラム Download PDFInfo
- Publication number
- JP5728979B2 JP5728979B2 JP2011020460A JP2011020460A JP5728979B2 JP 5728979 B2 JP5728979 B2 JP 5728979B2 JP 2011020460 A JP2011020460 A JP 2011020460A JP 2011020460 A JP2011020460 A JP 2011020460A JP 5728979 B2 JP5728979 B2 JP 5728979B2
- Authority
- JP
- Japan
- Prior art keywords
- state
- symbol
- information
- transition
- extracted
- 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 - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置を示す図である。情報処理装置10は、複数回の関数の呼び出しを行うプログラムの実行によって検査対象の記号列が入力または出力されたことを検出することができる。情報処理装置10は、記憶手段11、抽出手段12および検出手段13を有する。記憶手段11は、RAM(Random Access Memory)やHDD(Hard Disk Drive)などの任意の記憶装置を用いて実現できる。抽出手段12および検出手段13は、例えば、CPU(Central Processing Unit)およびRAMを用いて、ソフトウェア検査プログラムを実行することで実現できる。
次に、第2の実施の形態を説明する。第2の実施の形態に係る情報処理装置は、Java(登録商標)などのプログラミング言語を用いて記述されたアプリケーションプログラムを実行する。また、この情報処理装置は、アプリケーションプログラムの実行中、入力または出力のストリームを扱うAPIの呼び出しを検出し、ストリームに含まれる文字列を検査する。API呼び出しが行われたときに制御権を取得して検査などの処理が行われるようにすることを、APIフッキングと呼ぶことがある。以下の説明では、Javaを用いて記述されたプログラムの例を挙げている。ただし、第2の実施の形態のソフトウェア検査方法は、適用対象を特定のプログラミング言語に限定するものではない。
HDD103は、OSプログラムやアプリケーションプログラムなどのプログラム、および、CPU101の処理に用いられるデータを記憶する不揮発性の記憶装置である。HDD103は、内蔵の磁気ディスクに対し読み書きを行う。ただし、情報処理装置100は、他の種類の不揮発性の記憶装置を備えてもよい。
(ステップS1)オートマトン生成部150は、検査対象となる1またはそれ以上の文字列を示すパターン情報(例えば、正規表現により文字列のパターンを記載したもの)を取得する。そして、オートマトン生成部150は、パターン情報が示す文字列を検出するためのオートマトンを生成する。
(ステップS13)オートマトン生成部150は、ステップS11で抽出した1またはそれ以上の文字列の中から、文字列を1つ選択する。
(ステップS15)オートマトン生成部150は、ステップS13で選択した文字列の先頭側から、文字を1つ抽出する。
(ステップS19)オートマトン生成部150は、ステップS15で抽出した文字が、文字列の末尾の文字であるか判断する。末尾の文字である場合、処理をステップS20に進める。末尾の文字でない場合、処理をステップS15に進める。
(ステップS21)オートマトン生成部150は、ステップS13で選択した文字列が最後の文字列であるか判断する。最後の文字列である場合、処理をステップS22に進める。最後の文字列でない場合、処理をステップS13に進める。
(ステップS25)オートマトン生成部150は、変数n=2に設定する。
(ステップS27)オートマトン生成部150は、前状態=Sn-1,入力=x,後状態=Snである通常遷移を抽出する(Sn-1は深さn−1の状態であり、xは任意の1文字である)。また、オートマトン生成部150は、前状態=Sn-1,後状態=Stであるfailure遷移を抽出する(Stは任意の状態である)。
(ステップS30)オートマトン生成部150は、状態Snから状態#0へのfailure遷移を、オートマトンに追加する。
(ステップS32)オートマトン生成部150は、nを1だけ増加させる。
図12は、APIフッキングの第1の方法を示す図である。第1の方法では、解析部160が、検査対象のプログラムに代わってAPI呼び出しを行う。
例えば、APIフッキング部140は、検査対象のプログラムのロード時に、ReaderクラスまたはWriterクラスのメソッドを呼び出す命令を検索する。そして、検索した命令の直後にReader解析部161またはWriter解析部162の処理が実行されるように、検査対象のプログラムにコードを挿入する。コード挿入は、BCEL(Byte Code Engineering Library)などのライブラリを用いて実現してもよい。また、AspectJのLoadTimeWeaving機能を利用して実現してもよい。
図16は、文字列検出の手順例を示すフローチャートである。図16に示す処理は、前述のステップS5の中で実行される。
(ステップS42)検出部170は、解析部160で抽出されたストリーム識別子に対応する現在の状態を、状態管理テーブル124から検索する。
(ステップS45)検出部170は、ストリームの現在の状態および解析部160で抽出された文字に対応する通常遷移を、通常遷移テーブル121から検索する。そして、該当する通常遷移が存在するか判断する。存在する場合、処理をステップS47に進める。存在しない場合、処理をステップS46に進める。
(ステップS48)検出部170は、受理状態テーブル123を参照して、ストリームの現在の状態が受理状態であるか判断する。受理状態である場合、処理をステップS49に進める。受理状態でない場合、処理を終了して次のAPI呼び出しを待つ。
図17は、検出情報の例を示す図である。検出部170が生成する検出情報には、例えば、検出された文字列、当該文字列が含まれるストリームの識別子、呼び出されたAPIの情報、および、検査対象プログラム中のAPI呼び出しを記載したコードの位置が含まれる。文字列は、受理状態テーブル123から取得できる。ストリーム識別子は、状態管理テーブル124から取得できる。API情報およびコード位置は、例えば、ThreadクラスのgetStackTraceメソッドを呼び出すことで取得できる。
(1)オブジェクトAを通して文字“p”を取得する。
(3)オブジェクトAを通して文字“a”を取得する。
(4)オブジェクトBを通して文字“p”を取得する。
(6)オブジェクトAを通して文字“s”を取得する。
(7)オブジェクトAを通して文字“e”を取得する。
1番目の文字が抽出されると、検出部170は、まずオブジェクトAの識別子と状態#0を状態管理テーブル124に登録する。次に、入力pによる通常遷移が発生するため、検出部170は、オブジェクトAの状態を状態#0から状態#1に更新する。状態#1は受理状態でないため、検出情報を出力せずに次の文字が抽出されるのを待つ。
11 記憶手段
11a 状態遷移情報
12 抽出手段
13 検出手段
Claims (4)
- 入力または出力のストリームを指定して複数回の関数の呼び出しを行うプログラムの実行によって検査対象の記号列が入力または出力されたことを検出する情報処理装置であって、
複数の状態と、遷移条件としての記号が対応付けられた状態間の遷移と、前記複数の状態の中の受理状態と、を示す状態遷移情報を記憶する記憶手段と、
前記複数回の関数の呼び出しそれぞれが行われるとき、戻り値および引数の少なくとも一方に含まれる記号と、指定されたストリームの識別情報とを抽出する抽出手段と、
ストリーム毎に現在の状態を管理しており、前記複数回の関数の呼び出しそれぞれが行われる毎に、前記複数の状態の中の前記抽出手段で抽出された前記識別情報に応じた現在の状態と前記抽出手段で抽出された記号とから、前記記憶手段に記憶された前記状態遷移情報が示す遷移に従って現在の状態を更新し、更新後の現在の状態が前記受理状態である場合に、前記記号列の検出結果の情報を出力する検出手段と、
を有し、前記複数回の関数の呼び出しのうち一の呼び出しの際に更新された現在の状態は、前記一の呼び出しの次に行われる他の呼び出しの際に引き継がれる、
情報処理装置。 - 前記記号列を示す情報を取得し、前記記号列に含まれる各記号が順に抽出された後の現在の状態が前記受理状態になるように前記状態遷移情報を生成する生成手段、
を更に有する請求項1記載の情報処理装置。 - 入力または出力のストリームを指定して複数回の関数の呼び出しを行うプログラムの実行によって検査対象の記号列が入力または出力されたことを検出する、コンピュータが実行するソフトウェア検査方法であって、
前記複数回の関数の呼び出しそれぞれが行われるとき、戻り値および引数の少なくとも一方に含まれる記号と、指定されたストリームの識別情報とを抽出し、
複数の状態と遷移条件としての記号が対応付けられた状態間の遷移と前記複数の状態の中の受理状態とを示す状態遷移情報を記憶する記憶手段を参照して、ストリーム毎に現在の状態を管理しており、前記複数回の関数の呼び出しそれぞれが行われる毎に、前記複数の状態の中の抽出された前記識別情報に応じた現在の状態と抽出された記号とから、現在の状態を更新し、
更新後の現在の状態が前記受理状態である場合に、前記記号列の検出結果の情報を出力し、
前記複数回の関数の呼び出しのうち一の呼び出しの際に更新された現在の状態は、前記一の呼び出しの次に行われる他の呼び出しの際に引き継がれる、
ソフトウェア検査方法。 - 入力または出力のストリームを指定して複数回の関数の呼び出しを行うプログラムの実行によって検査対象の記号列が入力または出力されたことを検出するソフトウェア検査プログラムであって、コンピュータに、
前記複数回の関数の呼び出しそれぞれが行われるとき、戻り値および引数の少なくとも一方に含まれる記号と、指定されたストリームの識別情報とを抽出し、
複数の状態と遷移条件としての記号が対応付けられた状態間の遷移と前記複数の状態の中の受理状態とを示す状態遷移情報を記憶する記憶手段を参照して、ストリーム毎に現在の状態を管理しており、前記複数回の関数の呼び出しそれぞれが行われる毎に、前記複数の状態の中の抽出された前記識別情報に応じた現在の状態と抽出された記号とから、現在の状態を更新し、
更新後の現在の状態が前記受理状態である場合に、前記記号列の検出結果の情報を出力する、
処理を実行させ、
前記複数回の関数の呼び出しのうち一の呼び出しの際に更新された現在の状態は、前記一の呼び出しの次に行われる他の呼び出しの際に引き継がれる、
ソフトウェア検査プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011020460A JP5728979B2 (ja) | 2011-02-02 | 2011-02-02 | 情報処理装置、ソフトウェア検査方法およびソフトウェア検査プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011020460A JP5728979B2 (ja) | 2011-02-02 | 2011-02-02 | 情報処理装置、ソフトウェア検査方法およびソフトウェア検査プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2012160101A JP2012160101A (ja) | 2012-08-23 |
JP5728979B2 true JP5728979B2 (ja) | 2015-06-03 |
Family
ID=46840562
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011020460A Expired - Fee Related JP5728979B2 (ja) | 2011-02-02 | 2011-02-02 | 情報処理装置、ソフトウェア検査方法およびソフトウェア検査プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5728979B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7244756B2 (ja) * | 2019-06-24 | 2023-03-23 | 富士通株式会社 | 分析プログラム、プログラム分析方法およびプログラム分析装置 |
CN112015393B (zh) * | 2020-08-25 | 2024-05-03 | 中国银联股份有限公司 | 一种业务处理方法及装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0786837B2 (ja) * | 1987-02-28 | 1995-09-20 | 富士通株式会社 | 日本語処理方式 |
JPH1055363A (ja) * | 1996-04-25 | 1998-02-24 | Sharp Corp | 情報処理装置及び情報処理プログラムを記録したコンピュータ読み取り可能な記録媒体 |
US6901539B2 (en) * | 2002-04-10 | 2005-05-31 | Microsoft Corporation | ACPI name space validation |
JP4140920B2 (ja) * | 2006-04-20 | 2008-08-27 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 個人情報の保護を支援する情報処理装置 |
GB2437560A (en) * | 2006-04-28 | 2007-10-31 | Roke Manor Research | Constructing Aho Corasick trees |
JP5238034B2 (ja) * | 2008-09-05 | 2013-07-17 | 日本電信電話株式会社 | 近似照合装置、近似照合方法、プログラム及び記録媒体 |
US8484147B2 (en) * | 2008-12-19 | 2013-07-09 | Intel Corporation | Pattern matching |
-
2011
- 2011-02-02 JP JP2011020460A patent/JP5728979B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2012160101A (ja) | 2012-08-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7406684B2 (en) | Compiler, dynamic compiler, and replay compiler | |
JP5996145B1 (ja) | プログラム、情報処理装置、及び情報処理方法 | |
JP2006185211A (ja) | プログラム解析装置、テスト実行装置、その解析方法及びプログラム | |
JP6179331B2 (ja) | ログ出力条件設定プログラム、装置、および方法 | |
JP6070847B2 (ja) | 検証方法、検証装置および検証プログラム | |
JP2006031109A (ja) | 管理システム及び管理方法 | |
US20090064088A1 (en) | Method and system for displaying http session entry and exit points | |
JP2020119348A (ja) | 解析プログラム、解析方法および解析装置 | |
JP2008204405A (ja) | ソフトウェアのリグレッションテストシステム、リグレッションテストプログラムおよびリグレッションテスト方法 | |
CN114462044A (zh) | 一种基于污点分析的uefi固件漏洞静态检测方法及装置 | |
JP7077909B2 (ja) | デッドコード解析プログラム、デッドコード解析方法及びデッドコード解析装置 | |
JP5728979B2 (ja) | 情報処理装置、ソフトウェア検査方法およびソフトウェア検査プログラム | |
US20140095938A1 (en) | Latent defect identification | |
US8762953B2 (en) | Exception-based error handling in an array-based language | |
JP2009075886A (ja) | 仕様欠陥検証システム、その方法及びプログラム | |
KR101052735B1 (ko) | 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치 | |
US10108529B2 (en) | Dynamic instrumentation based on detected errors | |
JP7111967B2 (ja) | プログラム検証プログラム、プログラム検証方法およびプログラム検証装置 | |
US8843896B2 (en) | Metamodeling contextual navigation of computer software applications | |
JP6770335B2 (ja) | 解析装置及びプログラム | |
JP6955162B2 (ja) | 解析装置、解析方法および解析プログラム | |
JP5550578B2 (ja) | エントリ書換装置及びエントリ書換プログラム | |
WO2011104889A1 (ja) | 計算機システム、メモリ管理方法及びメモリ管理プログラム | |
JP2009064125A (ja) | サーバ装置、そのプログラム | |
JP7327471B2 (ja) | テスト装置、テスト方法及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20131007 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20140611 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20140617 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20140804 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20141111 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20150212 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20150219 |
|
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: 20150310 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20150323 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5728979 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |