ProgHelp

Une communauté intelligente et active

[HELP] Protéger son programme

Message par dampenfr31 » 28 Décembre 2014, 05:53

Bonjour, j'ai besoin de quelques renseignements quant à la protection de mon programme.

Mon programme est fait en VB.NET et j'utilise du PHP dedans, en gros j'ai fait un système de licence.

Bref, voici a quoi ressemble ma base de données : http://prntscr.com/5lph4j

Dans mon logiciel j'envoie une requête au serveur lorsque l'utilisateur clique sur le bouton pour vérifier sa clé.

Les réponses du serveur sont soit (sur une page blanche) :

BANNI ; si la clé est bannie ; message affiché dans une msgbox
NON ; si la clé est incorrecte ; message affiché dans une msgbox
le md5 de la clé ; si elle est valide et pas bannie ; mise a jour des infos (ip) puis passage au second formulaire

Pour bien sécuriser mon soft, je me suis dit qu'il fallait vérifier a intervalle régulier si on est bien sur le bon serveur, connecté a internet etc. Ce qu'il fait toutes les 30secondes. Il vérifie si la clé n'est pas bannie, si le serveur est bien synchronisé niveau version, données etc... toutes les 30sec.

J'ai aussi fait un système de requêtes du genre : http://www.site.fr/check.php?datas=quelquechose
data est en fait quelques informations,puis le programme compare les deux hash, un retourné par le serveur, un retourné par le logiciel. (hash de ce fameux data)
ça aussi, c'est fait toutes les 30 secondes ^^
Si les hash sont différents on vérifie une deuxième fois 2sec après, et si les hash correspondent toujours pas, on ferme le soft avec une msgbox indiquant que y'a eu un problème

Mais le problème c'est que si on utilise un outil comme wireshark, on peut comprendre le fonctionnement des systèmes de sécurité et reproduire avec un serveur local WAMP :(
Je viens donc vers vous pour savoir comment littéralement crypter voir masquer les requêtes. Ou trouver un autre système, mais le HWID ne m'intéresse pas.

Mais peut être qu'en fait c'est suffisant mais personnellement j'ai peur que quelqu'un y arrive au bout de quelques minutes, moi je veux que si quelqu'un tente de reproduire le serveur, qu'il galère bien MUHAHkfgdlknjglfdg :hap:
Contactez moi par MP si vous voulez un exemplaire du système compilé pour tester la sécurité, juste la sécurité niveau réseau (reproduire le serveur et modifier le fichier hosts), pas décompiler, ou cracker.

Je vous remercie d'avoir pris le temps de lire mon message, en espérant une réponse de votre part, je vous souhaite une bonne journée/soirée/nuit.

EDIT : Je précise juste au cas ou il y aurait des malentendus, je souhaites des idées possibles a réaliser, je ne demande pas de code tout fait. C'est en s’exerçant qu'on apprend !
Avatar de l’utilisateur
dampenfr31
Petit nouveau
 
Messages : 7
Points d'honneur : 7 PH
Inscription : 28 Fév 2013

Message par Patak » 28 Décembre 2014, 20:02

Salut :grin:
Niveau interopérabilité VB.NET + PHP, tu peux t'inspirer de ça : ICI
Après il te faut éviter le rejeu, donc pourquoi pas inclure un hash de l'heure dans la requête (+ verif en PHP).
La seule limite, c'est ton imagination !

PS : Si tu veux jouer avec les Bytes entre VB.NET et PHP, j'ai un code sympa 8-)
Image


SPOILER : AFFICHER


Avatar de l’utilisateur
Patak
Administrateur
 
Messages : 1144
Points d'honneur : -666 PH
Inscription : 30 Oct 2012

Message par dampenfr31 » 28 Décembre 2014, 20:10

Salut Patak, merci de ta réponse :D

Pour les IP c'est déjà fait, elles sont listées dans la base de données et je compte ajouter une colonne permettant de lister toutes les IPs différentes de celle de départ.

OMG, tu me parle d'hash d'heure et c'est EXACTEMENT ce que j'ai fait O_o C'est ça mon fameux data, c'est l'heure, qui se vérifie via hash toutes les 30sec. ^^
Mais le problème que j'ai vu au bout d'un moment c'est qu'il faut un traitement dynamique car si le gars habite au Canada, par exemple, les hash seront toujours différents. Et je sais malheureusement pas comment faire pour détecter le fuseau horaire d'une personne selon l'IP.

Peut-tu m'en dire plus sur ton système pour jouer avec les Bytes STP ?
Avatar de l’utilisateur
dampenfr31
Petit nouveau
 
Messages : 7
Points d'honneur : 7 PH
Inscription : 28 Fév 2013

Message par Patak » 30 Décembre 2014, 02:26

Encrypt & Decrypt en VB.NET :

Friend Class EncryptAlgorithm
Friend Shared Function Encrypt(ByVal StringValue As String, ByVal Key As Integer) As String
Dim Bytes As Byte() = System.Text.Encoding.UTF8.GetBytes(StringValue)

Dim StringList As New List(Of String)

For Index = Bytes.Count - 1 To 0 Step -1
StringList.Add(CStr(Key * (Key - ((Index + 1) * (255 - Bytes(Index))))))
Next

Return Join(StringList.ToArray, "A")
End Function

Friend Shared Function Decrypt(ByVal StringValue As String, ByVal Key As Integer) As String
Dim Strings As String() = StringValue.Split(("A").ToArray)

Dim ByteList As New List(Of Byte)

For Index As Integer = Strings.Count - 1 To 0 Step -1
ByteList.Add(CByte(255 - ((Key - (CInt(Strings(Index)) / Key)) / (Strings.Count - Index))))
Next

Return System.Text.Encoding.UTF8.GetString(ByteList.ToArray)
End Function
End Class


Encrypt en PHP (flemme de faire Decrypt) :

function Encrypt($stringValue, $key)
{
$byteArray = unpack("C*", $stringValue);

$stringArray = array();

for ($index = count($byteArray); $index > 0; $index--)
{
$stringArray[] = strval($key * ($key - ($index * (255 - $byteArray[$index]))));
}

return implode("A", $stringArray);
}


Le principe était de faire un couple Encrypt / Decrypt => Client / Serveur

--------------------------------

Pour l'heure tu peux faire selon le schéma suivant :

PHP :

Verif.php => Reçoit comme argument : (Data + Time) encrypté par le client + La Clé
On décrypte avec la fonction PHP, et si time() - Time < 10 secondes alors on fait ce qu'on a à faire ...

Time.php => Affiche simplement time() du serveur

VB.NET :

- Requête rapide à Time.php
- Encrypt de (Data + réponse de Time.php) à partir d'une clé aléatoire que l'on fourni dans la requête
- Attente de la réponse (elle aussi crypté selon le même schéma ?)

Maintenant, il faut savoir si ça en vaut la peine ...
En plus je n'ai pas fait la fonction Decrypt en PHP :hap:
Image


SPOILER : AFFICHER


Avatar de l’utilisateur
Patak
Administrateur
 
Messages : 1144
Points d'honneur : -666 PH
Inscription : 30 Oct 2012


Retour vers Autre

cron
  • Qui est en ligne ?
  • Consulter les nouveaux messages
  • Consulter les messages sans réponse
  • Au total, il y a 0 utilisateur en ligne :: 0 inscrit, 0 invisible et 0 invité (basé sur le nombre d’utilisateurs actifs des 5 dernières minutes)
  • Le nombre maximum d’utilisateurs en ligne simultanément a été de 272 le 12 Mars 2015, 03:11
  • Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)