[R] Exécuter des fonctions à partir d'une chaine.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

[R] Exécuter des fonctions à partir d'une chaine.

#1

Message par mica2727 »

Bonjour (oui encore moi :P )

Je me suis dit qu'il serait bien de crypter mes fonctions parce que pour un jeu, les joueurs ont pas forcément besoin de farfouiller dans le code source.

Donc je me suis mis en route sur la fonction _Crypt_EncryptFile()
.au3 convertit en .dat (fichier crypter)

Mais ensuite un problème ce pose.

Si je décrypte avec _Crypt_DecryptFile() le fichier sera visible par tout le monde une fois décrypter ce n'est pas ce que je veux.
Donc je suis allé sur une autre fonction : _Crypt_DecryptData(), ce coup si le fichier est bien décrypter et stocker dans une chaine de caractère mais en binary, donc je me met un peu à chercher et j'en arrive à ce code :
BinaryToString(_Crypt_DecryptData(FileRead($datGUI_gui),$sKey[1],$CALG_AES_256))
Un MsgBox() qui me confirme que la chaine est parfaite.

Mais comment dire à AutoIt que cette chaine contient des fonctions à executé et inclure dans le script ?

J'ai bien essayé Execute() mais sans succès.
Modifié en dernier par mica2727 le dim. 09 nov. 2014 11:41, modifié 2 fois.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2127
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#2

Message par TommyDDR »

Pourquoi ne pas mettre ces fonctions directement dans votre code compilé ?
Si c'est de la décompilation que vous avez peur, cela ne vous protègera pas, en effet, une fois décompilé, n'importe qui aura la clé de décryptage et pourra donc avoir vos "fonctions cryptées".
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#3

Message par mica2727 »

Parce que je trouve ça plus propre de mettre les fonctions dans un dossier, la GUI dans un autre etc... Pour m'organiser, et donc quand je crypte ces 4 fichiers, je ne sais pas comment inclure ce que retourne la fonction decrypt à autoit.

J'ai remarqué que lors de la compilation AutoIt lit seulement les Include et ignore les conditions.

Dommage que AutoIt ne possède pas de fonction : IncludeString $string, et que cette $string soit prise en compte dans le code source compilé.

A moins que ce soit possible de le faire mais autrement, en tout cas je ne trouve pas.

Et oui je viens de voir que Aut2Exe, marche très malheureusement, mais je dois me connecté à une BDD, donc pas vraiment le code source à décompiler en faite.

Il y a t'il une fonction pour compiler AutoIt pour qu'il ne soit pas décompilable, ou que les données soit caché ? J'ai bien vu obfuscator, mais il n'est pu pris en charge.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#4

Message par jguinch »

Tu peux regarder du côté de #AutoIt3Wrapper_Run_Before, qui te permettra d'exécuter un programme avant la compilation. Ce programme pourra par exemple générer un fichier .au3 que tu pourras intégrer à ta source avec un Include
► Afficher le textetest.au3
► Afficher le texteincludeSource.au3
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#5

Message par TT22 »

Il y aurait bien la fonction Execute() mais elle ne peut pas exécuter plusieurs lignes.
Cordialement,
TT22
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#6

Message par mikell »

Titoo tu as lu la dernière ligne du post #1 ? :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#7

Message par mica2727 »

jguinch a écrit :Tu peux regarder du côté de #AutoIt3Wrapper_Run_Before, qui te permettra d'exécuter un programme avant la compilation. Ce programme pourra par exemple générer un fichier .au3 que tu pourras intégrer à ta source avec un Include
► Afficher le textetest.au3
► Afficher le texteincludeSource.au3
Oui mais le fichier avec FileWrite il sort quand même en clair non? Donc le joueur pourra quand même voir le code de source.au3 qui contiendra les fichiers.

Ce que je veux faire c'est chargé du code crypté pour le décrypter, donc je ne vois pas en quoi exécuté une ligne avant de lancer le compilateur changera quelque chose, a moins que j'ai loupé une étape.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#8

Message par jguinch »

Ote-moi le doute : tu as bien compris que les scripts AutoIt peuvent être compilés ?
Tu veux te protéger de ceux qui décompileraient ton script ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#9

Message par mica2727 »

Si je compile mon script, et que les données sont compilé dedans, oui il peut toujours le décompilé, et donc retrouver le mot de passe et l'accès vers ma BDD MSSQL :s

Et je ne peux pas ajouter un include .exe comme si c'était un script au3 si ?
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#10

Message par orax »

mica2727 a écrit :... et donc retrouver le mot de passe et l'accès vers ma BDD MSSQL
C'est perdu d'avance. Même avec un chiffrement ou n'importe quoi d'autre, il y aura toujours possibilité d'avoir accès au mot de passe, d'une manière ou d'une autre.

Quand on veut offusquer le code pour X raisons, il y a des packers (comme UPX). http://en.wikipedia.org/wiki/Executable ... of_packers Le problème est que les antivirus n'aiment pas toujours ces trucs là.

Ou ça, à voir : http://www.autoitscript.com/forum/topic ... rfuscator/ et http://www.autoitscript.com/forum/topic ... ur-script/

Mais est-ce que c'est encore possible de décompiler les scripts avec les dernières versions d'AutoIt et d'avoir le même code qu'à l'origine ?
3.2.6.0 (25th August, 2007) (Release)
XXXXXX[Supprimé] will only decompile 3.2.5.1
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#11

Message par mica2727 »

Oui j'ai essayé, justement. Il décompile très bien la dernière version d'AutoIt, car le moteur d'AutoIt n'a pas du changé depuis, et je trouve ça quand même énorme comme faille de sécurité de pouvoir décompiler un script.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#12

Message par jchd »

Huumpfft !
Ce n'est pas une faille de sécurité mais tout simplement un truisme de l'informatique : on peut pratiquer la rétro-ingénierie sur tout code exécutable dont on dispose de l'intégralité.

Bienvenue dans un monde transparent !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Sea
Niveau 6
Niveau 6
Messages : 219
Enregistré le : ven. 22 juin 2012 18:51
Localisation : France
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#13

Message par Sea »

On pourra toujours décompiler de l'autoit... Comme on pourra toujours décompiler du .net...
Tu peux juste ralentir les gens et éliminer les script kiddies, mais si quelqu'un qui s'y connais veux vraiment il y arrivera...

Si tu veux des choses qui ne ce décompile pas, ne publie pas ton programme ;)
mica2727 a écrit :Oui j'ai essayé, justement. Il décompile très bien la dernière version d'AutoIt, car le moteur d'AutoIt n'a pas du changé depuis, et je trouve ça quand même énorme comme faille de sécurité de pouvoir décompiler un script.
La faille c'est d'avoir confiance en l'utilisateur... Tu veux un truc sécure. Y'a pas de secret prend toi un serveur et fais toute les choses qui sont confidentiels sur ce serveur qui les renverra aux clients ;)

Je te laisser regarder ce post que j'avais fais :
http://autoitscript.fr/forum/viewtopic. ... 512#p74512
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#14

Message par mica2727 »

J'ai trouvé : Smart Packer Pro (X)

Je l'ai essayé il est fonctionnel, mais comment savoir si il est efficace et que l'ont peu pas voir le code source ? ou très difficilement ?

Et donc toujours, comment inclure un fichier dans autoit sans qu'il soit extrait à l'exécution (le défaut de FileInstall) ?
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#15

Message par jguinch »

mica2727 a écrit :Et donc toujours, comment inclure un fichier dans autoit sans qu'il soit extrait à l'exécution (le défaut de FileInstall) ?
C'est simple : tu ne peux pas
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2127
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#16

Message par TommyDDR »

De toute façon, en y réfléchissant 2 secondes, vous voulez inclure un fichier qui peut être lu par votre script (donc décryptable par votre script) et non décryptable par l'utilisateur...
Si vous pouvez faire quelque chose dans un script, alors l'utilisateur peut faire la même chose. Surtout que votre script contiendra obligatoirement la clé de décryptage donc en ayant les sources de votre code (décompilation ou autre) et bien nous avons la clé de décryptage et donc le contenu de votre fichier crypté.

Vous ne pourrez pas protéger votre script à 100% et ce dans tous les langages. Pour garder votre mot de passe au chaud, je confirme qu'une solution serait de ne pas le donner au client et de passer par un serveur qui fera les requetes pour le client.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#17

Message par mica2727 »

@TommyDDR, oui c'est vrai, mais pour VC14 quand il compile, il le fait pour tous les fichiers inclus, alors qu'autoIt, ne compile que le programme que une page en faite, a moins d'inclure un fichier config crypter par autoit en AES_256 et de protégé mon programme principal avec un UPX.

Le fichier de config, aura juste les mots de passe crypter, sinon AutoiIt ne pourras pas le lire une nouvelle fois.

Vous en pensez quoi ?
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#18

Message par mica2727 »

Oui encore moi (désolé du double poste, c'est pour la simple et bonne raison que je change d'idée ;))

Alors je partais sur une base de modifier le code, ou que le texte soit crypter, mais comme on le sait AutoIt ne le permet pas, en revanche AutoIt peut comparer des fichiers et donc des chaines de caractères, donc à occurrences 2 fichiers.

Je me suis dit je suis partie sur de mauvaise base.

Au lieu qu'AutoIt crypte et décrypte le fichier qu'il n'arrive pas à inclure, pourquoi ne pas faire une version "check" comme ça même si les membres modifie le code source des fonctions ( qui au final ne permet de rien faire, vu que le mot de passe est mis dans la version pack de MEW ).

J'ai d'ailleurs essayé MEW qui pourtant date de 2004, et PE Explorer n'arrive pas à désassembler le fichier, il ne récupère aucune donnée.

Donc mon idée se serait celle ci :
1. Je fais mon logiciel normal en .au3
2. Je compile avec Au3 (sans l'UPX d'AutoIt).
3. Je pack le .exe avec MEW.

La le .exe est protégé définitivement.

Maintenant se pose le problème que j'évoque plus haut des fichiers :
1. On a une version "func_sql.au3" entièrement accessible, et une version "func_sql.pack" crypter avec AES_256 et un mot de passe.
2. Maintenant l'idée est que AutoIt charge func_sql.au3 et func_sql.pack en tant que chaine de caractère avec "FileRead()" ensuite je le décrypte forcément et je pense pouvoir comparer les deux chaines de caractères.
3. Et si le retour est bon, dans ce cas là on charge le logiciel, si en revanche il a modifié ne serait-ce qu'une partie, on annule l'ouverture du logiciel en indiquant " Le fichier func_sql.au3 n'est plus d'origine. Ouverture du logiciel impossible. "

Est-ce que ça marcherais selon vous, et est-ce fiable ?
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#19

Message par TT22 »

mikell a écrit :Titoo tu as lu la dernière ligne du post #1 ? :mrgreen:
Oups :P
mica2727 a écrit :Je pack le .exe avec MEW.
La le .exe est protégé définitivement.
Euh, non....
Il y aura toujours un moyen de retrouver le code source !
mica2727 a écrit :une version "func_sql.pack" crypter avec AES_256 et un mot de passe
Si je comprend bien tu veux vérifier qu'un fichier n'a pas été modifié ?
Dans ce cas pourquoi ne pas utiliser une empreinte MD5 ou SHA256 au lieu d'un fichier crypté ?
mica2727 a écrit : VC14 quand il compile, il le fait pour tous les fichiers inclus, alors qu'autoIt, ne compile que le programme que une page en faite, a moins d'inclure un fichier config crypter
mica2727 a écrit :Au lieu qu'AutoIt crypte et décrypte le fichier qu'il n'arrive pas à inclure, pourquoi ne pas faire une version "check"
D'après ce que je lis j'ai l'impression que tu pense que lors de la "compilation", AutoIt n'ajoute pas les includes au programme final et qu'il faut les fournir sous forme .au3 avec le .exe, ce qui n'est pas le cas, les includes sont biens ajoutés au programme et tu n'as pas besoin de les donner à l'utilisateur.
Cordialement,
TT22
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Exécuter des fonctions a partir d'une chaine.

#20

Message par mica2727 »

Ce qui veut donc dire que :
GUI/gui.au3
Func/*.au3

Seront compilé dans le .exe ?
Ah oui c'est vrai que je suis c**, c'est comme pour les <Array.au3> pour ne donner que lui.

Donc personne ne voit mon code source, mais le pack tu ne peux pas le décodé si ?
J'ai essayé un peu (désolé du hors sujet) de décompilé un .exe compilé par VC6, et aucun programme n'y arrive ou je m'y prends très mal.

Mais ce n'est pas le sujet.
Ce que je veux dire c'est que ça reste difficile, et que ses personnes qui décompilerais mon .exe n'auront quand même pas les 100% du programme.
Verrouillé