[R] _String Encrypt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

[R] _String Encrypt

#1

Message par timmalos »

Bonjour à tous.

J'ai un petit programme qui a besoin pour fonctionner d'un .dat avec un mot de passe à l'interieur. Mot de passe crypté bien entendu. seulement voila, ce .dat est sur mon ftp disponible à tous ceux qui s'y connaissent un minimum. Si ils ont autoit, un coup de _stringencrypt et ils retrouvent ce mot de passe, la catastrophe pour moi. Alors je voulais savoir comment modifier cette fonction pour changer un peu sa façon de crypter. je l'ai analysée un peu mais je n'ai pas trouvé:)

Le cryptage se fait à mon avis sur cette ligne que je n'ai pas comprise totalement:

Code : Tout sélectionner

$v_EncryptModified = $v_EncryptModified & Chr(BitXOR(Asc(StringMid($s_EncryptText, $i_EncryptCountG, 1)), Asc(StringMid($s_EncryptPassword, $i_EncryptCountH, 1)), 255))
mais les lignes d'en dessous je n'y comprend rien du tout:)

Code : Tout sélectionner

Local $av_EncryptBox[256][2]
                For $i_EncryptCountA = 0 To 255
                    $av_EncryptBox[$i_EncryptCountA][1] = Asc(StringMid($s_EncryptPassword, Mod($i_EncryptCountA, StringLen($s_EncryptPassword)) + 1, 1))
                    $av_EncryptBox[$i_EncryptCountA][0] = $i_EncryptCountA
                Next
                For $i_EncryptCountA = 0 To 255
                    $i_EncryptCountB = Mod(($i_EncryptCountB + $av_EncryptBox[$i_EncryptCountA][0] + $av_EncryptBox[$i_EncryptCountA][1]), 256)
                    $v_EncryptSwap = $av_EncryptBox[$i_EncryptCountA][0]
                    $av_EncryptBox[$i_EncryptCountA][0] = $av_EncryptBox[$i_EncryptCountB][0]
                    $av_EncryptBox[$i_EncryptCountB][0] = $v_EncryptSwap
                Next
                For $i_EncryptCountA = 1 To StringLen($s_EncryptText)
                    $i_EncryptCountC = Mod(($i_EncryptCountC + 1), 256)
                    $i_EncryptCountD = Mod(($i_EncryptCountD + $av_EncryptBox[$i_EncryptCountC][0]), 256)
                    $i_EncryptCountE = $av_EncryptBox[Mod(($av_EncryptBox[$i_EncryptCountC][0] + $av_EncryptBox[$i_EncryptCountD][0]), 256)][0]
                    $v_EncryptCipherBy = BitXOR(Asc(StringMid($s_EncryptText, $i_EncryptCountA, 1)), $i_EncryptCountE)
                    $v_EncryptCipher &= Hex($v_EncryptCipherBy, 2)
                Next
                $s_EncryptText = $v_EncryptCipher
Merci à tous ceux qui voudront bien m'aiderà comprendre ces lignes pour me permettre de modifier cette fonction.

Nb: Je sais qu'il est impossible de faire un encryptage parfait avec mes moyens, mais modifier un minimum cette fonction rendrait son utilisation beaucoup plus sure:)
Modifié en dernier par timmalos le lun. 07 juil. 2008 13:42, modifié 2 fois.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] _String Encrypt

#2

Message par ani »

Je ne m'y connait pas assez, mais si ton password est crypté il est peu probable qu'on le decrypte
sauf si tu donne la source du programme de cryptage (qui sera en clair), EncryptPassword et EncryptLevel

_stringencrypt(1,"texte","MonSecretInfo","10")

1 = pour crypté
texte = le texte (ici c'est le password de ton dat)
MonSecretInfo = nombre maximum pour le cryptage 13 caractère (EncryptPassword)
10 = c'est le level maximum (EncryptLevel)

je réediterai dans le cas ou je trouve un autre algorithme d'encryptage ;)
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] _String Encrypt

#3

Message par timmalos »

@ani : je prevois des études en cryptographie, et je t'assure qu'en utilisant le niveau 1 de cette methode de cryptage, quelqu'un d'expérimenté le trouve en moins d'une minute (il peut meme faire un script autoit pour aller encore plus rapidement:): en effet, il est simple de voir quand le code ne devient plus du HEXA et en utilisant la force brute ( on teste toutes les possiblités ), et c'est le cas avec les 3/4 des méthodes de cryptage qu'on voit sur le net, en moins d'une minute le mdp est trouvé (avec une bonne machine). En ne connaissant pas l'algorithme de cryptage, il est beaucoup plus compliqué de trouver le mot de passe (toujours possible bien sur mais il faut être expert )
ET en haussant le lvl d'encryptage, ce n'est que guère mieux et cela prend trop de temps pour etre envisagable dans mon programme ( Après cryptage, ca prend trop de place egalement EX:voila ce que donne cheval encrypté par cheval au lvl 10: 5 Sec environ, et j'ai 15 mdp à traiter:plus d'une minute de traitement, je voudrais 5 sec au maximum pour bien faire:)
)

Je voudrais bien créér une fonction totalement différente, mais quand je vois celle existante, je ne pense vraiment pas avoir assez de compétences en Autoit pour réussir. Par contre, si quelqu'un se sent capable, je peux lui envoyer un algorithme que j'utilise souvent (mélange de XOR + ajout de la clef) en mp pour qu'il le code en Autoit :), c'est un algorithme assez simple que j'ai deja codé en C il y a assez longtemps, je ne pense pas qu'il posera de problèmes aux plus expérimentés d'entre vous.
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..] _String Encrypt

#4

Message par tolf »

J'ai commencé à chercher et je vois déjà comment fonctione la ligne :

Code : Tout sélectionner

$v_EncryptModified = $v_EncryptModified & Chr(BitXOR(Asc(StringMid($s_EncryptText, $i_EncryptCountG, 1)), Asc(StringMid($s_EncryptPassword, $i_EncryptCountH, 1)), 255))
Donc en fait, il y a une boucle :

Code : Tout sélectionner

For $i_EncryptCountG = 1 To StringLen($s_EncryptText)
qui fait défiler tous les caractères du texte à crypter et en même temps tous les caractères de la clé de cryptage ($i_EncryptCountH correspond à l'index du caractère de la clé de cryptage).

Pour revenir à la 1ère ligne on a :

Code : Tout sélectionner

Asc(StringMid($s_EncryptText, $i_EncryptCountG, 1))
qui correspond au code ascii du caractère à encrypter et :

Code : Tout sélectionner

Asc(StringMid($s_EncryptPassword, $i_EncryptCountH, 1))
qui correspond au caractère associé de la clé de cryptage.
Et le BitXOR mixe les bits des 2 ascii puis le nouveau code est transformé en caractère par Chr
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..] _String Encrypt

#5

Message par tolf »

Pour ce qui est des dernières lignes, il s'agit en fait d'un second cryptage.
- une boîte de cryptage est créée avec 256 lignes (une par octet possible) :

Code : Tout sélectionner

Local $av_EncryptBox[256][2]
For $i_EncryptCountA = 0 To 255
    $av_EncryptBox[$i_EncryptCountA][1] = Asc(StringMid($s_EncryptPassword, Mod($i_EncryptCountA, StringLen($s_EncryptPassword)) + 1, 1))
    $av_EncryptBox[$i_EncryptCountA][0] = $i_EncryptCountA
Next
- elle est mélangée dans tous les sens avec la clé de cryptage :

Code : Tout sélectionner

For $i_EncryptCountA = 0 To 255
    $i_EncryptCountB = Mod(($i_EncryptCountB + $av_EncryptBox[$i_EncryptCountA][0] + $av_EncryptBox[$i_EncryptCountA][1]), 256)
    $v_EncryptSwap = $av_EncryptBox[$i_EncryptCountA][0]
    $av_EncryptBox[$i_EncryptCountA][0] = $av_EncryptBox[$i_EncryptCountB][0]
    $av_EncryptBox[$i_EncryptCountB][0] = $v_EncryptSwap
Next
- Ensuite, on a :

Code : Tout sélectionner

$i_EncryptCountC = Mod(($i_EncryptCountC + 1), 256)
$i_EncryptCountD = Mod(($i_EncryptCountD + $av_EncryptBox[$i_EncryptCountC][0]), 256)
$i_EncryptCountE = $av_EncryptBox[Mod(($av_EncryptBox[$i_EncryptCountC][0] + $av_EncryptBox[$i_EncryptCountD][0]), 256)][0]
... qui permet d'avoir $i_EncryptCountE qui change de valeur à chaque fois dans tous les sens (alors que $i_EncryptCountC s'incrémente à chaque fois).

- Enfin on mixe le caractère à crypter avec la valeur de $i_EncryptCountE dans un BitXOR :

Code : Tout sélectionner

$v_EncryptCipherBy = BitXOR(Asc(StringMid($s_EncryptText, $i_EncryptCountA, 1)), $i_EncryptCountE)
...et on ajoute à la chaîne cryptée la valeur hex du caractère crypté :

Code : Tout sélectionner

$v_EncryptCipher &= Hex($v_EncryptCipherBy, 2)
Voilà j'espère avoir pu t'aider à décrypter ce code assez compliqué :lol:
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
arrkhan
Niveau 8
Niveau 8
Messages : 528
Enregistré le : sam. 17 nov. 2007 03:30
Status : Hors ligne

Re: [..] _String Encrypt

#6

Message par arrkhan »

rien ne t'empeche d utiliser un autre cryptage que celui qui est fourni avec AutoIt, personnellement j'utilise RijnDael (AES pour les intimes) et stringtohex

RinjDael sur Wikipédia
Fichiers joints
RijnDael.zip
RijnDael
Attention, plus de 4000 lignes
(26.81 Kio) Téléchargé 171 fois
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] _String Encrypt

#7

Message par timmalos »

Merci beaucoup pour toutes ces réponses
Yoldark
Niveau 1
Niveau 1
Messages : 6
Enregistré le : dim. 09 mars 2008 12:24
Status : Hors ligne

Re: [R] _String Encrypt

#8

Message par Yoldark »

Bonjour je fais remonter un peu mais comment on se sert de RijnDael s'il te plait
Répondre