IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 16-bits Assembleur Discussion :

assembleur int 20h


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 0
    Points
    0
    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 ?

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    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.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 0
    Points
    0
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Tutoriels, F.A.Q : la rubrique Assembleur de Developpez.com
    Par Alcatîz dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/06/2007, 19h14
  2. ecrire son OS (assembleur ??)
    Par Anonymous dans le forum Programmation d'OS
    Réponses: 9
    Dernier message: 25/11/2002, 19h25
  3. Random en Assembleur
    Par funx dans le forum Assembleur
    Réponses: 9
    Dernier message: 02/09/2002, 17h05
  4. Quel désassembleur/assembleur pour un exe Windows ?
    Par Anonymous dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 17/04/2002, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo