Page 1 sur 1

[R] _String Encrypt

Posté : lun. 30 juin 2008 13:38
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:)

Re: [..] _String Encrypt

Posté : lun. 30 juin 2008 14:06
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 ;)

Re: [..] _String Encrypt

Posté : lun. 30 juin 2008 14:18
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.

Re: [..] _String Encrypt

Posté : dim. 06 juil. 2008 16:46
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

Re: [..] _String Encrypt

Posté : dim. 06 juil. 2008 17:30
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:

Re: [..] _String Encrypt

Posté : dim. 06 juil. 2008 22:49
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

Re: [..] _String Encrypt

Posté : lun. 07 juil. 2008 13:41
par timmalos
Merci beaucoup pour toutes ces réponses

Re: [R] _String Encrypt

Posté : mer. 10 sept. 2008 11:26
par Yoldark
Bonjour je fais remonter un peu mais comment on se sert de RijnDael s'il te plait