Astuces en assembleur avec DEBUG |
| Par Frédéric Heissler |
Vous pouvez empêcher l'accès au Bios en le protégeant avec un mot de passe. Le problème c'est que si vous oubliez ce mot de passe vous n'avez plus aucun moyen d'accèder au Bios. Le plus simple est utiliser le programme DEBUG. Pour la plupart des modèles de cartes mères, le code à entrer est le suivant :
| Pour un Bios quelconque | Pour un Bios AWard | Pour un Bios Phoenix | ||
| DEBUG | DEBUG | DEBUG | ||
| -o 70 2E | -o 70 17 | -o 70 17 | ||
| -o 71 FF | -o 71 17 | -o 7l FF | ||
| - q | - q | - q |
Pour réaliser cette opération, vous devez d'abord démarrer ( Booter) votre PC sur une disquette DOS contenant le programme DEBUG. Puis vous tapez DEBUG et ensuite le code. Pour finir taper la lettre q qui signifie Quitter le programme Debug. Après retour au Dos, vous pourrez redémarrer la machine et entrer dans le Setup du Bios sans mot de passe. Ceci dit il existe de petits programmes permettant d'effacer ce mot de passe voir ma page d'outil sur le Bios. Pour plus d'information lisez le cours sur les cartes mères. Chapitre 4.3.
| Pour un Bios AWard | Pour un Bios Phoenix | |
| DEBUG | DEBUG | |
| -o 70 17 | -o 70 FF | |
| -o 71 17 | -o 7l 17 | |
| - q | - q |
Si vous n'êtes pas en mesure de déterminer les ports (parallèles et série) que votre ordinateur utilise, vérifiez les ports d'E/S à l'aide de DEBUG comme suit:
1. Lancez DEBUG.
2. Au prompt de DEBUG, tapez D 40:0 et appuyez sur Entrée. Les valeurs hexadécimales des adresses des ports actifs s'affichent (les premières correspondent aux ports série, les suivantes étant celles des ports parallèles). La Figure suivante présente un exemple d'adresses.
Affichage des adresses de port d'E/S série et parallèles installés à l'aide de DEBUG.
| 0040:0000 | F8 03 | 00 00 | 00 00 | 00 00- | BC 03 | 00 00 | 00 00 | 00 00 |
| COM1 | COM2 | COM3 | COM4 | LPT1 | LPT2 | LPT3 |
L'adresse de chaque port est présentée à la place qui lui correspond. Les adresses étant stockées sous forme de mots, la valeur des octets doit être lue de droite à gauche. Ainsi il faut lire sur cet exemple qu'un port série est installé à l'adresse 03F8 et qu'un port parallèle est installé à l'adresse 03BC.
3. Pour quitter DEBUG, appuyez sur la touche Q et sur Entrée.
Vous pouvez supprimer des partition non dos, c'est à dire de type HPFS ou NTFS .... Le plus simple est d'utiliser le programme DEBUG. En tapant le code suivant vous crez un programme que s'appelle "Efface.com" qui bien sur efface toutes vos partitions.
| DEBUG |
| A |
| mov AX,0301 |
| mov BX,200 |
| mov CX,1 |
| mov DX,80 |
| int 13 |
| mov AX,4C00 |
| int 21 |
| Appuyer sur entrée |
| Appuyer sur entrée |
| n Efface.com |
| rcx |
| 13 |
| w |
| q |
| Prompt | DEBUG | Description | |
| - | A 100 | On commence l'assemblage à l'adresse 100 | |
| 0C57:0100 | MOV AH,0D | Vide le cache en écriture du disque dur, | |
| 0C57:0102 | INT 21h | dans le cas ou on à SmartDrv 4.x | |
| 0C57:0104 | MOV AX, 40 | Initialise l'adresse du segment | |
| 0C57:0107 | MOV DS, AX | ||
| 0C57:0109 | DS: | ||
| 0C57:010A | OR BYTE PTR [17],0C | Equivalent à la séquence CTRL+ALT | |
| 0C57:010F | MOV AX,4F53 | Touche "DEL" (53h = DEL scan code) | |
| 0C57:0112 | INT 15h | EMM386 reçoit cette séquence et redémarre | |
| 0C57:0114 | DS: | ||
| 0C57:0115 | MOV WORD PTR [72],0 | Positionne le flag de REBOOT pour une boot à froid | |
| 0C57:011B | JMP F000:FFF0 | Exécute la routine interne de redémarrage | |
| 0C57:0120 | Appuyez juste sur Entrée, cela permet de sortir de Debug | ||
| - | R CX | ||
| CX 0000 | |||
| : | 20 | Nombre d'octet à sauvegarder en hexadécimal | |
| - | N REBOOT.COM | Nom du fichier | |
| - | W | Ecrit le fichier sur le disque | |
| Ecriture de 00020 octets | |||
| - | Q | Quitte Debug |
C:\Temp\Debug -a 100 0C30:0100: mov ah,10 0C30:0102: int 16h 0C30:0104: cmp al,0 0C30:0106: je 10A 0C30:0108: jmp 10C 0C30:010A: mov al,ah 0C30:010C: mov ah,4ch 0C30:010E: int 21h 0C30:0110 -r CX CX 0000 :16 -n Fred_ASM.com -w Ecriture de 00010 octets -q C:\temp> On peut faire la même chose mais en demande d'appuyer sur "Y" = 0x59 ou "y" = 0x79 on retourne alors dans la variable ERRORLEVEL le code 0 dans le cas contraire on retourne la valeur 1. Pour Oui on aura "O" = 0x4F ou "o" = 0x6F à la place de 59 et 79. -a 100 0CDA:0100 mov ah,10 0CDA:0102 int 16h 0CDA:0104 cmp al,0 0CDA:0106 je 110 0CDA:0108 cmp al,59 0CDA:010A je 114 0CDA:010C cmp al,79 0CDA:010E je 114 0CDA:0110 mov al,1 0CDA:0112 jmp 116 0CDA:0114 mov al,0 0CDA:0116 mov ah,4c 0CDA:0118 int 21h 0CDA:011A -r cx CX 0000 :26 -n MenuY.com -w Ecriture de 00026 octets -q Télécharger les programmes MenuY.com et Fred_ASM.com
A mov AX,3D00 mov DX,12B int 21h mov BX,AX mov AH,3F mov CX,200 mov DX,200 int 21 mov AH,3E int 21 mov AX,0301 mov BX,200 mov CX,1 mov DX,180 int 13 mov AX,4C00 int 21 db "rBOOT.DAT",0 n rBOOT.COM rcx 34 w q A mov AX,0201 mov BX,200 mov CX,1 mov DX,180 int 13 mov AX,3C42 xor CX,CX mov DX,12D int 21h mov BX,AX mov AH,40 mov CX,200 mov DX,200 int 21 mov AH,3E int 21 mov AX,4C00 int 21 db "sBOOT.DAT",0 n sBOOT.COM rcx 36 w q
A mov AX,0201 mov BX,200 mov CX,1 mov DX,80 int 13 mov AX,3C42 xor CX,CX mov DX,12D int 21h mov BX,AX mov AH,40 mov CX,200 mov DX,200 int 21 mov AH,3E int 21 mov AX,4C00 int 21 db "sMASTER.DAT",0 n sMaster.COM rcx 38 w q A mov AX,3D00 mov DX,12B int 21h mov BX,AX mov AH,3F mov CX,200 mov DX,200 int 21 mov AH,3E int 21 mov AX,0301 mov BX,200 mov CX,1 mov DX,80 int 13 mov AX,4C00 int 21 db "rMASTER.DAT",0 n rMASTER.COM rcx 36 w q