MindSystem
Premium
Bonjour,
lors du développement d'un logiciel, une des parties les plus importantes et des protéger les données sensibles tels que les strings (ou autres locals)
Comme j'aime bien chipoter à tout, j'ai codé hier 3 projets qui reposent plus ou moins sur le même principe mais qui sont bien différents.
1) Strings décryptés en ligne
Pour la première encryption, j'ai codé un décrypter de strings en php. Mais ce qui est bien avec cette protection, c'est que Seulement les exe que j'ai moi-même obfusqué fonctionneront. C'est pas clair, laissez-moi vous montrer :
Comme vous voyez, j'utilise webClient.DownloadString pour télécharger les strings qui sont tous initializés au runtime.
Quels sont les point négatifs de ce tool?
- Il faut du Wifi pour utiliser le tool
- Application lente à se lancer car il faut télécharger les strings.
- Api visible
Que faire alors?
- Mettre la méthode de décryption dans une dll native pour que les crackers aient plus de difficulté à comprendre la fonctionnement
Le point positif est que si vous voulez éviter un crack, ... il vous suffit de supprimer le fichier php et la exe ne fonctionnera plus ! Vous pouvez aussi faire un fichier .php pour chaque exe comme ça, le exe fonctionnera juste plus chez la personne voulue
Voici ce qui se passe si on modifie l'assembly :
L'api php va détecter le changement d'application et va retourner "Nice try but it won't work" pour tout les strings !
2) Strings Cachés sur l'ordinateur/dans une resource
Ici, les strings sont cachés dans un fichier soit resource, soit quelque part sur l'ordi. Les strings sont encryptés en utilisant un algorithme que j'ai fait moi-même :
Et voilà les strings :
La resource est normalement encryptée puis décryptée au runtime mais pour vous montrer un screen, j'ai décryptée la resource
Quels sont les désavantages?
Une fois la resource décryptée, on peut facilement lire les strings et les remplacer
Que faire alors?
Comme précédement, les strings pourraient être placées dans un emplacement secret qui serait lu dans une dll native. Cela renforcerait grandement la protection car sans connaitre l'emplacement du fichier, on ne peut rien faire.
3) NetShield Encryption style
Pour les connaisseurs, il existe un packer appellé netshield qui a une bonne manière d'encrypter ses strings. Comme le code était un peu moche et utilisait Mono.Cecil, j'ai décidé de le refaire à ma manière :
Ici rien de spécial, encore une fois j'ai encryptés les strings avec mon propre algorithme et au runtime, les strings son Set :
Quels sont les désavantages?
Avec un minimum de connaissances en RE, on peut facilement retrouver les strings. J'ai juste fait cette encryption pour le fun on va dire
Voilà, donc rien de spécial, j'ai juste essayé de changer les manières habituelles d'encrypter des strings. Je ne sais pas encore si je vais release le exe mais si vous voulez une des encryption pour un de vos projet, envoyez-moi un message privé. Je protègerais vos fichiers avec plaisir
Évidemment, on peut appliquer d'autres protection par dessus afin d'augmenter la puissance de protection.
Hésitez pas à laisser vos impressions, suggestions, ...
lors du développement d'un logiciel, une des parties les plus importantes et des protéger les données sensibles tels que les strings (ou autres locals)
Comme j'aime bien chipoter à tout, j'ai codé hier 3 projets qui reposent plus ou moins sur le même principe mais qui sont bien différents.
1) Strings décryptés en ligne
Pour la première encryption, j'ai codé un décrypter de strings en php. Mais ce qui est bien avec cette protection, c'est que Seulement les exe que j'ai moi-même obfusqué fonctionneront. C'est pas clair, laissez-moi vous montrer :



Comme vous voyez, j'utilise webClient.DownloadString pour télécharger les strings qui sont tous initializés au runtime.
Quels sont les point négatifs de ce tool?
- Il faut du Wifi pour utiliser le tool
- Application lente à se lancer car il faut télécharger les strings.
- Api visible
Que faire alors?
- Mettre la méthode de décryption dans une dll native pour que les crackers aient plus de difficulté à comprendre la fonctionnement
Le point positif est que si vous voulez éviter un crack, ... il vous suffit de supprimer le fichier php et la exe ne fonctionnera plus ! Vous pouvez aussi faire un fichier .php pour chaque exe comme ça, le exe fonctionnera juste plus chez la personne voulue
Voici ce qui se passe si on modifie l'assembly :

L'api php va détecter le changement d'application et va retourner "Nice try but it won't work" pour tout les strings !
2) Strings Cachés sur l'ordinateur/dans une resource
Ici, les strings sont cachés dans un fichier soit resource, soit quelque part sur l'ordi. Les strings sont encryptés en utilisant un algorithme que j'ai fait moi-même :


Et voilà les strings :

La resource est normalement encryptée puis décryptée au runtime mais pour vous montrer un screen, j'ai décryptée la resource
Quels sont les désavantages?
Une fois la resource décryptée, on peut facilement lire les strings et les remplacer
Que faire alors?
Comme précédement, les strings pourraient être placées dans un emplacement secret qui serait lu dans une dll native. Cela renforcerait grandement la protection car sans connaitre l'emplacement du fichier, on ne peut rien faire.
3) NetShield Encryption style
Pour les connaisseurs, il existe un packer appellé netshield qui a une bonne manière d'encrypter ses strings. Comme le code était un peu moche et utilisait Mono.Cecil, j'ai décidé de le refaire à ma manière :


Ici rien de spécial, encore une fois j'ai encryptés les strings avec mon propre algorithme et au runtime, les strings son Set :

Quels sont les désavantages?
Avec un minimum de connaissances en RE, on peut facilement retrouver les strings. J'ai juste fait cette encryption pour le fun on va dire
Voilà, donc rien de spécial, j'ai juste essayé de changer les manières habituelles d'encrypter des strings. Je ne sais pas encore si je vais release le exe mais si vous voulez une des encryption pour un de vos projet, envoyez-moi un message privé. Je protègerais vos fichiers avec plaisir
Évidemment, on peut appliquer d'autres protection par dessus afin d'augmenter la puissance de protection.
Hésitez pas à laisser vos impressions, suggestions, ...