Astuces en assembleur avec DEBUG


Bouton de retour sur la page d'index   Par Frédéric Heissler   Cliquez ici pour m'envoyer un message



1 Utiliser Debug pour effacer un mot de passe oublié.


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

Les adresses 70h et 71h correspondent à celle d'un port d'entrée/sortie. Ce port contient le masque NMI ( Non Masquable Interrupt ). L'interruption NMI est celle qui dispose du plus haut niveau de priorité. Elle est donc toujours exécutée avant toutes les autres. La valeur 2E correspond à l'adresse de la routine du bios permettant d'effacer le mot de passe. La valeur FF permet de positionner le bit 7 du masque NMI à 1. Cela aura pour effet de forcer l'exécution de l'interruption NMI.

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.



Utiliser Debug pour reinitialiser les options du Bios.


On à la possibilité de reconfigurer le Bios en lui assignant des valeurs par défaut. Pour cela vous avez juste besoin du programme Debug du Dos. Il vous suffit de tapez debug. Debug vous affiche alors une invite sous la forme d'un tiret. Si votre Bios est un modèle AWard, le code est:

Pour un Bios AWard Pour un Bios Phoenix
DEBUG DEBUG
-o 70 17 -o 70 FF
-o 71 17 -o 7l 17
- q - q


Les adresses 70h et 71h correspondent à celle d'un port d'entrée/sortie. Ce port contient le masque NMI ( Non Masquable Interrupt ). L'interruption NMI est celle qui dispose du plus haut niveau de priorité. Elle est donc toujours exécutée avant toutes les autres. La valeur 17 correspond à l'adresse de la routine du bios permettant d'initialiser les options du Bios. La valeur FF permet de positionner le bit 7 du masque NMI à 1. Cela aura pour effet de forcer l'exécution de l'interruption NMI.

Une fois revenu au Dos, vous pouvez redémarrer. Votre PC fonctionnera sur la base de paramètres Bios par défaut. Pour plus d'information lisez le cours sur les cartes mères. Chapitre 4.2.


Détection des ports séries et parallèles à l'aide de DEBUG.



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.



Comment supprimer des partition non dos avec Debug.


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


Vous pouvez télécharger la version compilé de ce programme TRES DANGEREUX !!! DANGER.zip

On fait appel à l'interruption INT 13h Fonction 03H. Cette interruption permet d'écrire un ou plusieurs secteurs de la mémoire sur le disque dur. Ici on vas copier un secteur vierge sur le disque dur.
AH contient le numéro de la fonction utilisé par l'INT 13, ici 03.
AL contient le nombre de secteur, ici 01.
BX contient l'offset du buffer, qui est, initialement, une zone mémoire vierge.
CL contient le numéro du secteur à modifier, ici 1.
DX contient le code de l'unité à laquelle on désire accéder, ici le disque dur 0. pour accéder au second disque ( disque 1) on aurait DX = 81.
Les deux instruction, mov AX,4CO0 et int 21 ne servent qu'à terminer le programme.
L'instruction rcx, sert à indiquer combien d'octect doivent être sauvegardés dans le fichier executable "Efface.com".
La commande w sert à lancer l'écriture du code dans le fichier executable.
La commande q sert à quitter debug.


Comment redémarrer à froid son PC.


Il s'agit d'un petit programme qui est décrit dans l'article Q67929 de la Technet. Ce programme permet se simuler un redémarrage à froid de la machine.
Pour lecréer lancer debug et taper les valeurs suivantes :

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


Faire des menus en dos.


Il s'agit d'un petit programme en assembleur compilé avec le programme Debug.exe du Dos. Il s'agit juste de récupérer, avec la fonction 0 de l'interruption 16h, le code ASCII de la touche appuyée. La fonction 10h de l'interruption 16h place, pour le du clavier étendue, les 2 octets du code de la touche appuyée dans le registre AX. Lorsque l'on appuie sur une touche de fonction, le premier octet vaut 0, c'est à dire AL = 0. Or c'est la valeur AL qui est implicitement recopié dans la variable système ERROLEVEL. Il donc copier dans AL la valeur de AH qui contient le code de la touche de fonction, d'où le cmpAL,0 et le je 10A Si l'octet de poids faible AL est différent de 0 alors on vas terminer le programme.. On termine le programme avec la fonction 4Ch de l'interruption 21h.

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



Sauvegarde et restauration du secteur de Boot.


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






Sauvegarde et restauration du Master Boot Record.


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







Retourner au début de la page