Advertisement
Guest User

Untitled

a guest
May 15th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 7.71 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Security.Cryptography;
  10. using System.Threading;
  11.  
  12. namespace MS_CHAPv2_Emulator
  13. {
  14.     public partial class MainForm : Form
  15.     {
  16.         public MainForm()
  17.         {
  18.             InitializeComponent();
  19.         }
  20.  
  21.         private void tbxLog_TextChanged(object sender, EventArgs e)
  22.         {
  23.             tbxLog.SelectionStart = tbxLog.Text.Length;
  24.             tbxLog.ScrollToCaret();
  25.         }
  26.  
  27.         private void btnLogin_Click(object sender, EventArgs e)
  28.         {
  29.             Thread thr = new Thread(sendHello);
  30.             thr.Start();
  31.         }
  32.  
  33.         void sendHello()
  34.         {
  35.             //          
  36.             Append("Sende \"HELLO\" an Server");            
  37.             StartChallenge();
  38.         }
  39.  
  40.         void Append(string s)
  41.         {
  42.             this.Invoke((MethodInvoker)delegate
  43.             {
  44.                 tbxLog.AppendText(s + Environment.NewLine);
  45.             });
  46.             Thread.Sleep(500);
  47.         }
  48.  
  49.         int SessionID = 0;
  50.         string ServerPeerChallengeString;
  51.         string ClientPeerChallengeString;
  52.         void StartChallenge()
  53.         {
  54.             /*1. Der Server fordert den Client zur Authentifizierung auf (Challenge).
  55.                  Die Aufforderung besteht aus einer Sitzungs-ID (Session Identifier) und einem zufälligen Wert,
  56.                  dem Peer Challenge String.*/
  57.  
  58.             //
  59.             Append("Generiere Server-Peer-Challenge-String");
  60.             ServerPeerChallengeString = new Random(DateTime.Now.Millisecond).Next(int.MinValue, int.MaxValue).ToString();
  61.             //
  62.             Append("Generiere Serverseitige SessionID");
  63.             SessionID++;
  64.             //
  65.             Append("Sende Challenge an Client");
  66.             BuildClientAuthentication(ServerPeerChallengeString, SessionID.ToString());
  67.         }
  68.  
  69.         void BuildClientAuthentication(string ServerPeerChallengeString, string SessionID)
  70.         {
  71.             /*2. Der Client bildet aus dem Peer Challenge String,
  72.                  der Sitzungs-ID und seinem Passwort einen Hashwert (z. B. mit SHA-1).
  73.                  Dann schickt er Benutzername,
  74.                  einen eigenen zufälligen Wert und den gebildeten Hashwert an den Server zurück.*/
  75.  
  76.             //
  77.             Append("Sammle Informationen");
  78.             string PCS = ServerPeerChallengeString;
  79.             string CSessionID = SessionID;
  80.             string Password = tbxPassC.Text;
  81.             string UserName = tbxNameC.Text;
  82.            
  83.             //
  84.             Append("Erstelle Client-Sitzungs-Hash");
  85.             string StringToHash = PCS + CSessionID + Password;
  86.             byte[] data = Encoding.Default.GetBytes(StringToHash);
  87.             byte[] result;
  88.             SHA1 sha = new SHA1CryptoServiceProvider();
  89.             result = sha.ComputeHash(data);
  90.             string HashedString = Encoding.Default.GetString(result);
  91.  
  92.             //
  93.             Append("Generiere Client-Peer-Challenge-String");
  94.             ClientPeerChallengeString = new Random(DateTime.Now.Millisecond).Next(int.MinValue, int.MaxValue).ToString();
  95.  
  96.             //
  97.             Append("Erstelle Client-Authentifizierungs-String");
  98.             string ClientAuthenticationString = UserName + "\0" + ClientPeerChallengeString + "\0" + HashedString;
  99.  
  100.             //
  101.             Append("Sende Client-Authentifizierung");
  102.             CheckClientAuthentication(ClientAuthenticationString);
  103.         }
  104.  
  105.         void CheckClientAuthentication(string ClientAuthenticationString)
  106.         {
  107.             /*3. Der Server prüft die Antwort und sendet eine Annahmebestätigung oder die Ablehnung.
  108.                  Die Annahme enthält die authentifizierte Antwort der gesendeten Challenge,
  109.                  den Peer Challenge String, die verschlüsselte Antwort des Clients und das MD4-gehashte Passwort.*/
  110.  
  111.             //
  112.             Append("Prüfe Client-Authentifizierung");
  113.             string StringToHash = ServerPeerChallengeString + SessionID + tbxPassS.Text;
  114.             byte[] data = Encoding.Default.GetBytes(StringToHash);
  115.             byte[] result;
  116.             SHA1 sha = new SHA1CryptoServiceProvider();
  117.             result = sha.ComputeHash(data);
  118.             string HashedString = Encoding.Default.GetString(result);
  119.  
  120.             //
  121.             string[] authCredentials = ClientAuthenticationString.Split('\0');
  122.             if (!(HashedString == authCredentials[2]))
  123.             {
  124.                 Append("Authentifizierung fehlgeschlagen");
  125.                 return;
  126.             }
  127.             Append("Authentifizierung erfolgreich");
  128.  
  129.  
  130.             //
  131.             Append("Sammle Daten");
  132.             string PCS = authCredentials[1];
  133.  
  134.             //
  135.             Append("Erstelle Server Authentifizierung");
  136.             BuildServerAuthentication(PCS, authCredentials[0]);
  137.         }
  138.         void BuildServerAuthentication(string PCS, string UserName)
  139.         {
  140.             if (UserName != tbxNameS.Text)
  141.             {
  142.                 Append("Authentifizierung fehlgeschlagen - Username nicht vorhanden");                
  143.                 return;
  144.             }
  145.  
  146.             //
  147.             string ok = "OK";
  148.  
  149.             //
  150.             Append("Erstelle MD4-Hash des Passwortes");
  151.             MD4Hash.MD4 md4 = new MD4Hash.MD4();
  152.             string HashedPassword = Encoding.Default.GetString(md4.GetByteHashFromString(tbxPassS.Text));
  153.  
  154.             //
  155.             Append("Erstelle Server-Sitzungs-Hash");
  156.             string StringToHash = PCS + SessionID + tbxPassS.Text + UserName;
  157.             byte[] data = Encoding.Default.GetBytes(StringToHash);
  158.             byte[] result;
  159.             SHA1 sha = new SHA1CryptoServiceProvider();
  160.             result = sha.ComputeHash(data);
  161.             string HashedString = Encoding.Default.GetString(result);
  162.  
  163.             //
  164.             Append("Sende Server-Authentifizierung");
  165.             string answer = ok + "\0" + ServerPeerChallengeString + "\0" + HashedString + "\0" + HashedPassword;
  166.             CheckServerAuthentication(answer);
  167.         }
  168.         void CheckServerAuthentication(string answer)
  169.         {
  170.             /*4. Der Client prüft die Antwort. Ist die Antwort fehlerfrei wird die Verbindung genutzt.
  171.                  Wenn nicht, dann bricht der Client die Verbindung ab.*/
  172.  
  173.             //
  174.             Append("Prüfe Server-Authentifizierung");
  175.             string[] authCredentials = answer.Split('\0');
  176.             if (authCredentials[0] == "OK")
  177.                 if (authCredentials[1] == ServerPeerChallengeString)
  178.                 {
  179.                     string StringToHash = ClientPeerChallengeString + SessionID + tbxPassC.Text + tbxNameC.Text;
  180.                     byte[] data = Encoding.Default.GetBytes(StringToHash);
  181.                     byte[] result;
  182.                     SHA1 sha = new SHA1CryptoServiceProvider();
  183.                     result = sha.ComputeHash(data);
  184.                     string HashedString = Encoding.Default.GetString(result);
  185.                     if (HashedString == authCredentials[2])
  186.                     {
  187.                         MD4Hash.MD4 md4 = new MD4Hash.MD4();
  188.                         string HashedPassword = Encoding.Default.GetString(md4.GetByteHashFromString(tbxPassC.Text));
  189.                         if (HashedPassword == authCredentials[3])
  190.                         {
  191.                             MessageBox.Show("Authentication Success");
  192.                             return;
  193.                         }
  194.                     }
  195.                 }
  196.             MessageBox.Show("Server-Authentication Failed");
  197.  
  198.  
  199.         }
  200.  
  201.  
  202.     }
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement