Les Snippets

Connexion

chiffrement de fichier en randxor.

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 01/04/2008 04:40:48 et initié par edfed [Liste]
Vue : 812
Catégorie(s) : Cryptage
Langage sélectionné : Assembleur x86
Langages dispo pour ce code :
- Assembleur x86
- Delphi 5
- Voir tous les langages pour ce code snippet



Langage : Assembleur x86
Date ajout : 01/04/2008
Posté par edfed [Liste]

;;;;;; données necessaires pour un bon fonctionnement
ckey: 
dd @f-$-4      ; directive brute force pour connaitre la taille d'un champ sous fasm.
db 'Mot de passe'
@@:              ; etiquette anonyme, utilisée pour la directive precedente 
dd 0  ; padding pour ne pas avoir d'erreur dans la mot de passe.        
filetocrypt:   ; peut etre n'importe quel fichier binaire
dd @f-$-4    ; respecter juste la structure autours du fichier.
file 'fichier à crypter .extension'  
@@:
dd 0  ; padding utilisé pour ne pas deborder
;;;;;; pour executer le code
...
        mov esi,ckey         ; charger le mot de passe
        call rnd1.init          ; initialiser le PRNG
        mov esi,filetocrypt  ; pointer le fichier a crypter
        mov edi,[esi]        ; en connaitre la taille
        add esi,4          
        call crypt              ; lancer le chiffrement, dechiffrement
...
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;; petit algo de chiffrement;;;;;;;;;;;;;;;;
crypt:
        call rnd1         ; generer un nombre aleatoire
        xor [esi],ecx   ; appliquer le XOR sur le fichier
        inc esi            ; pointer au prochain char du fichier, probleme d'alignement, mais c'est pas grave...
        dec edi           ; decrementer le compteur
        jne crypt         ; si c'est pas la fin, continuer
        ret
;;;;;;;;; generateur pseudo aleatoire pour le chiffreur
rnd1:

        mov ecx,[.seed]
        add ecx,[.seed1]
        add ecx,[.seed2]
        add ecx,[.seed3]
        or ecx,1
        ror ecx,1
        add [.seed],ecx
        and cl,1
        shr ecx,cl
        adc [.seed1],ecx
        and cl,1
        shr ecx,cl
        adc [.seed2],ecx
        and cl,1
        shr ecx,cl
        adc [.seed3],ecx
        ret
;;;;;;;; initialisation du generateur aleatoire depuis un mot de passe en ascii
.init:
        push eax ebx ecx    
        mov ecx,[esi]          
        add esi,4
        mov [.seed],ecx    ; initialiser les graines avec la taille du mot de passe
        mov [.seed1],ecx
        mov [.seed2],ecx
        mov [.seed3],ecx
@@:
        movzx eax,byte[esi]  ; charger un char du mot de passe.
        movsx ebx,al
        ror ebx,16
        add eax,ebx
        add [.seed],eax 
        adc [.seed1],0  
        adc [.seed2],0  
        adc [.seed3],0   
        inc esi               
        dec ecx               
        jne @b                 
        pop ecx ebx eax    
        ret
align 4
.seed dd 0
.seed1 dd 0
.seed2 dd 0
.seed3 dd 0


Remarque :

bon, alors ceci es tun petit essai de cryptage de fichier avec fasm. ça marche bien, meme tres bien.

globalement, il suffit de changer de generateur aléatoire pour obtenir une meilleure securité.

mais je met au defit quiconque de casser un fichier crypté avec ce type de code.

le but est simple:

initialiser un PRNG avec un mot de passe avant cryptage/decryptage.

utiliser la sortie du PRNG pour faire un XOR sur le fichier au niveau du pointeur.

noter qu'il faut creer un champ taille au debut du mot de passe et du fichier.

le mot de passe peu faire jusqu'a 2^32-1 octet, totalement inutile...

la routine marche dans les deux sens en raison du XOR. il ne faut pas oublier d'initialiser le generateur avant.


enjoy!

PS, je ne sais pas si cette technique est deja utilisée quelque part, mais tant pis, on dira que je l'ai inventée... ;)



Snippets en rapport avec : Cryptage, Chiffrement, Pseudo aleatoire, Mot de passe, Assembleur fasm

10/04/2006 - Hashage MD5



Codes sources en rapport avec : Cryptage, Chiffrement, Pseudo aleatoire, Mot de passe, Assembleur fasm

{ColdFusion} CRYPTAGE DE DONNÉES
Voici un CFX-TAG permettant le cryptage de données en utilisant l'API de Windows. Celui-ci est dév...

{JAVA / J2EE} STEGANOGRAPHIE & RSA, SWT
Cet utilitaire permet d'insérer des données dans une image bit map. Il propose aussi de chiffrer ...

{Delphi} HROT, COMPRESSION CODÉE DE FICHIER PAR CLEF 128BITS
HRot est une idée que j'ai depuis longtemps et avec le nombre de sources proposant des methodes de ...

{Python} CHIFFRE DE VIGENÈRE
Bonjour à tous ! Face au nombre un peu faiblard de codes disponibles en Python, j'ai décidé de dépos...

{PHP} CHIFFRE DE VIGENÈRE
bonjours je viens de faire un petit script cryptant un text en utilisant le chiffre de Vigenère. ...

{IRC} MIRC CRYPTOR UN SCRIPT POUR CHIFFRER LES DISCUTIONS
... j'ai fait sa ;o) y a déjà un bon moment faudrai encore l'ameliorer :) hhhhaa.. j'esprére un jo...

{Visual Basic, VB6, VB.NET, VB 2005} CHIFFRE DE VIGENÈRE
Une procédure pour utiliser le Chiffre de Vigenère. Entrez un texte, une clé, et il vous chiffre / d...

{Visual Basic, VB6, VB.NET, VB 2005} SYNARCHIVEUR
**SYnArchiveur** Ceci est un archiveur de fichiers, qui créer une archive regroupement de plusieu...

{C# / C#.NET} CIPHER: UNE DLL POUR CRYPTER DES FICHIERS AVEC .NET
Cipher est en faite la version 2 du crypteur de fichier XBlue disponible sur delphifr. Cipher ce pre...

{Javascript / DHTML} CRYPTAGE DE TEXTE PAR ALGORITHME DE VIGÉNÈRE
Un tout petit script qui implémente le cryptage de Vigénère pour crypter du texte. Affichage de l'an...