Page 1 sur 3

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

Posté : mer. 05 nov. 2014 19:50
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.

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

Posté : mer. 05 nov. 2014 21:20
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".

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

Posté : mer. 05 nov. 2014 22:01
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.

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

Posté : mer. 05 nov. 2014 22:02
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

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

Posté : mer. 05 nov. 2014 22:15
par TT22
Il y aurait bien la fonction Execute() mais elle ne peut pas exécuter plusieurs lignes.

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

Posté : mer. 05 nov. 2014 22:20
par mikell
Titoo tu as lu la dernière ligne du post #1 ? :mrgreen:

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

Posté : mer. 05 nov. 2014 22:51
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.

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

Posté : mer. 05 nov. 2014 23:08
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 ?

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

Posté : mer. 05 nov. 2014 23:32
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 ?

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

Posté : mer. 05 nov. 2014 23:43
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

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

Posté : jeu. 06 nov. 2014 00:19
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.

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

Posté : jeu. 06 nov. 2014 00:33
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 !

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

Posté : jeu. 06 nov. 2014 00:37
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

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

Posté : jeu. 06 nov. 2014 01:17
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) ?

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

Posté : jeu. 06 nov. 2014 09:12
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

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

Posté : jeu. 06 nov. 2014 10:34
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.

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

Posté : jeu. 06 nov. 2014 10:44
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 ?

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

Posté : jeu. 06 nov. 2014 15:11
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 ?

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

Posté : jeu. 06 nov. 2014 22:17
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.

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

Posté : jeu. 06 nov. 2014 22:24
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.