Chiffrement de fichier en randxor.

Contenu du snippet

;;;;;; 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



Compatibilité : Assembleur x86

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.