C Frage wegen Passwortberechnung

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
Benutzeravatar
Hightech
Beiträge: 11307
Registriert: So 11. Aug 2013, 18:37

C Frage wegen Passwortberechnung

Beitrag von Hightech »

Moin,
ich hab hier eine Weichware die eine Prüfung auf ein Passwort macht,
kann mir jemand sagen, welche Bedingungen erfüllt sein müssen, dass das Passwort akzeptiert wird?
Ich habe das Passwort, aber ich bekomme eine Fehlermeldung.

Code: Alles auswählen


static TLevel currLevel = LEV_1;
static char p1_[] = "H�llenhorst";
static char p1[]  = {0x2d,0x2b,0x2d,0x4b,0x5d,0x50,0x48,0x4d,0x4f,0x00};
static char p2_[] = "Himberheinz";
static char p2[]  = {0x51,0x5c,0x28,0x28,0x00,0x00,0x00,0x00,0x00,0x00};

Code: Alles auswählen

 
 
 ........................
 BOOL TSecurity_SetNewAccessLevel(char * user, char * passwd)
{
   char * tpsw = passwd;
   size_t l=0;
   p1_[9] = 0;
   p2_[9] = 0;

   assert(user);
 ..................................
 
 else if (strcmp("sma", user) == 0)
   {
      char * b = p1;
      while(*b != 0 && *tpsw != 0)
      {
         if ( (*b ^ 0x18) != *tpsw )
            return false;
         b++;
         tpsw++;
         l++;
      }

      if (l != strlen( p1 ) || l != strlen( passwd ) )
         return false;

      currLevel = LEV_3;
      return true;   
   }
   else
      return false;   
}
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: C Frage wegen Passwortberechnung

Beitrag von Fritzler »

Na erstmal darf das PW nur 9 Zeichen haben, da idx 9 bei beiden Passwörtern aufs Nullzeichen gesetzt wird.
Hat dein bekanntes PW also mehr als 9 Stellen, dann gebe nur 9 davon ein.

Zudem steht das pw mit 0x18 verXORed im Speicher (was mal so absolut ganix bringt)
Daher:

Code: Alles auswählen

static char p1[]  = {0x2d,0x2b,0x2d,0x4b,0x5d,0x50,0x48,0x4d,0x4f,0x00}; // -+-K]PHMO
static char p1[]  = {0x35,0x33,0x35,0x53,0x45,0x48,0x50,0x55,0x57,0x00}; // 535SEHPUW
Benutzeravatar
Zabex
Beiträge: 632
Registriert: Di 2. Jul 2013, 08:45
Wohnort: Aldenhoven
Kontaktdaten:

Re: C Frage wegen Passwortberechnung

Beitrag von Zabex »

Das Passwort {0x2d,0x2b,0x2d,0x4b,0x5d,0x50,0x48,0x4d,0x4f,0x00}; wird zeichenweise mit dem eingegebenen Passwort verglichen, nachdem die 2 mittleren Bits durch die Exclusiv-Oder Verknüpfung mit 0x18 umgedreht wurden.
0x2d^0x18=0x35, ASCII: 5
0x2b^0x18=0x33, ASCII: 3
0x2d^0x18=0x35, ASCII: 5
0x4B^0x18=0x53, ASCII: S
0x5d^0x18=0x45, ASCII: E
0x50^0x18=0x48, ASCII: H
0x48^0x18=0x50, ASCII: P
0x4D^0x18=0x55, ASCII: U
0x4F^0x18=0x57, ASCII: W

Zum selber Rechnen:
Wenn Du Win10 hast: Nimm die App "Rechner", stell die auf "Programmierer" und du kannst a XOR b rechnen lassen.
Benutzeravatar
Hightech
Beiträge: 11307
Registriert: So 11. Aug 2013, 18:37

Re: C Frage wegen Passwortberechnung

Beitrag von Hightech »

Das Passwort ist eigentlich eine zehnstellige Zahl.Nur sagt mir die Software immer dass das Passwort ungültig sei.
dom
Beiträge: 76
Registriert: Do 15. Okt 2015, 19:28

Re: C Frage wegen Passwortberechnung

Beitrag von dom »

Beziehe ich die vermutete Herkunft des Codeschnipsels mit ein, würde ich behaupten, hier wurde absichtlich etwas verändert & vergessen.
* Description : No comments here are not an fault but an feature...:-)
* I will not explain the "security" here...
* This code here in this file is coded as possible "unreadable"
* so please don't ask me...
Benutzeravatar
Hightech
Beiträge: 11307
Registriert: So 11. Aug 2013, 18:37

Re: C Frage wegen Passwortberechnung

Beitrag von Hightech »

Ich frage mich:
Soll ich mein Passwort bei p1 eintragen und es wird dann unten nur verglichen ob es plausibel ist?
Benutzeravatar
Zabex
Beiträge: 632
Registriert: Di 2. Jul 2013, 08:45
Wohnort: Aldenhoven
Kontaktdaten:

Re: C Frage wegen Passwortberechnung

Beitrag von Zabex »

Du kannst das Passwort im Klartext in das array p1[] eintragen. Es muss genau 9 Stellen haben. Dann musst Du aber die Zeile
if ( (*b ^ 0x18) != *tpsw )
durch folgende ersetzen (das XOR auswerfen):
if ( (*b) != *tpsw )


Beispielpasswort:
static char p1_[] = "zabex"; //Username
static char p1[] = "123456789"; //Passwort
Antworten