Source [VB] Auth avec .dll
#1
Information 
Bonjour, je vous propose un petit code source pour faire un login pour tout type de programme, relié a une bdd.
Attention, faut un hébergeur payant pour avoir un bdd avec accès distance
000webhost est non fonctionnel (version gratuite)

Je suis chez Always Data (Service gratuit et bonne bdd avec accès distance)

Code :
Dim ConnectionSQL As New MySqlConnection("server= serveur;port=3306; userid= userbdd; password= mdp; database= bdd;")
       Dim COMMAND As New MySqlCommand
       Dim reader As MySqlDataReader
       Dim myAdapter As New MySqlDataAdapter
       Dim SQL As String
       ConnectionSQL.Open()
       COMMAND.Connection = ConnectionSQL
       
       'Connexion a la BDD
       '
       COMMAND.CommandText = "SELECT aaaaa, bbbbb FROM nomdelatable WHERE aaaaa='" & NOMDELABOX.Text & "' and bbbbb='" & NOMDELABOX.Text & "'"
       reader = COMMAND.ExecuteReader
       If reader.HasRows Then
          'Lancement de programme/ form
           End If
       Else
Message d'erreur si aaaa ou bbbb faux
               MsgBox("    ")
       End If

Possibilité de rajouter un système qui check si la personnes est banned

Code :
 

         myAdapter.SelectCommand = COMMAND
          reader.Read()
          reader.GetValue(2)
          If reader.GetValue(2) = "True" Then
              MsgBox("Banned key, program will close")
              LABEL_ID_BANNED.IsEnabled = True
              ConnectionSQL.Close()
              End
          Else
              MsgBox("Lancement du launcher")
              Dim frm As New Dashboard()
              frm.Show()
              Me.Close()

Ce n'est pas parfait, un peu de bidouillage pour le bannissement mais fonctionnel

Il faut pour cela un .dll
MySQL.Data.dll

Bon, je vous donne le setup, beaucoup plus simple 1
Le liens du setup sur leurs sites:
https://dev.mysql.com/downloads/connector/net/
Le dl est long à la fin, aucune idée du pourquoi du comment mais le dl se bloque à 100 chez moi ^^ et se débloque au bout de 5 minutes je l'ai donc upload sur mon site si vous le souhaitez:
https://www.nightwalker.fr/mysql-connect...-6.9.9.msi


Suffit juste de mettre deux textbox + un bouton, après le design c'est à vous ^^
Il est possible de rajouter d'autres textbox ou vérifications.

Exemple de mon launcher:
https://image.noelshack.com/fichiers/201...walker.png

Virus total au cas où y a des doutes sur le setup:
https://www.virustotal.com/fr/url/18feb2...502339455/
#2
Tout d'abord merci du partage ca fait plaisir de voir des posts fait par des membres mais par contre c'est chaud quand même de stocker les infos de connexion de ta bdd dans ton exécutable non ? L'utilisation d'une connexion mysql directe me semble plus approprié pour un soft d'administration qui restera privé. Tu peut faire passer toutes tes requêtes avec post / get en php pour sécurisé un peu le tout. Parceque qui dit .net dit tout le monde peut voir ton code ^^
Répondre
#3
Je savais que c'était possible avec du php ^^ Mais j'ai pas trouvé de tutoriel fonctionnel, et comme je m'aventure pas trop dans le php j'ai abandonné, il me sortait une erreur à la dernière ligne donc : 

?>

Ensuite j'ai essayé en rajoutant la fonction RC4 pour "traduire" 

Code PHP :
function rc4($key$str) {
$s = array();
for (
$i 0$i 256$i++) {
$s[$i] = $i;
}

$j 0;

for (
$i 0$i 256$i++) {
$j = ($j $s[$i] + ord($key[$i strlen($key)])) % 256;
$x $s[$i];
$s[$i] = $s[$j];
$s[$j] = $x;
}

$i 0;
$j 0;
$res '';

for (
$y 0$y strlen($str); $y++) {
$i = ($i 1) % 256;
$j = ($j $s[$i]) % 256;
$x $s[$i];
$s[$i] = $s[$j];
$s[$j] = $x;
$res .= $str[$y] ^ chr($s[($s[$i] + $s[$j]) % 256]);
}

return 
$res;
}
  
?>
    
  

Sauf que ça me faisait rien et me sortait 5 erreur qui était 

Code PHP :
$sessionID $_GET["sessionID"];
$actionget $_GET["action"];
$user $_GET["user"];
$password $_GET["password"];
$registerkey $_GET["registerkey"]; 


J'avais bien la fonction rc4 vb aussi dans le prog ^^

Cependant l'erreur "?>" avait disparue
Trop de problème du coup j'ai pris la soluce du .dll en vb

le code entier:

Code PHP :
<?php
$sessionID 
$_GET["sessionID"];
$actionget $_GET["action"];
$user $_GET["user"];
$password $_GET["password"];
$registerkey $_GET["registerkey"];

if (empty(
$sessionID)) die ("ERROR:INVALID_SESSION_ID");


$action = new action;
if (
$actionget == "connect")
       $response $action->connect($user$password);
       elseif ($response == "register")
       $response $action->register($user$password$registerkey);
       else
               $response 
"ERROR:NO_ACTION";
       echo rc4($sessionID$response);

class 
action
{
       public $bdd;
       
       public 
function action()
       {
               try $this->bdd = new PDO('mysql:host= ;dbname= ''user'pwd');}
               catch (exception $ex) { die('
ERROR:ERROR_BDD_CONNECTION');}
       }
       
       public function connect($USER, $PASS)
       {
               if (!$this->userexist($USER)) return ("ERROR:USER_NOT_FOUND");
               
               $data = $this->executeQuery("SELECT * FROM Users WHERE USER = ?;", array($USER));
               if ($data['
PASSWORD'] != md5($PASS))
                       return("ERROR:INCORRECT_PASSWORD");
               elseif ($data['
ACTIF'] == 0)
                       return ("ERROR:USER_NOT_ACTIVE");
               else
                       return ("OK:") . $data['
ADMIN'];
       }
       
       public function register($USER, $PASS, $KEY)
       {
               
               $data = $this->executeQuery("SELECT * FROM Registerkey WHERE ReKey = ?;", array($KEY));
               if (empty($data['
ReKey'])) return ("ERROR:INVALID_KEY");
               if (!empty($data['
USER'])) return ("ERROR:KEY_ALREADY_USED");
               if ($this->userexist($USER)) return ("ERROR:USER_ALREADY_EXIST");
       
       $this->executeQuery("INSERT INTO Users VALUES ('', ?, ?, 1, 0, ?);", array($USER, md5($PASS), getTime()));
       $this->executeQuery("UPDATE Registerkey SET USER = ? WHERE ReKey = ?;", array($USER, $KEY));
       return ("OK:REGISTERED");
       }
       private function userexist($USER)
       {
               $data = $this->executeQuery("SELECT * FROM Users WHERE USER = ?;", array($USER));
               if (empty($data['
USER']))
                       return (false);
               else
                       return (true);
       }
       
       private function executeQuery($query, $args, $fetch = true)
       {
               $response = $this->bdd->prepare($query);
               $response->execute($args);
               
               if ($fetch)
               {
                       $data = $response->fetch();
                       $response->closeCursor();
                       return ($data);
               }
               else
                       return ($response);
}
   }

function getTime()
{
       date_default_timezone_set('
France/Paris');
       return date("Y-m-d H:m:s");
}

function rc4($key, $str) {
$s = array();
for ($i = 0; $i < 256; $i++) {
$s[$i] = $i;
}

$j = 0;

for ($i = 0; $i < 256; $i++) {
$j = ($j + $s[$i] + ord($key[$i % strlen($key)])) % 256;
$x = $s[$i];
$s[$i] = $s[$j];
$s[$j] = $x;
}

$i = 0;
$j = 0;
$res = '';

for ($y = 0; $y < strlen($str); $y++) {
$i = ($i + 1) % 256;
$j = ($j + $s[$i]) % 256;
$x = $s[$i];
$s[$i] = $s[$j];
$s[$j] = $x;
$res .= $str[$y] ^ chr($s[($s[$i] + $s[$j]) % 256]);
}

return $res;
}
  
?>    
  
Répondre
#4
Tu peut regarder ce projet dont je me suis servi pour tout mes anciens launcher Wink :
https://github.com/georift/iauth/
Répondre
#5
Ty, je vais essayer de mettre tout ça en place et try ^^
Répondre


Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  Tutoriel Bouger WPF avec un Without Border Tangohan 5 431 15-08-2017, 21:53
Dernier message: kAliix

Atteindre :

A propos
    Cs-Hackers est une communauté française de partage de connaissances et de logiciels en rapport avec counter strike et steam, créer en 2010 par Superman² le forum s'est dévellopé sous l'administration de UzGz et prend le nom de Cs-Hackers en 2012.