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 :

Cryptage d'un fichier par inversion de bits


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Cryptage d'un fichier par inversion de bits
    Bonjour, je dois repasser un seul examen en ASM et je m'en sort pas du tout.
    Ce serai vraiment bête de rater à cause de ca alors que je pourrais rentrer en dernière année

    Je dois écrire un programme qui assure le cryptage d'un fichier disque de la manière suivante :

    - Inversion des bits 3 et 5 de chaque octet du fichier.
    - Inversion de l'ordre des octets du fichier (le 1er devenant le dernier...)

    Il faudrai qu'il puissent avoir les fonctionnalités suivantes :

    - taille fichier inférieure à 64ko
    - nom du fichier introduit au clavier lors de l'exécution
    - Afficher le contenu crypter et non crypter à l'écran.
    - Afficher le nombre d'octet traités.

    Merci d'avance.

    Bonne Journée.

    Théo

  2. #2
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Tu es obligé de tout faire en assembleur ?
    :wq

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Lio,

    Personne n'étant ici pour faire ton travail, montre-nous où tu en es, ce que tu as déjà fait, et explique-nous où tu as un (des) problème(s).
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Oui, tout en assembleur

    oui, je sais, je ne vous demande pas de me faire mon programme

    merci

  5. #5
    Membre habitué
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    Edit : tu n'es pas obligé de nous montrer tout ton code... montre nous seulement la partie qui pose problème. Le code est long, et l'assembleur non indenté n'est pas particulièrement délicieux à lire.

    Dans la vie, il y a 10 sortes de personnes. Ceux qui comprennent le binaire et les autres...


  6. #6
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    octet_suivant:
     
    not byte ptr ds:[donnees+di]; crypte un octet
     
     
    inc di; faire pointer di vers l'octet suivant en l'incrémentant
    loop octet_suivant; boucle autant de fois qu'on a lu d'octets
    ici, je met un not logique sur chaque octet or j'aimerais inverser le bit 3 et 5 de chaque octets mais c'est ici que je m'en sort pas

  7. #7
    Membre habitué
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Points : 166
    Points
    166
    Par défaut
    Tu as un examen d'asm et tu ne connais pas tes tables de vérité?
    Si tu veux inverser les bits 3 et 5 d'un octet, tu peux faire, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xor byte ptr ds:[donnees+di], 28h             ;0010 1000b
    Note : 28h implique que l'on considère le bit Low comme étant le bit 0.

    Dans la vie, il y a 10 sortes de personnes. Ceux qui comprennent le binaire et les autres...


  8. #8
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    merci

    non, je ne connais presque rien en asm. je débute, j'ai eu un très mauvais prof.


  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hai,
    Citation Envoyé par Theo190107
    merci

    non, je ne connais presque rien en asm. je débute, j'ai eu un très mauvais prof.

    C'est étonnant comme ceux qui n'apprennent pas mettent toujours ça sur le dos d'un mauvais prof.

    Car même avec un mauvais prof, tu dois tout de même avoir entendu parler de tables de vérité, ou, pour le moins, des opérations basiques sur les bits.
    Si les cons volaient, il ferait nuit à midi.

  10. #10
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Bah pour faire apprendre une API pareille en 2007 aussi...

    Pour inverser un bit :

    a XOR 1 = NOT a
    a XOR 0 = a


    Dans ton programme le XOR potera sur (au moins) un octet, ça donnera quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        00010101
    XOR 00101000
    ------------
        00111101
    :wq

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    J'aimerais demander au sujet s'il veut inverser les bits,

    0 -> 1
    1 -> 0

    ou échanger leur valeur.

    xxaxxbxx
    a -> b
    b -> a

  12. #12
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Août 2007
    Messages : 112
    Points : 88
    Points
    88
    Par défaut
    d'aprés ce que j'ai compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Inversion des bits 3 et 5 de chaque octet du fichier
    11110111
    deviendrais
    11011111
    autre chose tu travailles avec quel assembleur?

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Oui mais là, l'exemple ne lève pas l'ambiguité : D Le problème c'est quand les bits sont égaux. Si on les échange, on pass rien. Si on les inverse, il se passe quelque chose.

  14. #14
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Jai

    - Inversion des bits 3 et 5 de chaque octet du fichier.
    Il n'y a pas d'ambiguïté : quand on parle d'inverser des bits, on ne parle pas de les échanger.
    Si les cons volaient, il ferait nuit à midi.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Ben... ça s'peut. Si je pose la question, c'est parce qu'il est déjà arrivé que le vocabulaire utilisé ne soit pas d'une précision impécable. Ca ne coûtait pas grand chose de demander.

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par droggo
    Hai,

    C'est étonnant comme ceux qui n'apprennent pas mettent toujours ça sur le dos d'un mauvais prof.
    Heu oui mais un prof qui nous donnes un exercice et puis qui revient 2h après pour le reprendre. ce n'est pas un bon prof, désolé.


    Citation Envoyé par onlytime

    autre chose tu travailles avec quel assembleur?
    je travaille avec tasm

  17. #17
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Mon programme tourne, je n'ai plus 64 erreurs et il est allégé. Mais la partie cryptage ne fonctionne pas des masses

  18. #18
    Membre habitué
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Points : 166
    Points
    166
    Par défaut
    précise ton problème ...

    Dans la vie, il y a 10 sortes de personnes. Ceux qui comprennent le binaire et les autres...


  19. #19
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour comme mon pseudo l indique je suis l'ami de theo
    je voulais montre mon programme et avoir une explication pour comprendre comment crytper en asm x86 car j ai lu les explication et ne comprend pas bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ; Lecture du fichier
    		mov AH, 3Fh			; appel de la fonction de lecture
    		mov BX, FH			; copie du handle
    		mov CX, 65000		; nombre de caractere a lire (taille du fichier)
     
    		lea DX, TEMP+4		; copie l'offset du saisie de la lecture du fichier
    		int 21h
    je ne comprends pas bien comment inverse bit 3 et 5 comme explique ci bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       00010101
    XOR 00101000
    ------------
        00111101
    un grand merci d avance plus que ca et j en ai fini

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ; Lecture du fichier
    mov AH, 3Fh	   ; identifiant de la fonction de lecture
    mov BX, FILEHANDLE ; handle du fichier 
    mov CX, 65000	   ; nombre de caractere a lire (taille du fichier)
    lea DX, TEMP+4	   ; adresse du buffer
    int 21h            ; appel de la fonction de lecture
    Après ce bout de code le système d'exploitation (le DOS, ouaiiis ) a placé de contenu de ton fichier identifier par FILEHANDLE (c'était FH avant mais 2 lettres pour un label global c'est mal en plus d'être laid) à l'adresse TEMP+4.
    Suite à cela tu va faire une boucle qui va scanner les 65 Ko de ton fichier et leur appliquer ta fonction de chiffrement. (Comme avait fait ton collègue, en supposant qu'il ait correctement initialisé cx (à 65000)).

    La table de vérité du ou exclusif étant ce qu'elle est : a XOR 1 = NOT a et a XOR 0 = a (avec a=0 ou a=1). Donc avec 1 on inverse avec 0 on conserve.
    Quand on manipule des octets l'opération se fait bit-a-bit c'est-à-dire chaque bit indépendemment.

    Si un octet vaut 21=00010101b :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        00010101
    XOR 00101000
    ------------
        00111101
    On obtient 00111101b = 61.
    Note la position des 1 de la 2ème opérande, ceux sont eux qui inversent les bits.

    D'autres exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        00000000
    XOR 00101000
    ------------
        00101000
    
        11111111
    XOR 00101000
    ------------
        11010111
    Soit dit en passant il serais judicieux de rappeler à vos profs que l'assembleur 16 bits est obsolète depuis plus de 20 ans et qu'a moins que vous soyez dans une filière d'archéoinformatique ou que votre matériel l'oblige (rassurez-moi vous ne codez pas sur des 286 ? ), il serait temps de passer au 32bits (voir - soyons fou - au 64bits)

Discussions similaires

  1. cryptage et décryptage de texte par rotation de bits
    Par Invité dans le forum Télécharger
    Réponses: 17
    Dernier message: 17/07/2013, 14h05
  2. Protection d'un fichier par cryptage avec gpg
    Par Michaël dans le forum Sécurité
    Réponses: 1
    Dernier message: 30/01/2007, 14h10
  3. cryptage d'un fichier par la méthode césar
    Par wedge.tm dans le forum C
    Réponses: 6
    Dernier message: 12/01/2007, 16h08
  4. [TP]Editeur de fichiers HLP compatibles 16 bits
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 08/07/2003, 21h03
  5. Supprimer un fichier par rapport a une date
    Par NewB dans le forum Linux
    Réponses: 2
    Dernier message: 25/06/2003, 13h44

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