[Présentation] 3 Strings encryptions différentes et inhabituelles

MindSystem

Premium
Inscription
3 Septembre 2013
Messages
3 106
Réactions
1 458
Points
11 724
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 :

vVBLVu6JTMu78PI2lpFxUg.png

sBZ_LzUgTdyynLVl7vpWng.png

RK3pv3OKQ1qXKKwFlftP7w.png

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 :

gyoAEH8qSS6bhCNyzNhilg.png


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 :

X6nuJgrGTLKQMl3n0alMuA.png

G0GdJdo3RNCKGbTFTtIfPQ.png

Et voilà les strings :

CIlIhubeS2GNB7E5KITqMw.png


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 :

0ykiS3qxQBG00mvu-L2hKQ.png

xPhh6X-5R6_muXGJ957Hbg.png

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 :

etLu-zDkSvWFeQ3cy8zXHg.png


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, ...
 

iUNeIV

CryptoMineur
Premium
Inscription
25 Novembre 2012
Messages
1 485
Réactions
283
Points
20 534
oup je me suis tromper comme j’étais a moitie dormis quand j'ai écrire sa lol
 
Haut