BitDefenderコマンドライン版 簡易セットアッパー

2012年4月16日

Error: core initialization failed: (null)エラーについて


BitDefenderコマンドライン版でスキャンすると上記エラーが出て、スキャンができないという症状がおこっています。アップデート操作をしてもこのエラーが治らない場合には、BitDefenderコマンドライン版をインストールしたフォルダにあるPluginsフォルダの中のファイルの中で0バイトのサイズのものが存在していないかチェックをしてみて下さい。(Explorerを詳細表示にすると探しやすいです) 大抵の場合はemalware.298というファイルがそれに該当するようです。

こちらのページにアクセスして、0バイトのファイルと同名ファイルをダウンロードし、そのファイルでPluginsフォルダの0バイトファイルを上書きしてしまってください。これで治るはずです。

1.簡易インストーラとの違い

BitDefenderコマンドライン版を簡単に導入できる簡易インストーラの第2弾を作成しました。従来版と区別するため、名前を簡易セットアッパーと名づけました。

簡易インストーラと簡易セットアッパーの違いを表にまとめておきます。

  簡易インストーラ   簡易セットアッパー
 対象OS  98/Me/2000/XP/Vista/7  2000/XP/Vista/7
 インストール先  %commonprogramfiles%\softwinで固定  任意
 必要とするユーザー権限  パワーユーザー以上  管理者権限

今回のセットアッパーでは思い切ってWindows98系を切り捨てました。それによって98系の縛りがなくなったため、バッチファイルの書式などシンプルになりました。

逆に追加された機能は、インストール先をユーザーが任意に選べるようにしたことです。簡易インストーラではインストール先をBitDefender Free版をインストールした時のデフォルトフォルダに固定していました。これについては次項をお読み下さい。

もう1つ、ユーザー権限について変更があります。簡易インストーラはパワーユーザーでもインストール作業ができましたが、簡易セットアッパーでは管理者のみになります。Vista登場以来、アプリケーションのインストールは管理者権限でというのが一般的になりました。たとえばインストーラをsetup.exeというような名前にしただけでも昇格確認ダイアログが出ます。これはWindows Vista以降の主流ということなので、今回これに乗っかりました。もしも2000/XPでパワーユーザーで使いたいという方は、簡易インストーラをお使い下さい。

結局どう使い分ければよいかということを、以下の表にまとめました。

新規/導入済み   OS  対処法
 新規  98/Me  簡易インストーラ
 2000/XPでパワーユーザー
 2000/XP/Vista/7  簡易セットアッパー
 導入済み  98/Me/2000/XP  そのまま継続使用
 Vista/7でUAC無効
 Vista/7でUAC有効  簡易セットアッパーで再導入

(表中のUACとはユーザーアカウント制御のことで、OS初期状態では有効になっています。)

2.Vista/7でのアプリケーションストップエラーへの対応

そもそも新しいインストーラを作成する必要に迫られた理由は、BitDefenderの2010年6月のアップデート以降に、Vista/7でユーザーアカウント制御機能を有効にしている場合に不具合が生じるようになったからです。

具体的に言うと、BitDefenderコマンドライン版の心臓部であるBitDefender command line scannerを、BitDefender Free版をインストールした時の定位置である [システムドライブ名]:\Program Files\Common Files\Softwin 以下に配置すると、主要ファイルの1つであるbdcore.dllが古いまま更新されず、bdc.exeがエラーで強制終了するというものです。

なぜこのようなことが起こるようになったのか? これを理解するためには「ファイルの仮想化」という仕組みを理解する必要があります。

Vista以降のWindowsではセキュリティを強化するため、一部の大事なフォルダを保護して勝手に書き込みができないようになりました。大事なフォルダとは標準環境で

のことです。それに加えて64bit版では、C:\Program Files (X86) も含まれます。もちろんこれらの階層下のサブフォルダも含まれます。

たとえばExplorer上で、これらのフォルダ内へファイルをよそからコピーしようとして下さい。管理者権限のあるユーザーでもこれをやろうとすると拒否されて、管理者に昇格してでもコピーをするのか尋ねられます。つまり、いちいち確認をするわけですね。

上のようなファイルをコピーしようとする作業はユーザーの明確な意志によって引き起こされたものですが、それではアプリケーションがバックグラウンドでこっそりと行うような作業はどうでしょうか?

たとえば、あるアプリケーションはメインウインドウを閉じて終了するときに、左上のカドのデスクトップでの座標、ウインドウの幅、ウインドウの高さをピクセル単位で保存し、実行ファイルと同じフォルダ内に設定ファイルを作って、その中に情報を記録するものとします。次に起動したときに、前回閉じたときと同じ場所、同じ大きさでウインドウが表示されるようにするためですね。実はこのようなアプリケーションは多いのですが、ユーザーがこのことに対して特別な意識を持つことは無いと思います。「あ、今設定ファイルに書き込まれた」などと感じることは無いですよね。

このような場合に、Windowsが「設定ファイルに書き込むことを認めますか?」というようなダイアログをいちいち出して、それに対してユーザーが「OK」だの「キャンセル」だのと応答しなければならなかったとしたら、恐ろしく効率が悪くなります。アプリケーションは幾つもありますし、設定だってウインドウの大きさ以外にもあらゆる情報を記録しているからです。だからといって無条件でアプリケーションがやることは何でも認めちゃおうということにすれば、セキュリティの強化もへったくれもありません。

そこで考えられた仕組みが「ファイルの仮想化」です。アプリケーションの実行ファイルがProgram Filesの中に書き込もうとしたら、Vistaや7はそこへの書き込みを許さず、別のところに書き込ませます。その代替地というのが「バーチャルストア」と呼ばれるフォルダです。この機能によって、Program Filesのなかにユーザーが知らない間に何か勝手に書き込まれることを防いでいるのです。

BitDefenderコマンドライン版が C:\Program Files\Common Files\Softwin\BitDefender Scan Server\ にあるとします。これは本来BitDefenderフリー版が作る位置といっしょです。フリー版はインストール先を任意に指定できますが、本体とは別のBitDefender command line scannerは、選んだインストール先に関わらず必ずここに配置されます。私の作った簡易インストーラもこれに倣い、インストール先をこの場所に固定してきました。この中にあるbdc.exeを/updateオプションで実行すると、標準設定で同所のPluginsフォルダ内にファイルをダウンロード・保存します。そして今回分ったことですが、bdcore.dll.updpndという名前で更新されたファイルがあると、このファイルをリネームして元々のbdcore.dllを上書きすることによって更新する仕組みになっているようです。

さてここで「ファイルの仮想化」が有効な場合を考えて見ましょう。bdc.exe /update によってダウンロードされたファイル群が書き込まれるのは
C:\Program Files\Common Files\Softwin\BitDefender Scan Server\Plugins
ではなくて、そのバーチャルストアである
C:\Users\[アカウント名]\AppData\Local\VirtualStore\Program Files\Common Files\Softwin\BitDefender Scan Server\Plugins
の中になるのです。普通のウイルス定義ならば、OSが代替地から自動的に読み出すような仕組みを作っていますから、きちんとバーチャルストアから新しくダウンロードしたファイルが読み込まれ問題は出ません。ただし、bdcore.dll.updpndをbdcore.dll にリネームして
C:\Program Files\Common Files\Softwin\BitDefender Scan Server\bdcore.dll
を"上書き"する機能は遮断されてしまいます。前記のように、Program Files配下にアプリケーションが勝手に書き込むことはできないからです。

ということで、Vista/7でUACを有効にしていた場合には、従来の簡易インストーラで作った環境ではbdcore.dllが更新されず、とうとう2010年6月に、古いbdcore.dllを使っていたときの不具合が表面化したわけです。

対応策は、「ファイルの仮想化」機能が働かないフォルダにBitDefenderコマンドライン版をインストールすることです。そこで今回、ユーザーがインストール先を選べるようにしました。と同時に、Vista/7では、Program Files/ProgramData/Windowsへはインストールできないようにしました。(2000/XPではインストール可)

3.インストール

私が作った簡易セットアッパーです。ダウンロードしてローカルに保存してください。

bit_com2.zip

bit_com2.zip を解凍して中身のbd2_setup.exe を実行します。

なお従来の簡易インストーラで環境が作ってあるときには、起動しないようにしてあります。この場合には、先にコントロールパネル経由でBitDefenderコマンドライン版をアンインストールしてから、あらたにセットアッパーを起動して下さい。なお簡易セットアッパーがインストールされている環境では、上書きインストールもできます。(今のところ意味はありませんが)

あとはウィザードに従って進めてください。作業が終了したら、bd2_setup.exeおよび別途ウイザード途中で入手するbd_free_v10.exeは削除してかまいません。

 今回は、Inno Setupを使ってインストーラを作っています。無料で高機能ということで、最近採用しているオンラインソフトも多いです。

 ただし、ただ作っただけでは面白くないという私の勝手な理由から、ちょっと遊んでいます。ウイザードの1ページ目でバージョンを選べるようになっています。ちなみにどのバージョンを選んでも実際にインストールされるものは同じで、単にウイザードの見た目が変わるだけです。

4.アンインストール

もしも【BitDefenderコマンドライン版】をアンインストールしたくなったら、コントロールパネル経由でアンインストールします。【BitDefenderコマンドライン版】がインストールされていたフォルダを削除し、関連レジストリ項目を消去して、インストール前の状態に戻します。

プログラムの追加と削除

5.実際に使ってみる

初めて使う時は、ウィルス定義が空っぽなので、まずアップデートで定義を入手します。何でも良いので何かのアイコンを右クリックして、コンテキストメニューの『BitDefenderをアップデート(U)』を選びます。

コンテキストメニュー

下図のような画面が開き、自動的にアップデートされます。初回のみ少し時間がかかります。

アップデート画面

ウィルススキャンをする時は、スキャンしたいファイルなどのアイコンのコンテキストメニューから『BitDefenderでウィルススキャン』を選びます。

スキャン画面

このように結果が表示されます。

さて、ウイルスが見つかった時には赤い文字で表示されます。こうなったら気を引き締めてください。下図のように修復・削除・移動・無視・何もせず終了など、ユーザーの判断を選択するようなメッセージが英語で表示されます。(なお文字化けが激しいのですが気にしなくて結構です。2バイトファイル名でも中身はきっちりチェックします。表示だけの不具合です。)

ウイルス発見画面

これは、Winny無視リストサイトの情報を使って探してきた、ウイルス入りの危険なzipファイルをスキャンしたところです。コミックを炊いたもので、多くの画像ファイルの中に、たった1つだけ悪質な実行ファイルを混ぜてあるものでした。さてこのような場合、一般的な心情としてはDisinfectを選びたいでしょう。そこでdキーを押してみます。

修復失敗画面

結果は上図のとおりです。修復に失敗しました。修復に失敗とか言うと、「あー、やられた」と思うかもしれませんが、この段階ではまだ感染していません。そもそも、ウイルスとして専用に作られた実行ファイルを無害化(disinfect)できるとは考えないことです。

Moveに関しては、上のほうで作った Infected フォルダに感染ファイルを移動させますが、単純な移動に過ぎません。Infected フォルダが特別な防御機構を持ったフォルダというわけではないのです。あとでメーカーに検体を提出しようというような場合には適しています。提出が済んだら決して実行することなく手動で消去しておきましょう。

ちなみにXP Pro において、InfectedフォルダやSuspectedフォルダ内で実行ファイルを実行できないようにするには、「ファイル名を指定して実行…」からsecpol.msc /s と打ち、「ソフトウェア制限のポリシー|追加の規則」項目で右ペインで右クリックし、「新しいパスの規則...」で下図のようにInfectedフォルダなどを指定すれば、実行ファイルを実行できないフォルダになります。

特別な防御機構を持ったフォルダ

たとえばbdc.exeをInfectedフォルダ内にコピーして、ためしに実行してみようとすると、下図のようなアラートが出て実行できなくなります。

ソフトウェアの制限ポリシー

XP Home にはこの機能はありません。正確に言うと、機能はあるのだが、上で紹介したPro版のようなフロントエンドが用意されていないだけで、機能自体は存在するようです。同じことをしたければ、直接レジストリに書き込みます。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\0\Paths\{11111111-2222-3333-4444-555555555555}]
"SaferFlags"=dword:00000000
"ItemData"="C:\\Program Files\\Common Files\\Softwin\\Bitdefender Scan Server\\Infected"

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\0\Paths\{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}]
"SaferFlags"=dword:00000000
"ItemData"="C:\\Program Files\\Common Files\\Softwin\\Bitdefender Scan Server\\Suspected"

{*******-****-****-****-************}という部分はGUIDと呼ばれる乱数です。上のように綺麗な数字の羅列ではなく、本来は乱数にすべきです。【GENGUID】などGUID作成ツールを使うと簡単に作れるので、自分で作成したGUIDで上の{}内を置き換えてから結合してください。当然1つめの{}と2つ目の{}のGUIDは異なるものにしてください。また、上の例はシステムがCドライブの例ですから、そうでない人は適宜書き換えてください。なお、レジストリを書き換えた場合は、一度OSを再起動しないと、この機能が有効になりません。

Ignore やQuit は選ぶ必要はないでしょう。

ということで、選択肢はDeleteが望ましいのです。lキー(アルファベットのエル)を押します。

駆除成功画面

今度こそ感染ファイルが削除されました。それ以外の感染していないファイルは残っています。すなわち、zip ファイルを解凍することなく、zip の中から感染ファイルだけを取り除いて、危険性のないzip ファイルとして残ったわけです。この状態は、理想的な修復状態ですね。(ただし感染していないからといって、こういう著作権違反のファイルを、このように入手してはいけません。)

さて次の例は、うじゃうじゃとウイルスが含まれているzip ファイルです。

ウイルス雨あられ

こうなると、lキー連打です。

駆除完了の図

結局、27個感染ファイルが含まれていました。27回キーを押しました。一応残りかすのようなzipファイルが残りますが、これを利用しようという猛者はいないでしょう。残ったものも即、手動で削除しました。

さて、今回お見せしたのは単独ファイルのスキャンでしたが、ドライブアイコンの右クリックでドライブを丸ごとスキャンすることも出来ます。しかし、かなり時間がかかる(数日単位になるかも)と思うので、お勧めしません。bdcscan.batの/list オプションを削除しておくと多少早くなるかもしれませんが、進行状態が把握できなくなってしまいます。

数日単位と書いたので、「ええっ!?ホントかよ」という意味の書き込みを2ちゃんねるで何度も見ました。これはお使いのPCの状態によるもので、PCの処理能力が低い、ドライブの使用容量が大きい、圧縮ファイルを多く保存しているなどの条件が重なるとスキャンに時間が掛かるようになります。特に圧縮ファイルは一々中身までスキャンするので、これが所要時間を決めるかなり大きな要素になります。Daemon のような仮想ドライブソフトで使うためにイメージファイルをたっぷり保存しているような方は、1個のファイルで10分以上ということもありえるので、全体では日にちをまたがってスキャンするようなことにもなりかねません。逆に、圧縮ファイルなどほとんど保存しておらずPCも高性能という場合は、ドライブスキャンでも30分以内で終わるような場合もあるでしょう。

「自分の場合はどうなんだろう?」と疑問を感じたら、実際にやってみて確かめるしかありません。やり始めたけれど、時間が掛かりすぎて途中で止めたくなったならば、
Ctrl+Cキーで止めることができます。

Ctrlキーを使って複数のファイルなどを選択しておいてのスキャンも出来ますが、DOS窓がたくさん開いて、かなりウザイです。このような場合、1階層上のフォルダを選択してスキャンしたほうが良いでしょう。

6.まとめ

コマンドライン版というと、なにかCUIみたいなイメージを持たれるかもしれませんが、実際の使い方は右クリックして実行するだけです。表示画面がコマンドプロンプトというだけなのです。

お勧めの使い方は、上の例のような、アングラなサイトやP2Pで入手したような出自が怪しいソフトをスキャンするようなやり方です。展開前の圧縮ファイルのままでウイルスを見つけ、駆除することができます。ISOファイルやISOをRARで固めたようなファイルにも対応しています。

2ちゃんのダウソ板の住人などには、必携のソフトです。

補足1

BitDefender コマンドライン版を導入すると、関連付けされていない拡張子を持つファイルをダブルクリックするとスキャンが始まってしまうという現象が出ることがあります。関連付けの無いファイルをダブルクリックしたときには、「ファイルを開くプログラムの選択ダイアログ」が出て欲しいという場合は、レジストリエディタで、HKEY_CLASSES_ROOT\*\shellの既定値に「open」を入れて見てください。

open作成

Regファイルの書式ならば以下のようになります。(Win9Xに合わせてREGEDIT4にしていますが、2000/XPでも機能します)

REGEDIT4

[HKEY_CLASSES_ROOT\*\Shell]
@="open"

もしも、上の設定を元に戻したければ

REGEDIT4

[HKEY_CLASSES_ROOT\*\Shell]
@=-

ただしWin9X系では上の @=- というのは機能しないようなので、戻したい場合はレジストリエディタで直接上図の反転している(標準)キーを削除してください。

残念ながら、openという値を書き込む方法ではもダメな場合もあります。この場合のみ、以下のRegファイルを結合してください。

REGEDIT4

[HKEY_CLASSES_ROOT\*\Shell\open\command]
@="RUNDLL32.EXE shell32.dll,OpenAs_RunDLL %1"

これで、関連付けの無いファイルをダブルクリックすると「ファイルを開くプログラムの選択ダイアログ」が出るようになるはずです。もしも上の設定を元に戻したければ、

REGEDIT4

[-HKEY_CLASSES_ROOT\*\Shell\open]

で該当キーが削除できます。

補足2

『Web経由で入手したインストーラー用ファイルをBitdefenderコマンドライン版でスキャンしようとすると、スキャンじゃなくインストールが始まってしまう』という誤解があるようなので、ここで補足説明をしておきます。

例として、ダウンロードしてきたばかりのBitdefender Free V.10 のインストーラをBitdefenderコマンドライン版を使ってスキャンしてみます。すると次のようなダイアログが開きます。。

セキュリティの警告ダイアログ

これをみて、「うわっ、インストールが始まっちゃう」と早とちりしてはいけません。構わずに実行してください。すると何事も無かったように、インストールではなく、下図のように普通にウイルススキャンが始まります。

普通にスキャンされる

これは、上の図にもある、Zone Identifier という仕組みのせいです。Windows XP SP2以降で採用されています。Internet Explorerなどを使ってWebからダウンロードした特定の拡張子を持つファイルを実行しようとすると、ユーザーに対していったん確認を求める仕様になっているのです。このページで解説しているBitdefenderコマンドライン版では、このZone Identifier によるチェックを回避できません。よって上の例のようになってしまうわけです。ただしワンクリック手間が増えるだけで、決してスキャンが行われないとか、インストールされてしまうとか言うわけではないということは理解しておいてください。

もしも事前に警告ダイアログを出ないようにしたい場合には、対象ファイルを右クリックしプロパティを選んでください。全般タブで下図のようにブロックの解除をしてからOKしておけば、そのファイルに関しては、それ以降警告が出なくなります。

ブロックの解除

さらに、このファイルに対してなどという限定的なことではなく、今後一切Zone ID による警告を出さないようにしたいという場合には、レジストリを書き換える必要があります。savezoneinformationでGoogle検索すると、具体的なやり方が見つかると思います。またレジストリを直接いじりたくない方などは、「いじくるつくーる」の「システムの禁止設定(個人用設定)」にこの設定があります。

 わざわざレジストリをいじらなくても、3つ上の図の段階で「この種のファイルであれば常に警告する」のチェックをはずせばよいだろうと考えますよね。ところがやってみるとわかりますが、次に別の拡張子EXEのファイルをダウンロードして保存し、いざ実行すると意に反して同じ警告が出てしまいます。Windows日本語版の訳し方に問題があるとのことらしいのですが、ここのチェックをはずすことは、すぐ上の図で「ブロックの解除」をすることと同義に過ぎないようです。

余談ですが、保存したファイルを実行する段階ではなく、IEでWebからダウンロードしようとしたときに出る「ファイルのダウンロード」ダイアログにも「この種のファイルであれば常に警告する」というチェックボックスがあります。ややこしいことに、ここのチェックは日本語の意味そのままのものです。つまり一度チェックをはずしてしまうと、同種のファイルでは2度とダイアログが出なくなるのでご注意下さい。回復する方法はありますが、レジストリを直接修正する必要があります。このページではこれ以上詳しく書くことは本論から大きく脱線してしまうので、ここまでにしておきます。興味のある方は"この種のファイルであれば常に警告する"でGoogle検索してください。

<ホームへ>