Mara's dad Yes I can ! | J'éspère que çà t'aidera...
C'est de l'ASM de bourin qu'a jamais fait des progs de plus de quelque dizaines d'instrucions, le tout le plus souvent en direct live avec DEBUG !
J'en ai fait qu'un seul (Avec TASM il me semble) et je viens de le retrouver :
Code :
- Title 'AMORCE.ASM', 'Change l'amorce d'une disquette non Bootable'
- ;
- ; Version 2.0
- ;
- ; Donn'e . copier dans le premier secteur d'une disquette non bootable
- ; Elle contient un programme qui affiche un message et attends la
- ; frappe de la touche SHIFT pour relancer la machine.
- MY_PROG segment
- org 00100h
- assume cs:MY_PROG, ds:MY_PROG, ss:MY_PROG ; segment definitions.
- Debut: JMP Copier
- BootSecteur LABEL Byte
- DB 0E9h,0C9h,000h
- Signature LABEL Byte
- DB 000h,000h,000h,000h,000h,000h,000h,000h
- DB 000h,002h,001h,001h,000h
- DB 002h,0E0h,000h,040h,00Bh,0F0h,009h,000h,012h,000h,002h,000h,000h,000h,000h,000h
- DB 000h,000h,000h,000h,00Fh,000h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h
- DB 000h,001h,002h,000h,001h,010h,021h,000h,000h,000h,000h,000h,000h,000h,000h,000h
- DB 0C9h,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0BBh,0BAh,020h,044h
- DB 049h,053h,051h,055h,045h,054h,054h,045h,020h,0BAh,0BAh,020h,04Eh,04Fh,04Eh,020h
- DB 020h,020h,020h,020h,020h,020h,0BAh,0BAh,020h,042h,04Fh,04Fh,054h,041h,042h,04Ch
- DB 045h,020h,020h,0BAh,0BAh,020h,052h,045h,04Dh,050h,04Ch,041h,043h,045h,05Ah,020h
- DB 0BAh,0BAh,020h,045h,054h,020h,020h,020h,020h,020h,020h,020h,020h,0BAh,0BAh,020h
- DB 041h,050h,050h,055h,059h,045h,05Ah,020h,020h,020h,0BAh,0BAh,020h,053h,055h,052h
- DB 020h,020h,020h,020h,020h,020h,020h,0BAh,0BAh,020h,053h,048h,049h,046h,054h,020h
- DB 020h,020h,020h,020h,0BAh,0C8h,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh
- DB 0CDh,0BCh,03Dh,026h,000h,000h,000h,000h,000h,001h,0FFh,000h,0FAh,031h,0C0h,08Eh
- DB 0D0h,0BCh,000h,07Ch,0B8h,0B0h,007h,08Eh,0D8h,0FBh,0B4h,001h,0B9h,000h,020h,0CDh
- DB 010h,0FCh,0BEh,040h,001h,0B6h,007h,0BBh,007h,000h,0B9h,00Ah,000h,051h,0B4h,002h
- DB 0B2h,020h,0CDh,010h,0B9h,00Dh,000h,0B4h,00Eh,0ACh,0CDh,010h,0E2h,0F9h,0FEh,0C6h
- DB 059h,0E2h,0EAh,0B4h,002h,0B7h,000h,031h,0D2h,0CDh,010h,0B4h,008h,0CDh,010h,0A3h
- DB 0C7h,001h,0B4h,012h,0CDh,016h,0A8h,001h,075h,07Ch,0B4h,086h,031h,0C9h,0BAh,000h
- DB 038h,0CDh,015h,0B4h,002h,08Bh,016h,0C5h,001h,0CDh,010h,08Bh,016h,0C7h,001h,088h
- DB 0D0h,088h,0F3h,0B9h,001h,000h,0B4h,009h,0CDh,010h,0B4h,002h,08Bh,016h,0C3h,001h
- DB 0CDh,010h,0B4h,008h,0CDh,010h,0A3h,0C7h,001h,089h,016h,0C5h,001h,0B8h,02Ah,009h
- DB 08Ah,01Eh,0CBh,001h,080h,0FBh,00Fh,075h,004h,0B3h,000h,0EBh,002h,0FEh,0C3h,088h
- DB 01Eh,0CBh,001h,0CDh,010h,002h,036h,0C9h,001h,075h,004h,0B4h,001h,0EBh,007h,080h
- DB 0FEh,018h,075h,006h,0B4h,0FFh,088h,026h,0C9h,001h,002h,016h,0CAh,001h,075h,004h
- DB 0B4h,001h,0EBh,007h,080h,0FAh,04Fh,075h,006h,0B4h,0FFh,088h,026h,0CAh,001h,089h
- DB 016h,0C3h,001h,0E9h,07Ch,0FFh,031h,0D2h,0B4h,002h,0BBh,007h,000h,0CDh,010h,0B4h
- DB 00Eh,0B9h,0DEh,000h,051h,0B9h,009h,000h,0BEh,003h,001h,0ACh,0CDh,010h,0E2h,0FBh
- DB 059h,0E2h,0F1h,0B4h,086h,0BAh,0FFh,0FFh,0B9h,001h,000h,0CDh,015h,0CDh,019h,000h
- DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
- DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
- DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
- DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,055h,0AAh
- ; Messages and Codes retours.
- ; Messages
- mess0 DB 13,10,'Copie secteur de BOOT termin'.',13,10,0
- mess1 DB 13,10,'Disquette prot'g'e !',13,10,0
- mess2 DB 13,10,'Secteur non trouv' !',13,10,0
- mess3 DB 13,10,'Pas de disquette !',13,10,0
- mess4 DB 13,10,'Pas de r'ponse !',13,10,0
- mess5 DB 'Ce programme modifie le secteur de BOOT de la disquette "A"',13,10
- mess5Bis DB 'Taper une signature (1 . 8 caractSres)',13,10,0
- mess6 DB 13,10,'La signature ne peut ^tre vide !',13,10,0
- mess7 DB 13,10,'--------- ABANDON ---------',13,10,0
- ; error table
- ErrTbl LABEL BYTE
- DB 000h
- DW OFFSET mess0
- DB 003h
- DW OFFSET mess1
- DB 004h
- DW OFFSET mess2
- DB 006h
- DW OFFSET mess3
- DB 080h
- DW OFFSET mess4
- DB 0EEh
- DW OFFSET mess5
- DB 0F1h
- DW OFFSET mess6
- DB 0F2h
- DW OFFSET mess7 ;Attention, si on ajoute des messages, il faut
- ;Penser . incr'menter CX dans Message:
- ; Programme principal.
- Copier:
- CLD
- LEA SP,[Pile]
- CALL Init
- JB ErrExit
- CALL Copie
- JB ErrExit
- MOV AH,000h
- ErrExit:
- CALL Message
- ExitDos:
- MOV AX,04C00h
- INT 021h
- Init:
- MOV AH,0EEh
- CALL Message
- CALL Clav_Debut
- MOV AH,000h
- MOV DL,000h
- INT 013h
- RET
- Copie:
- MOV CX,00003h
- Boucle:
- PUSH CX
- MOV AX,00301h
- LEA BX,[BootSecteur]
- MOV CX,00001h
- XOR DX,DX
- PUSH DS
- POP ES
- INT 013h
- JNB Suite
- POP CX
- LOOP Boucle
- RET
- Suite:
- POP CX
- RET
- Message:
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH SI
- PUSHF
- LEA SI,[ErrTbl] ;SI := OFFSET ErrTbl
- MOV CX,00008h ;!!! DOIT CONTENIR LE NOMBRE DE MESSAGES !!!
- Charge:
- LODSB ;AL := DS:SI et SI += 01h (Offset du message)
- CMP AH,AL ;V'rifie si c'est le bon message
- JE Affiche ;Pour l'afficher
- INC SI ;Passe Num'ro de message suivant
- INC SI ;...
- LOOP Charge ;Va le comparer
- JMP ExitDos ;Si on est en fin de table
- Affiche:
- MOV BX,00007h
- LODSW
- MOV SI,AX
- MOV AH,0Eh
- Affcar:
- LODSB
- OR AL,AL ;Test Fin de message
- JE Fin
- INT 010h
- JMP Affcar
- Fin:
- POPF
- POP SI
- POP CX
- POP BX
- POP AX
- RET
- ;------------------------------------------------------------------
- ----
- Clav_Debut:
- PUSH AX
- PUSH BX
- PUSH CX
- PUSHF
- Clav_Init:
- MOV CX,08h
- Clav_Zone:
- MOV AX,0E5Fh ;Ecriture d'un "_"
- INT 010h
- LOOP Clav_Zone
- MOV AX,0E0Dh ;Retour d'but Zone
- INT 010h
- XOR BX,BX
- MOV CX,08h
- Clav_Saisie:
- XOR AX,AX
- INT 016h
- CMP AL,08h ;Test Backspace
- JE Clav_Backspace
- CMP AL,0Dh ;Test Entr'e
- JE Clav_Fin
- CMP AL,01Bh ;Test Escape -> Sortie
- JE Clav_Esc
- CMP AL,020h ;Test Espace
- JE Clav_Affiche
- CMP AL,030h ;Test "0"
- JB Clav_Beep
- CMP AL,039h ;Test "9"
- JBE Clav_Affiche
- CMP AL,041h ;Test "A"
- JB Clav_Beep
- CMP AL,05Ah ;Test "Z"
- JBE Clav_Affiche
- CMP AL,061h ;Test "a"
- JB Clav_Beep
- CMP AL,07Ah ;Test "z"
- JBE Clav_Affiche
- Clav_beep:
- MOV AL,07h ;Son Beep
- MOV AH,0Eh
- INT 010h
- JMP Clav_Saisie
- Clav_Backspace:
- CMP CX,08h
- JE Clav_Beep
- DEC BX
- MOV [Signature+BX],0h
- INC CX
- MOV AH,0Eh ;Envoi du backspace
- INT 010h
- MOV AX,0E5Fh ;Ecriture d'un "_"
- INT 010h
- MOV AX,0E08h ;Retour arriSre sur le "_"
- INT 010h
- JMP Clav_Saisie
- Clav_Affiche:
- MOV [Signature+BX],AL
- INC BX
- MOV AH,0Eh
- INT 010h
- LOOP Clav_Saisie
- Clav_Fin:
- MOV AX,08h
- SUB AX,CX
- JNZ Clav_Sortie
- MOV AH,0F1h
- CALL Message
- JMP Clav_Init
- Clav_Esc:
- MOV AH,0F2h
- JMP ErrExit
- Clav_Sortie:
- MOV AX,0E0Dh
- INT 010h
- MOV AX,0E0Ah
- INT 010h
- POPF
- POP CX
- POP BX
- POP AX
- RET
- DB 0200h dup(0)
- Pile Label word
- MY_PROG ends
- end Debut
|
En fait y'a 2 progs :
Celui en clair qui écrit le secteur de boot, et le secteur de boot lui-même.
Ce dernier à été écrit en direct avec DEBUG.
Le but de tout çà :
1- Nettoyer les disquettes infectées par un virus de boot.
2- Remplacer le message classique (Disquette non bootable) par un truc plus fun ! Si on tente de booter avec une disquette qui contient mon prog, il affiche au centre de l'écran un cardre contenant un message disant de mettre un disque bootable et d'appuyer sur Shift pour rebooter. Pendant ce temp, un caractère "*" se promène sur l'écran en changeant de couleur. Quand on appuie sur SHIFT, la "Signature" (demandé par le prog d'écriture du secteur de boot) remplie tout l'écran le temps que la machine reboote.
Le tout en moins de 512 octets ! (Enfin pour le secteur de boot) ---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
|