Texte en clair dans un exe.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Texte en clair dans un exe.

Message par Kwai chang caine »

Bonjour à tous.

J'ai fait un petit programme de démarrage d'une appli qui nécéssite un mot de passe.
J'ai compilé le code jusqu'a la tout va bien :)

Mais cerise sur le ponpon, je viens de m'appercevoir qu'en le renommant en txt ou en enlevant l'extension, et qu'on le lit avec un banal bloc note, mon code secret contenu dans une variable se retrouve en clair 8O

Je sais bien que nul exe n'est illisible, mais la, j'aurrais aussi vite fais de mettre le code secret dans le nom de l'exe. :lol:
Car si une gaufrette comme moi, arrive a lire le code secret dans un exe, c'est donc à la portée de tout le monde. :roll:

J'ai fait la meme manip pour l'exe en VB et la apparement pas de code apparent.
Pourquoi VB est il meilleur sur ce coup la ? :? (J'aime pas ça)

Que faudrait il faire pour que ce qui est en clair les variables, les chemins, les codes secrets, soit en hieroglyphe sans avoir a crypter les données ?

Si quelqu'un a une idée ou une explication elle est comme dab la tres bienvenue.

Merci de votre attention
Bonne journée
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

C'est normal, puisque le mot de passe est inscrit dans l'exe. Utilise le hash MD5:

Lorsque l'utilisateur entre un mot de passe, tu fais sont hash md5. Ensuite tu compare chaque morceau de hash (5-6 caractères) avec des morceaux stocké dans l'exe. (afin d'eviter d'avoir le hash complet à la suite dans l'exe)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Ou alors tu pack ton exe avec un soft comme Upx(gratos), AsProtect(payant).. Y'a meme un cruncher en PB je crois.. Mais je sais plus ou. :?:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Oula oula noir de mots que je connais pas
En fait presque tout :lol:

Je pourrais meme dire que les reponses sont bien plus compliquées que la question :lol:

@Julien
Le code est inclus dans l'exe car c'est pour eviter de le taper, alors comment je fais un hash ???
Je vais chercher a voir ce que cela veut dire :roll:

@Ar-s
Je "pack l'exe" c'est à dire une compression ??? style pack, umpack ??
Un "cruncher" c'est quoi cette bete ???

J'irais voir ce fameux UPX sur le net, mais c'est vrai que j'aurais préféré une soluce PB

Merci à vous deux
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Te reste encore la soluce de convertir ton

Code : Tout sélectionner

pass$="monpass"
par un truc du genre

Code : Tout sélectionner

fin$=+chr(83)+chr(83)
pass$=chr(77)+chr(79)+chr(78)+"pa"+fin$
ça permet d'embrouiller les choses aux utilisateurs lambda du farfouillage d'exe.

Pour te repondre Cruncher, packer c'est la meme chose.

:P
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonne idée les chr :D
J'y aurais pas pensé

Je vais essayer pour voir ce que ça donne dans le TXT

Merci bien Ar-s 8)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tu as aussi la fonction xor !! qui marche pas trop mal :D

dans ce listing tu as la partie encodage que tu peux mettre dans un autre programme , ce programme ne te servira qu'a encoder un mot ou une phrase , et le resultat de l'encodage se trouve dans le press papier !! :D
tu "contrl+v" ce code dans ton listing,dans une variable , c'est ceci qui sera caché de la vue :D


ensuite la deuxième parti du prg la partie "décodage"
que tu mettra dans ton fameux prg
servira a décodé ce fameux mot encodé que tu a préalablement mis dans une variable comme indiqué plus haut :D

il faut bien sur joindre la procédure aussi :D

c'est la meme procédure qui encode ou décode le mot :D

ici j'ai utilisé un mot de pass constant "passwrd" , que tu peux changer , du moment que tu utilise le même a l'encodage et au décodage !! :D

une utilisation intéressante c'est de prendre plusieurs mot de pass

tu encode avec le premier mot, puis ce résultat encodé tu le sur-encode avec le deuxième ect...

le tout c'est qu'au moment du décodage, il te faudra utiliser l'ordre inverse de mot de pass que pour l'encodage

si tu encode avec

chien
chat
souris


pour decoder, il te faudra faire

souris
chat
chien

pour enfin retrouver la phrase décoder :D

c'est puissant le Xor, l'air de rien :D

bien sur plusieurs mot de pass, dont tu sera le seul a connaitre le sens pour le décodage, du coup meme s'ils sont visible, on s'en fout :D









Code : Tout sélectionner

Procedure.s code(sortie$, Password.s) 
    text.s=sortie$
    Password.s=UCase(Password.s)
    p=0
    long_or = Len(text.s)
    long_pass = Len(Password.s) 
    For i=1 To long_or
        p=p+1 : If p= long_pass:p=1:EndIf 
        car_pass.l=Asc( Mid(Password.s, p, 1))  ; recupere une lettre (son code ascii)du mot de pass
        car_text.l= Asc(Mid(text.s, i, 1)) ; recupere une lettre (son code ascii) du text a coder
        If car_text.l=car_pass.l
            car_pass.l=car_text.l ; echange 
            car_text.l=254    ; si 254 , c'est le code choisi pour dire que la lettre a coder est egal a
            sorti.l=car_pass.l ; la lettre du mot de pass , donc on prend directement cette lettre
            Goto su
        EndIf  
        sorti.l= car_pass ! car_text ; un petit XOR
        If sorti.l=0    ; si par hazard la lettre du mot de pass est egal a la lettre a coder 
            sorti.l=254 ; cela donnerai 0 !! donc on force un 254
        EndIf 
        su: 
        text_sorti.s=text_sorti.s+Chr(sorti) 
    Next i
    text.s= text_sorti.s
    text_sorti.s=""
    ProcedureReturn text.s 
EndProcedure

;  ***************** l'encodeur  qui peut etre un prg a part que tu garde pour toi *********************
textacoder$=" ceci est la phrase a coder" ; le mot a coder
 Password$="passwrd" ; le mot de pass 
 Debug "le mot avant codage :"+textacoder$ ; avant codage
; 
 coder$=code(textacoder$,Password$) ; on code le text avec la librairie
; 
Debug "le mot codé : a mettre dans le code   :"+coder$ ; apres codage
ClearClipboard()
SetClipboardText(coder$) ; a partir de la tu peut Ctrl+v le text encodé !! dans ton code
; il te suffira de refaire la procedure avec ce text encodé pour le relire

; **************************************************************************************


; ********************le decodeur  a mettre dans ton code (avec la procedure) ***************************** 
              
                decoder$=code(coder$,"passwrd") ; on decode le text encodé avec la librairie 
                Debug "voici le mot decodé par la prg:  "+decoder$ ; apres décodage 
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Genial ton codage/decodage dans une seule procedure :D

J'entend souvent parler de "XOR" et meme dans ma jeunesse, mais je n'etais pas fan de "X-OR" :lol: .

Mais avec cet exemple simple et tres bien expliqué ça aide à comprendre.

Merci pour ton aide DOBRO

Si apres vos idées génials, une biscotte arrive a trouver mon mot de passe sans avoir recours a l'ASM, ...........

je me fais moine ...........et pourquoi pas SHAOLIN :lol:
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

Hello,

plus d'infos sur le XOR : http://fr.wikipedia.org/wiki/OU_exclusif

En ce qui concerne le Hash MD5 : http://fr.wikipedia.org/wiki/MD5

Lorsque tu veux l'utiliser, tu choisis un mot de passe : Mot2Passe
Tu utilises la fonction MD5 pour en tirer ton hash : Mot2Passe => 09272d9b5cdb014938a29e286109a0b9

C'est cette valeur que tu inséreras dans ton exe. Lorsque l'utilisateur indique son mot de passe, tu tires le MD5 de sa saisie et tu compares avec ton hash calculé avant.

Une petite fonction pour renvoyer un hash :

Code : Tout sélectionner

Procedure.s GetMD5(dat.s)
  *a = AllocateMemory(Len(dat) + 1)
  PokeS(*a, dat)
  
  ProcedureReturn MD5Fingerprint(*a, Len(dat))
EndProcedure
Voili, voilou...
Cordialement.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Ayais le nuage sur le MD5 viens de glisser legerement grace a toi CLS.

J'ai tout compris (ALLELUIA).
Je savais meme pas que y'avais le MD5 intégré dans pure :oops:

Mais qu'est ce qui est pas inclus dans pure a part un lave vaisselle :lol:

Avec ton bout de code, ça m'a bien aidé a comprendre.

Donc si j'ai bien compris on peux "hasher" en MD5, mais on ne peux pas remettre le texte en entier, comme pour un steack haché

Je suppose que personne n'a l'opération inverse :roll:

Mille merci a vous tous pour avoir éclairé ma cave ou il fait trop souvent si sombre 8)
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

Je savais meme pas que y'avais le MD5 intégré dans pure
Va voir du coté de la librairie Cipher, il y a quelques fonctions utiles.
Donc si j'ai bien compris on peux "hasher" en MD5, mais on ne peux pas remettre le texte en entier, comme pour un steack haché
Exactement, mais ca marche aussi avec une banane, une tomate, une merguez, ...
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Ah ouaih c'est vrai ce que tu dis :lol: :lol: :lol:
On va demander a FRED d'ouvrir une rubrique "Chef la recette" :lol:

C'est dingue cette idée de créer un cryptage dont personne connait la clef.
Et apparement en freeware.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

@Ar-S

J'suis dégouting of the life.
J'ai appliqué ta combine simple des CHR
Et zobi la mouche, PB doit le reconvertir en caracteres visibles dans la foulée de la compilation.

Resultat des courses, on retrouve mes codes secrets aussi lisible qu'une banderolle de suporter de foot. :?

C'est dommage c'etait une bonne idée, mais FRED n'avait pas du voir l'interet de garder des caracteres en CHR apres compil.
Faut dire que FRED il raisonne logiquement, il pouvait pas imaginer qu'un crabe comme moi veuille un code qui marche de travers :lol:

Merci quand meme pour l'idée :wink:

Me reste donc le cryptage XOR de notre ami DOBRO et le MD5 et c'est deja pas si mal
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

Je trouve (et c'est mon avis qui n'engage que moi) que la méthode du MD5 est la plus sécurisante. Il faut par contre éparpiller des bouts de ton MD5 un peu partout dans ton code comme l'a dit très justement julien, histoire qu'il ne s'affiche pas d'un seul tenant. Il serait trop simple de changer ton MD5 avec celui d'un code que l'on connait, et hop plus de protection.
Cumulée avec une compression UPX, "impossible" d'outrepasser ta protection...
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci de ton conseil :wink:
Répondre