| ソフトアイス | |
|---|---|
| 原作者 | NuMega |
| 開発者 | コンピュウェア |
| リリース | 1987年 (1987年)(DOS) |
| 最終リリース | v4.05 / 2000 ( 2000 ) [ 1 ] |
| オペレーティング·システム | マイクロソフトWindows |
| タイプ | デバッガ |
| ライセンス | 専有 |
SoftICEは、 DOSおよびWindows XPまでのWindowsに対応したカーネルモードデバッガです。Windowsのバックグラウンドで動作するように設計されているため、オペレーティングシステムはSoftICEの存在を認識しません。アプリケーションデバッガとは異なり、SoftICEは指示に応じてWindows上のすべての操作を一時停止することができます。低レベルの機能を備えているため、SoftICEはソフトウェアクラッキングツールとしても広く利用されています。
マイクロソフトは、 WinDbgとKDという2つのカーネルモードデバッガーを無償で提供しています。ただし、WinDbgとKDの全機能は、相互接続された2台のコンピュータを使用した場合にのみ利用可能です。そのため、SoftICEは、複雑なドライバ関連の開発において非常に有用なツールとなります。最後にリリースされたバージョンはWindows XP向けでした。
DOSおよび互換OS向けには、旧バージョンが存在します。SoftICEは元々NuMega社によって開発され、 1997年にCompuware社に買収されました。その後、Compuware社は2009年にその権利をMicro Focus社に売却しました。現在、Micro Focus社はソースコードと特許を所有していますが、SoftICEの積極的なメンテナンスは行っていません。
「Soft」はソフトウェアを指し、「ICE」はインサーキットエミュレータの略称である。
DOS版SoftICEのオリジナル版は、1987年にNuMegaの創設者であるフランク・グロスマンとジム・モスクンによって開発されました。80386アセンブリ言語で書かれたこのプログラムは、オペレーティングシステムの役割を果たし、仮想8086モードでソフトウェアを実行しました。価格は386ドルでした。
SoftICE/W(Windows用)は1990年代に開発され、Andrew Schulman、David Maxey、Matt Pietrekによる「Undocumented Windows」の執筆に大きく貢献しました。SoftICE/Wは、それ以前に開発されたあまり知られていない製品であるSoftICE for NetWare(32ビット保護モード)から派生したものです。Microsoftのデバッガに対するSoftICEの主な利点の1つは、シリアルポート経由で2台目のマシンを接続する必要がなく、1台のマシンでデバッグが可能だったことです。
SoftICEの主な開発者は、Dom Basile(「Mr. SoftICE」)、Tom Guinther(Kitchen Sink、シンボルエンジン)、Gerald Ryckman(ビデオドライバおよびKitchen Sink )、Ray Hsu( Windows 95用ビデオドライバ)、Dan Babcock(SoftICE/NT 3.1/3.5:ユニバーサルビデオドライバ、シンボルエンジン)であり、Frank Grossman、Jim Moskun、Matt Pietrekなど、さまざまなNuMega開発者が貢献した。
1998年、SoftICE/95のコードベースがWindows NTプラットフォーム上で動作するように移植された。
SoftICEの新しいバージョンは、Microsoft Windowsの奥深くまでパッチを適用します。そのため、古いバージョンのSoftICEは、新しいバージョンのWindowsと互換性がほとんどありません。そこでCompuwareは、SoftICEを常に最新の状態に保ち、最新のMicrosoft Windowsバージョンと同期させるために、サブスクリプション方式で提供しました。
SoftICEは以前はCompuwareのDriverStudioパッケージの一部として提供されていましたが、2006年4月に提供が終了しました。
DriverStudio製品群は、「様々な技術的・ビジネス上の問題、および一般的な市場状況」を理由として、2006年4月3日をもって販売終了となりました。メンテナンスサポートは2007年3月31日まで提供されました。
ソフトウェアベンダー各社は、SoftICEをソフトウェア分析ツールとして利用する人々から自社を守るため、幅広い対策を講じている。
例えば、初期の対策として、一部のベンダーが同じマシン上でSoftICEが実行されていることを検出するために使用したコードを以下に示します。
mov eax , dword ptr [ pIDT + 2 ] ; eax -> IDT add eax , 8 ; eax -> int 1 ベクトルmov ebx , [ eax ] ; ebx == int 1 ベクトルadd eax , 16 ; eax -> int 3 ベクトルmov eax , [ eax ] ; eax == int 3 ベクトルand eax , 0 FFFFh ; セレクタを削除and ebx , 0 FFFFh ; その一部sub eax , ebx ; 変位を検索cmp eax , 10 h jne HackedVector ; 等しくない場合、SoftICE がこれらのベクトルを改ざんした可能性が高いその後、より効果的な対策が数多く開発されてきた。それらのほとんどは、経験や決意の浅いハッカーを抑止する程度にしか効果がないが、SoftICEはもはやソフトウェア解析初心者にとって最適なツールとは言えない。
現代のソフトウェア解析対策は、Themida、Armadillo、ASProtectなどのより高度なパッカー/プロテクターに基づいており、プログラムコードをパックし、エントリポイントアドレスを改ざんすることで、プログラムの元のエントリポイント ( OEP ) を見つけるのを困難にしています。これは、プログラムのインポートアドレステーブル(IAT) についても同様です。ただし、Windows NT 用の IceStealth や IceExt、 Windows 9x用の Icedump や IcePatch など、SoftICE を隠すためのツールも利用可能です。[ 2 ]
1989年、BYTEはSoft-ICEをBYTEアワードの「優秀賞」受賞者の1つに挙げ、「 80386マシン上で8086ベースのアプリケーションを開発する場合、これは必須かつ手頃な価格のツールです」と述べた。[ 3 ]
Syserと呼ばれる商用カーネルレベルデバッガは、SoftICEが残した機能を引き継ぐと主張している。
OllyDbgは、Oleh Yuschuk氏が開発した32ビットのアセンブラレベルデバッガで、シェアウェアですが無料で利用できます。ただし、ユーザーモードデバッグにのみ使用可能です。
SoftICEに似たオープンソースのカーネルデバッガであるRasta Ring 0 Debugger(RR0D)が利用可能です。[ 4 ] [ 5 ]これは、 Microsoft Windows、Linux、OpenBSD、NetBSD、およびFreeBSDの低レベルデバッグを提供します。このプロジェクトは現在、積極的にメンテナンスされていないようです。2016年6月現在 GitHubのソースコードリポジトリの最後の変更は2008年12月に行われた。[ 6 ]
BugChecker と呼ばれるデバッガは、Windows 2000および XP 用の 32 ビット シングルホスト カーネル デバッガであり、教育目的で開発され、オープンソースとして公開されています。BugChecker を使用すると、Windows 2000 および XP のシングルプロセッサ版とマルチプロセッサ版の両方で、ユーザー コードとカーネル コードの両方をトレースできます。[ 7 ]
SoftICE の後継となる現代的なデバッガ BugChecker (上記とは無関係) が、2023 年に Vito Plantamura によってリリースされました。他のローカルカーネルデバッガとは異なり、Windows XP から Windows 11 まで、32 ビット版と 64 ビット版の両方をサポートしています。これを実現するために、デバッガはシリアルケーブル通信を傍受することで、マシンが別のシステムによってデバッグされているように見せかけ、そのディスプレイをフレームバッファに直接描画します。この方法は、SoftICE 自体を含む以前のアプローチと比較して、安定性と互換性を大幅に向上させます。[ 8 ]
多くのハイパーバイザーは、仮想化されたプロセッサを直接制御できるデバッガインターフェースを提供することで、仮想マシン内で実行されているカーネルのデバッグを可能にしている。これにより、カーネル自体にネイティブなデバッグ機能が備わっていない場合でもデバッグを行うことができる。