Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > x86 16-bits
x86 16-bits Architecture x86 16 bits et ses outils (assembleurs, debuggers, émulateurs...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/12/2011, 00h20   #1
sila silaa
 
Femme souaifi yosra
Étudiant
Inscription : décembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme souaifi yosra
Âge : 22
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : décembre 2011
Messages : 3
Points : -2
Points : -2
Par défaut assembleur int 20h

svp est ce qu'il ya quelqu' un qui peut me donner un exemple sur un detournement d'interruption 20h en utilisant macro et routines ?
sila silaa est déconnecté   Envoyer un message privé Réponse avec citation 03
Vieux 26/12/2011, 17h38   #2
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 083
Points : 11 083
L'interruption 20h était utilisée uniquement sur PC en assembleur x86 16 bits au tout début du temps du D.O.S. pour quitter un programme et a rapidement été remplacée par la fonction 4Ch de l'interruption 21h. Ça veut dire qu'avant même l'ère Windows, cette fonction était déjà obsolète.

Alors certes, c'est facile à détourner, mais je ne vois vraiment pas ce que cela peut t'apporter aujourd'hui, ni dans quel environnement tu comptes exploiter ce vecteur.
Obsidian est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/12/2011, 21h26   #3
sila silaa
 
Femme souaifi yosra
Étudiant
Inscription : décembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme souaifi yosra
Âge : 22
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : décembre 2011
Messages : 3
Points : -2
Points : -2
merci est ce que peux tu m'aider à corriger ce programme qui rederige une interruption 20h sur la routine NEW_routine de façon à ne pas terminer le programme lorsque l'instruction int 20h est roncontrée; je ne sait pas comment verifier cette detournement en plus l'utilisation des macros et les routine

redirect int : doit modifier lentree de vecteur interruption int20h par l'adresse de la routine NEW_ROUTINE
NEW_ROUTINE :routine gestion de la int 20h en plus appel routine success_detournement et routine detouenement
routine detouenement: donne le choix au utilisateur oubien confirmation de loperation d arret dexecution de programme en cours si oui il appel macro fin_propre sinon il appel routine affiche_msg puis fin_propre
routine affiche_msg : affiche 5 fois que prog va se fermer
macro fin_propre: restauration et mettre fin
j'ai essayé mais le programme ne marche pas

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
.model small
.stack 100h
 
 
.data
v dw 5
message1 db 10,13,'programme va se fermer$'
message2 db 'souhaitez vous vraiment fermer le programme? (o/n)'
db 10,13,'$'
num_int db "20h" 
message db 'le detournement est verifier'
db 10,13,'$'
 
affiche_msg proc 
debut: mov cx,v ; cx = v qui vaut 5
boucle : 
call ecrit_msg
loop boucle 
ret
ecrit_msg:
 
mov ah,09h
mov dx,offset message1
int 21h
 
ret
 
ret 
affiche_msg endp 
 
routine_detournement proc FAR
 
 
 
 
push bp ; Sauve les registres modifiés ne
; servant pas de paramètres de sortie
mov bp,sp ; BP + 8 pointe l'offset de retour
push ax
push dx
 
Question:
mov ah,9 ; Affiche "Terminer ?"
lea dx,message2
int 21h
mov ah,1 ; Attend réponse
int 21h
cmp al,'o' ; AL = 'o' ?
jne Non? 
mov ah,0Dh ; Vider tampons disque internes du DOS
int 21h
 
stc ; CF = 1
mov word ptr [bp+8],offset Fin
jmp short Retour_int20 ; Oui, retour
Non?:
cmp al,'n' ; Sinon, AL = 'n' ?
jne Question ; Non, repose la question
; CF = 0 (égalité), demande éventuellement au DOS de continuer
call affiche_msg
Retour_int20:
pop dx ; Restitue les registres (pile LIFO :
pop ax ; Last Input, First Output)
pop bp
jnc Retour_DOS ; Retour au traitement du DOS
add sp,6 ; Nettoie l'adresse de retour du DOS
Retour_DOS:
iret 
routine_detournement endp 
success_routine proc 
int 20h
 
 
MOV AH,09H
 
MOV DX,OFFSET Message
INT 21H
 
ret 
success_routine endp 
 
 
redirige_int macro num_int, new_routine
push ds ; Sauve DS sur la pile
push cs ; DS = CS
pop ds ; car la routine fait partie du code
lea dx,new_routine
mov al,num_int
mov ah,25h
int 21h
pop ds 
 
endm
 
 
new_routine proc
 
 
mov ah , 35h ;lire tableau d interruption 
mov al , 20h ; sauvgarder lit 20h
int 21h
push es ;contient ladresse
push bx ;de linterruption
 
call success_routine 
call routine_detournement
ret
new_routine endp
 
 
 
 
 
.code
main Proc
mov ax,@data
mov ds,ax
redirige_int num_int, new_routine
call new_routine 
 
Fin: 
 
 
mov ah,4ch
int 21h
sila silaa est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h03.


 
 
 
 
Partenaires

Hébergement Web