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

Contribuez Assembleur Discussion :

Exemple de chiffrement-déchiffrement 128 bits


Sujet :

Contribuez Assembleur

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    mars 2013
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2013
    Messages : 347
    Points : 416
    Points
    416
    Par défaut Exemple de chiffrement-déchiffrement 128 bits
    Salut..

    Je vois qu'il y a quand même pas mal de monde qui passe dans cette partie du forum, alors je décide de contribuer, si ça peut aider à comprendre l'asm.

    Un programme que j'ai écrit lorsque je débutais. C'est un exemple simple de chiffrement-déchiffrement avec une clef de 128 bits. Ca a été écrit pour Fasm et WIn32 mais c'est facilement adaptable pour d'autres compilateurs et Linux.

    Par contre, ce n'est qu'un exemple, ça doit donc être considéré en tant que tel et non utilisé pour chiffrer des documents. Pour cela, il y a de vrais solutions fiables, comme l'AES par exemple.

    Le code d'origine a un strlen, mais je l'ai viré volontairement, comme ça vous pourrez vous amuser à en rajouter un.
    Modifier des codes, les améliorer, c'est excellent pour apprendre rapidement.

    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
     
    format PE console
    include 'include/windows/win32a.inc'
    entry start
     
    section '.text' code readable executable
     
     
     
    start:
    	stdcall	demo,buf1,32,buf2	;chiffrement des bytes du buf1 vers le buf2
    	stdcall	demo,buf2,32,buf3	;déchiffrement des bytes du buf2 vers le buf3
    	cinvoke	printf,forms,buf3	;affichage des bytes déchiffrés du buf3
     
    	ret
     
     
     
    proc demo inbuf,len,outbuf
     
    	mov	esi,dword [inbuf]
    	mov	edi,dword [outbuf]
    	mov	ecx,dword [len]
     
         @@:
    	mov	ebx,table
        @re:
    	mov	al,byte [ebx]
    	or	al,al
    	jz	@b
    	inc	ebx
    	shl	ax,8
    	lodsb
    	cmp	al,ah
    	jz	@f
    	xor	al,ah
         @@:
    	stosb
    	dec	ecx
    	jnz	@re
     
    	ret
    endp
     
     
     
     
    section '.data' data readable writeable
     
    buf1 db 'la petite maison dans la prairie',0
    buf2 rb 256
    buf3 rb 256
     
    table db 0x7d,0x72,0x6f,0xd7,0x84,0x09,0xb2,0x18,\
    	 0x12,0xd7,0x43,0xf3,0x33,0x1b,0xa4,0x6f
     
    forms db '%s',13,10,0
     
     
     
     
    section '.idata' import data readable writeable
     
    library msvcrt, 'msvcrt.dll'
     
    import msvcrt,\
    printf, 'printf'
    Le même code en raw, donc sans les macros:
    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
     
    format PE console
    entry start
     
    section '.text' code readable executable
     
     
     
      start:
    	push	buf2
    	push	32
    	push	buf1
    	call	demo
     
    	push	buf3
    	push	32
    	push	buf2
    	call	demo
     
    	push	buf3
    	push	forms
    	call	[printf]
     
    	add	esp,8
    	ret
     
     
     
       demo:
    	push	ebp
    	mov	ebp,esp
     
    	mov	esi,dword [ebp+8]
    	mov	ecx,dword [ebp+12]
    	mov	edi,dword [ebp+16]
     
         @@:
    	mov	ebx,table
        @re:
    	mov	al,byte [ebx]
    	or	al,al
    	jz	@b
    	inc	ebx
    	shl	ax,8
    	lodsb
    	cmp	al,ah
    	jz	@f
    	xor	al,ah
         @@:
    	stosb
    	dec	ecx
    	jnz	@re
     
    	mov	esp,ebp
    	pop	ebp
    	ret	12
     
     
     
     
    section '.data' data readable writeable
     
    buf1 db 'la petite maison dans la prairie',0
    buf2 rb 256
    buf3 rb 256
     
    table db 0x7d,0x72,0x6f,0xd7,0x84,0x09,0xb2,0x18,\
    	 0x12,0xd7,0x43,0xf3,0x33,0x1b,0xa4,0x6f
     
    forms db '%s',13,10,0
     
     
     
     
    section '.idata' import data readable writeable
     
    dd 0,0,0,rva msvcrt_name,rva	msvcrt_table
    dd 0,0,0,0,0
     
    msvcrt_table:
      printf	dd rva _printf
      dd 0
     
    _printf		db 0,0,'printf',0
    msvcrt_name	db 'msvcrt.dll',0

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    mars 2013
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2013
    Messages : 347
    Points : 416
    Points
    416
    Par défaut
    Erreurs dans le code.
    Il manque un byte 0 à la fin de la table.
    Et la comparaison ne sert apparemment à rien..
    Je sais pas pourquoi j'avais conclu à l'époque que c'était obligatoire.
    Je viens de voir tout ça en réutilisant le code pour autre chose.

    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
     
     
    format PE console
    include 'include/windows/win32a.inc'
     
    section '.text' code readable executable
     
    entry $
    	stdcall	demo,buf1,32,buf2	;chiffrement des bytes du buf1 vers le buf2
    	stdcall	demo,buf2,32,buf3	;déchiffrement des bytes du buf2 vers le buf3
    	cinvoke	printf,forms,buf3	;affichage des bytes déchiffrés du buf3
     
    	ret
     
    proc demo inbuf,len,outbuf
     
    	mov	esi,dword [inbuf]
    	mov	edi,dword [outbuf]
    	mov	ecx,dword [len]
     
         @@:
    	mov	ebx,table
        @re:
    	mov	al,byte [ebx]
    	or	al,al
    	jz	@b
    	inc	ebx
    	shl	ax,8
    	lodsb
    	xor	al,ah
    	stosb
    	dec	ecx
    	jnz	@re
     
    	ret
    endp
     
     
    section '.data' data readable writeable
     
    buf1 db 'la petite maison dans la prairie',0
    buf2 rb 256
    buf3 rb 256
     
    table db 0x7d,0x72,0x6f,0xd7,0x84,0x09,0xb2,0x18,\
    	 0x12,0xd7,0x43,0xf3,0x33,0x1b,0xa4,0x6f,0
     
    forms db '%s',13,10,0
     
    section '.idata' import data readable writeable
     
    library msvcrt, 'msvcrt.dll'
     
    import msvcrt,\
    printf, 'printf'

Discussions similaires

  1. Déchiffrement AES 128 bits
    Par Happpy dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 05/03/2014, 01h27
  2. Problème d'alignement sur 128 bits
    Par progfou dans le forum C++
    Réponses: 24
    Dernier message: 06/07/2007, 17h15
  3. Nombre de 128 bits
    Par Elendhil dans le forum Langage
    Réponses: 2
    Dernier message: 24/05/2007, 18h00
  4. déclaration de variables de 16, 32 et 128 bits
    Par samipate dans le forum C++
    Réponses: 10
    Dernier message: 30/12/2004, 23h33
  5. Machine 32 bits - cryptage 128 bits
    Par free0pen dans le forum Assembleur
    Réponses: 6
    Dernier message: 02/04/2004, 21h14

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