[nasm] cryptage

[Résolu]
Signaler
Messages postés
28
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
13 avril 2008
-
Messages postés
12
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
25 mars 2011
-
Salut à tous !

J'ai fait un petit prog qui crypte (xor) un fichier passé en ligne de commande, mais j'ai fait ça avec le guide des interruptions sous les yeux et c'est de la pure bidouille. Ca marche mais c'est trop trop lent !! je crois que c'est parce que j'utilise justement trop d'appels aux interruptions. voila le source :

--------------------------------------------------------------------------

key equ 12341234h

[org 100h]

mov cl, [80h] ; recup cmdline
mov si, 82h
mov di, cmdline
rep movsb
dec di
mov [es:di], byte 0

mov ah, 3dh ; ouverture fichier
mov al, 0h
mov dx, cmdline
int 21h
mov [handle1], ax

mov ah, 3ch ; creation fichier temp
mov cx, 20h
mov dx, cmdline + 1
int 21h
mov [handle2], ax

read mov ah, 3fh ; lecture de 4 octets
mov bx, [handle1]
mov cx, 4
mov dx, dwordBuf
int 21h

cmp ax, 0
je fin

crypt mov eax, [dwordBuf]
xor eax, key
mov [dwordBuf], eax

mov ah, 40h ; ecriture dans fichier temp
mov bx, [handle2]
mov cx, 4
mov dx, dwordBuf
int 21h

jmp read

fin mov ah, 3eh ; ferme fichier source
mov bx, [handle1]
int 21h

mov ah, 3eh ; ferme fichier temp
mov bx, [handle2]
int 21h

mov ah, 41h ; supprime le source
mov dx, cmdline
int 21h

mov ah, 56h ; renomme le temp
mov dx, cmdline + 1
mov di, cmdline
int 21h

ret

[segment .bss]
cmdline resb 127
handle1 resw 1
handle2 resw 1
dwordBuf resd 1

--------------------------------------------------------------------------

Avez-vous une solution simple et plus rapide ? (je crois que les pros de l'assembleur vont pousser des hauts-cris en voyant mon code....faut bien commencer quelque part....) Merci d'avance.

6 réponses

Messages postés
28
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
13 avril 2008

Excellent ! Merci beaucoup Patatalo ! Ca marche bien maintenant. Je pose le source :
--------------------------------------------------------

key equ 12341234h

[org 100h]

mov cl, [80h] ; recup cmdline
mov si, 81h
mov di, cmdline
rep movsb
mov [es:di], byte 0

mov ah, 3dh ; ouverture fichier
mov al, 0h
mov dx, cmdline
int 21h
mov [handle1], ax

mov ah, 3ch ; creation fichier temp
mov cx, 20h
mov dx, cmdline + 1
int 21h
mov [handle2], ax

read mov ah, 3fh ; lecture
mov bx, [handle1]
mov cx, 4096
mov dx, buffer
int 21h

mov bx, ax ; recup nb d'octets lus
cmp ax, 0
je fin

push ax ; sauve nb octets lus
crypt xor dword [buffer+bx-4], key
sub bx, 4
ja crypt

mov ah, 40h ; ecriture dans fichier temp
mov bx, [handle2]
pop cx ; recup ax = nb octets
mov dx, buffer
int 21h

jmp read

fin mov ah, 3eh ; ferme fichier source
mov bx, [handle1]
int 21h

mov ah, 3eh ; ferme fichier temp
mov bx, [handle2]
int 21h

mov ah, 41h ; supprime le fichier source
mov dx, cmdline
int 21h

mov ah, 56h ; renomme le fichier temp
mov dx, cmdline + 1
mov di, cmdline
int 21h

ret

[segment .bss]
cmdline resb 127
handle1 resw 1
handle2 resw 1
buffer resd 1024

--------------------------------------------------

par contre ya un truc étrange, NASM ne compile pas avec les bons opcodes quand j'utilise "lea dx, buffer". mais ça marche bien avec "mov dx, buffer". @+

In tartiflette we trust !
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

le probleme est effectivement le nombre d'appel a l'interruption 21h ( surtout sous XP ).

commence par lire et ecrire tes fichiers par bloc et déjà ça devrait aller mieux ( mais ca oblige a avoir un algorithme un peu plus travaillé ).

@++
Messages postés
28
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
13 avril 2008

ok, merci pour le conseil mais peut tu me dire (en gros) comment faire ce genre de truc (lire et écrire par bloc), il faut que je fasse le cryptage en mémoire ? ou si ya déja un message sur ce forum qui traite du sujet, peut tu me poster le lien ? merci.
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
re,

Buff resd 1024

.lp1
mov ah, 3fh ; lecture de 4 octets
mov bx, [handle1]
mov cx, 4096
lea dx, [Buff]
int 21h
;jc ??

cmp ax,0
mov bx,ax
je .end

push ax
.lp2
xor dword [Buff+bx-4],key
sub bx,4
ja .lp2 ; les derniers octets seront omis si - de 4 octets
pop cx

mov ah, 40h ; ecriture dans fichier temp
mov bx, [handle2]
lea dx, [Buff]
int 21h
jnc .lp1

.end

ca devrait etre un truc comme ça ...

@++
Messages postés
28
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
13 avril 2008

Ok, merci Patatalo ! je vais essayer ça.
Messages postés
12
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
25 mars 2011

Je ne suis pas un expert en ASM, mais des que l'on crypte un fichier avec XOR le mot de passe apparait en répété spécialement si il y des zéro(0) car:
Imaginons un mot de passe de 4bits(juste pour faire simple) par exemple : '1101'

essayons d'encoder un petit fichier de 16bits '1101100010110000'
faisons comme ceci        1101100010110000
et copiant le passe         1101110111011101
et faisons le XOR          0000010101101101
les dernier 4 bit sont                                 |
zéro alors le passe ce répété--------------|

Ceci est un simple exemple, imaginez un fichier plein de zero.

Pour moi la solution serai de compresser le fichier par un methode de compression des bit repete.