AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Produkt Aktivierung

Ein Thema von sugaFRAG · begonnen am 23. Mai 2004 · letzter Beitrag vom 23. Mai 2004
Antwort Antwort
sugaFRAG

Registriert seit: 22. Apr 2004
Ort: Mönchengladbach
34 Beiträge
 
#1

Produkt Aktivierung

  Alt 23. Mai 2004, 01:42
Hi Jungs,

also ich will für mein proggi ähnlich wie bei xp sone activation einbauen.

jetzt möchte ich erstmal wissen, wie kann ich denn aus einem key zB.:

XKG9F-JJ89F-XXXXX-XXXXX

eine nummer erzeugen, also eine produkt id, die nur aus nummern besteht ?

danke im voraus.

mfg
sugaFRAG
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2

Re: Produkt Aktivierung

  Alt 23. Mai 2004, 01:47
informier dich mal über hash/hashes!
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
sugaFRAG

Registriert seit: 22. Apr 2004
Ort: Mönchengladbach
34 Beiträge
 
#3

Re: Produkt Aktivierung

  Alt 23. Mai 2004, 13:28
hi das habe ich,

ich habe bereits das DEC von Hagen Reddmann probiert, also dieses Demo was dabei ist.

Habe dann ne Datei erstellt mit einem code:

JR4F2-X9F5R-KJ8F2-ABCDE-87HBC

so und darauf habe ich alle hashes angewendet nur bei jedem hasch waren buchstaben dabei.

ich suche was, was nur aus Zahlen besteht wie bei der produkt aktivierung von windows xp soviel ich weiß macht die das mit sha 1 nur bei mir geht das net.

weiß einer wie ich das hinbekomme ? weil ich will die nummer als produkt id verwenden für die aktivierung.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: Produkt Aktivierung

  Alt 23. Mai 2004, 13:57
Hi

Die hashs sind erstmal irrelevant für dich. Das was du suchst findest du im DEC unter Text-Formate. Diese Routinen wandeln einen Binären Wert zur Basis 2 in einen Textstring der aus Ziffern zu den Basen 16,32,64 usw. bestehen. Im Grunde handelt es sich dabei immer um eine Textkonvertierung mit Basiswechsel.

Nun, d.h. für dich das in deinem Beispiel die Zeichen '0'..'9', 'A'..'Z' ein Set aus 36 Ziffern darstellen. Dein Ziel ist es jetzt eine "Zahl" bestehend aus diesen "Ziffern" in eine andere Basis umzuwandeln, zb. Binär = Basis 2, Dezimal = Basis 10 oder Hexdezimal = Basis 16. Ich würe dir empfehlen zur Basis 2 umzuwandeln.

WIE macht man das ??

Wir haben einen String wie "0DK8Z-Y7MN-12GUO". Zuerst entfernen wir mal die Bindestriche und bekommen "0DK8ZY7MN12GUO". Jede "Ziffer" in diesem Text ist ein gemapptes Zeichen aus dem Charset ['0'..'9', 'A'..'Z'] entspräche also den Zahlen 0 bis 35. Um diesen Wert also in einen Int64 als binäre Zahle zu konvertieren müssen wir nur von Rechts nach Links den Text auswerten, die entsprechende "Ziffer" in deren Btragsmäßigen Wert um wandeln, also 0 bis 35, unseren Int64 mit 36 multiplizieren und den ermittelten Betrag addieren. Schlichtweg eben eine einfach Umwandlung einer Textformatierten Zahl in deren binärem Gegenstück. Wir machen also exakt das gleiche was zB. StrToInt() mit einem Deziamlen String macht.

Das könnte dann so aussehen:


Delphi-Quellcode:

const
  Chars : PChar = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

function ConvertToBin(const Value: String; Base: Byte = 36): Int64;
var
  I,J: Integer;
begin
  Result := 0;
  for I := Length(Value) downto 1 do
  begin
    J := Pos(Value[I], Chars);
    if (J > 0) and (J <= Base) then
      Result := Result * Base + (J -1);
  end;
end;

Nun fehlt noch der umgekehrte Schritt:

Delphi-Quellcode:
function ConvertToBase(Value: Int64; Base: Byte = 36): String;
begin
  Result := '';
  while Value > 0 do
  begin
    Result := Chars[Value mod Base] + Result;
    Value := Value div Base;
  end;
end;
Wie du oben erkennen solltest handelt es sich um einfachste Zahlenkonvertierungen.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: Produkt Aktivierung

  Alt 23. Mai 2004, 14:14
Beachten musst du dabei nur das der Int64 auch die entsprechende "Aufnahmegröße" für die gewählte Konvertierung ermöglicht. Bei Basis 36 ist die Rechnung vereinfacht so: 1 Ziffer benötigt 8 Bit, 64Bit / 8Bit = 8 Ziffern, 36^8 ~ 2821109907000 ist die größte kodierbare Zahl.
Will man mehr benötigt man einen binären Datentyp der mehr als 64Bit groß sein kann. Dazu kann man die BCD Routinen im Delphi 7 benutzen. Oder man wählt eine clevere Basis aus. Diese Basis sollte eine Potenz von 2 sein, also 4,8,16,32,64,128 da dadurch die Konvertierungen OHNE mathematische Berechnungen auskommen. Für die Basen bis 64 enthält das DEC schon fertige Konvertierungen die ganze binäre Arrays konvertieren können. Mögliche Konvertierungen wäre TStringFormat_Base64 oder TStringFormat_Base32. Nimmt man zb. die basis 64 so benötigen wir exakt 6 Bits um eine Base64 Ziffer darzustellen. Ein Array mit 32 Bytes = 256 Bits würde also in Base64 43 "Ziffern" benötigen. Mit der Basis 32 benötigten wir dann schon 52 "Ziffern". Der Vorteil ist aber das die Konvertierungen zu solchen Basen eben sequentiell ohne math. Berechnungen wie div/mod möglich wird.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#6

Re: Produkt Aktivierung

  Alt 23. Mai 2004, 14:15
der mann vom fach hat gesprochen!

ich glaube, ich hatte da was falsch verstanden. aber wofür bringt dieses "zur zahl machen" etwas?
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: Produkt Aktivierung

  Alt 23. Mai 2004, 14:34
Man könnte den binären Wert 1 zu 1 in das ASCII Alphabeth umwandeln, also zur Basis 256. Aber dann würden Sonderzeichen, oder auf der Tastatur NICHT ereichbare Zeichen oder sogar nicht darstellbare Zeichen im zu lesenden Text erscheinen. Man könnte aber auch in einen binär formatierten Text umwandeln. 1 Datenbit wird dann durch eine 0 oder 1 dargestellt. Ein Int64 würde in Basis 256 dann als Text exakt 8 Zeichen lang sein, und als binärer und lesbarer Text eben 128 Zeichen lang. Man erkennt das die LÄNGE des Textes sich unterscheidet. Während die Basis 256 nicht lesbaren und eingebbaren aber dafür den kürzesten String produziert, produziert die Basis 2 den String mit der geringsten Anzahl an lesbaren und eingebbaren Zifferkombinationen, aber eben auch den LÄNGSTEN möglichen String.

Das Ziel der Base64/Base32/Base36 Formatierungen ist es also die effizienteste Kodierung der Strings zu erreichen, so daß die Strings annehmbar nicht zu lang werden aber gleichzeitig noch ohne Fehler eingebbar bleiben. Je größer die so kodierte Information ist desto mehr steigt die Sicherheit der Keys. Ein 32 Bit Aktivierungsschlüssel ist zB. im erreichbaren Limit für eine Brute Force Suche, also viel zu kurz. Ein 128 Bit Key ist dagegen als sicher einzustufen. Würde man diesen 128 Bit Key zur Basis 256 darstellen so müsste der Benutzer 16 Zeichen eingeben, was aber im ASCII eben nicht möglich ist. Zur Basis 2 wiederum müsste der User 128 Nullen und Einsen eingeben was ohne Fehler fast unmöglich und auch unzumutbar ist. Zur Basis 64 gibt der Benutzer dagegen 22 Zeichen ein, wobei aber nur die Buchstaben '0' bis '9' und 'A' bis 'Z' und 'a' bis 'z' gültig wären. Sprich keine Sonderzeichen und so'n Quatsch. Bei der Basis 36, einem Zeichenalphabeth bestehend aus '0' bis '9' und 'A' bis 'Z', müsste der Benutzer für die 128 Bit Information schon 128 * Ln(2) / Ln(36) = ~25 Zeichen eingeben.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: Produkt Aktivierung

  Alt 23. Mai 2004, 15:02
Ein guter Kompromiss stellt die Basis 48 dar. Sie enthielte dann alle Ziffern von '0' bis '9', alle Großbuchstaben von 'A' bis 'Z' aber OHNE 'O','Q','I','J' also zweideutig lesbare Buchstaben. Der Rest wird durch die gut lesbaren Kleinbuchstaben aufgefüllt.

128 * Ln(2) / Ln(48 ) = ~23 Zeichen.
Die Konvertierung zur Basis 48 = 0b110000 kann durch spezialisierte Algorithmen die modulo 0b100000 || 0b010000 arbeiten auch sequentiell große binäre Datenbereiche konvertieren.

Gruß Hagen
  Mit Zitat antworten Zitat
sugaFRAG

Registriert seit: 22. Apr 2004
Ort: Mönchengladbach
34 Beiträge
 
#9

Re: Produkt Aktivierung

  Alt 23. Mai 2004, 18:53
hi,

also ich hab das alles nur so halb verstanden hehe.
Kannst du mir vielleicht ein beispiel code posten wie ich das mit dem DEC benutzen kann ?
also ic hab was gefunden mit StrToBase64 oder so,kannst du mir da mal ein bsp code posten wie da sgeht ?

danke !
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10

Re: Produkt Aktivierung

  Alt 23. Mai 2004, 22:11
@Hagen: Microsoft benutzt als Basis wohl sogar nur
Code:
static char *ValidDigits = "BCDFGHJKMPQRTVWXY2346789";
Ich habe mir mal die Doks zum Thema zu Gemüte geführt. Auf www.licenturion.com/xp/ gibt´s ein paar Erklärungen und eins der Programme im Quellcode. Dort findet man die Routine, die aus dem Produktschlüssel den relevanten Teil der, in der Registry gespeicherten Produkt-ID generiert. Sehr interessant. Speziell, weil ich mich für den umgedrehten Teil interessiere. Sprich: aus der Produkt-ID wieder den Key gewinnen. Muss ja gehen. Und ist nur für meine eigene Neugier.

@sugaFRAG: Du hast nicht zufällig mal die beiden Funktionen ausprobiert, die Hagen oben gepostet hat? Eine generiert aus einem Schlüssel wie xxxxx-xxxxx-xxxxxx einen int64-Wert, und die andere wandelt diesen Wert wieder in den Schlüssel um. Und dafür brauchst du nicht mal das DEC.

Ansonsten redest du wahrscheinlich von einer Benutzerabhängigen Seriennummer, wo du mit Hilfe einer Verschlüsselung aus dem Namen des registrierten Benutzers und dem normalen Produktschlüssel einen eindeutigen Hash (sagt man so? ) generierst, der a) das Produkt freischaltet, und b) den Benutzer eindeutig identifiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz