Keygen in Pyhton

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

Python Master 47 hat geschrieben:

Code: Alles auswählen

Name=raw_input('Name:')
Serial1=[ord(x) * 666 for x in Name]
Serial2=Serial1[0]+(len(Name)*14568)
Serial3=(Serial1[0]/666.0)*14568
Serial4=Serial3*123
Serial5=len(Name)*(Serial1[0]/666.0)
Serial6=Serial5*6613
Serial7=Serial6+14568
print 'Serial:', Serial2, '-', int(Serial4), '-', int(Serial7)
Schau Dir mal an, oder überleg Dir mal wie `Serial1` aussieht und was Du davon wirklich brauchst.
Auch fragt ihr euch warum ich Serial3 und 5 in float umwandle und dann wieder in int. Naja ich musste wieder auf den ersten Buchstaben von Name zugreifen und da der erste Wert in Serial1[0] mit 666 multipliziert wurde hab ich einfach durch 666.0 dividiert um

a)ein genaues ergebniss zu erhalten
Das ist Blödsinn. "10.0 / 2.0" ist nicht genauer als "10 / 2". Das gilt für alle ganzen Zahlen. Fliesskommazahlen können unter Umständen sogar ungenauere Ergebnisse liefern als Rechnungen mit ganzen Zahlen.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Das ist kein Blödsin, weil:

wenn a:b=x, x€N

dann brauch ich keine division mit float, aber

wenn a:b=x, x€ !=N

dann ist int, ungenauer, z.B. ist 500/33 ist ungenauer als 500/33.0 :wink:
mfg

Thomas :-)
BlackJack

Python Master 47 hat geschrieben:Das ist kein Blödsin, weil:

wenn a:b=x, x€N

dann brauch ich keine division mit float, aber

wenn a:b=x, x€ !=N

dann ist int, ungenauer, z.B. ist 500/33 ist ungenauer als 500/33.0 :wink:
Da Du mit einer ganzen Zahl multiplizierst und nur durch die selbe ganze Zahl teilst, gilt immer Fall 1. Du hast also keinen Genauigkeitsgewinn durch Fliesskommazahlen.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Ja stimmt, war ein Fehler von mir! :oops: :oops:
mfg

Thomas :-)
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Hast Du Dir das selbst ausgedacht für ein Programm von Dir?

Wenn ja, dann würde ich erst mal anfangen mit kryptographisch sicheren Algorithmen umzugehen (wie zum Beispiel ein MD5- oder SHA-Digest). Da Du im Prinzip nur einen kleinen Teil der Eingabe für das Serial verbrauchst ist die Anzahl bits tatsächliche Daten pro Ausgabezeichen verschwindend gering, und somit auch Kollisionen mehr als einfach herstellbar.

Wenn sich das jemand anders ausgedacht hat gehört der wegen inkompetenten Programmierens an den Pranger gestellt. ;-)

--- Heiko.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Also ich habe die Serialberechnung von einem Cracker und habe den Keygen selber programmiert!

Was ist denn alles falsch an dem Keygen?
mfg

Thomas :-)
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

dass der Keygen falsch ist.

Es geht mir um den Algorithmus zum Erstellen des Keys an sich. Du benutzt im Endeffekt zum Erstellen des Schlüssels nur das erste Zeichen des Namens und die Länge des Namens. Der ganze Rest fällt unter den Tisch.

Das bedeutet, dass folgende zwei Personen den selben Schlüssel kriegen:

Heiko Wundram
Helmut Anders

usw.

Du kannst das beliebig weiterspinnen.

Man nennt das was Du tust eine sogenannte Einweg-Funktion, weil es einfach ist aus einem Namen einen Schlüssel zu erzeugen, aber umgekehrt nicht oder nur unter sehr schwierigen Umständen möglich ist. Nur hat diese Einwegfunktion den Nachteil, dass sie sehr schnell Duplikate liefert, weil eben wie oben angemerkt zwei Personen mit Namen gleicher Länge und gleichem Anfangsbuchstaben den selben Key kriegen. Das nennt man dann eine Kollision, und Diese Einweg-Funktion ist eben alles andere als Kollisions-Resistent (das Gegenteil davon).

Darum: wer sich diesen Algorithmus ausgedacht hat sollte mal überlegen was es mit Einweg-Funktionen auf sich hat, und vor allem warum sie eben eine größere Entropie in der Ausgabe haben (_müssen_ um sicher zu sein) als dieser Algorithmus, da der obige sehr, sehr einfach zu fälschen ist.

--- Heiko.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Naja aber dann hab ich ja bei dem Programmieren des Keygens nichts falsch gemacht, da ich mich ja an die Anleitung gehlaten habe, oder hab ich doch was falsch gemacht?

Naja ich verstehe was du meinst, aber er hat das Programm ja gecrackt und die Serialberechnung des Programms herausgefunden, d.h. das er auch keinen Fehler gemacht hat, da das Programm halt diese Serialberechnung benutzt.Verstehst du?

Er hat sich pratisch nicht irgendeine Serrialberechnung ausgedacht, sondern die Serialberechnung eines Programms herausgefunden.Dieses Programm benutzt genau diese Serialberechnung!
mfg

Thomas :-)
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Ich hab doch in meiner letzten Antwort schon gesagt dass Du nix falsch gemacht hast. Dieser Algorithmus zum erstellen einer Seriennummer ist nur absolut "braindead", und der Programmierer der sich sowas ausgedacht hat gehört standrechtlich erschossen für blödsinnige Intellectual-Property-Verwaltung. Also dafür dass er überhaupt so etwas implementiert hat, und des dann alles andere als richtig gemacht hat.

--- Heiko.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Standrechtlich Erschossen natürlich nur im übertragenen Sinn...

--- Heiko.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Noch ein Argument sich den Seriennummern-Blödsinn nicht anzutun und bei Freier Software zu bleiben.

Wobei wie Heiko schon bemerkt hat, der Algorithmus tatsächlich nur ein Spielzeug ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Aso jetzt verstehe ich! :oops: :oops: :oops:

Ich dachte ihr meint den Cracker, das der etwas falsch gemacht hat! :oops:
mfg

Thomas :-)
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Wobei der "Cracker" sich wohl auch nicht wirklich gedanken gemacht hat. Den Keygen kannst du auch in drei Zeilen schreiben:

Code: Alles auswählen

c = ord(name[0])
l = len(name)
print "Serial:", 666*c+14568*l, "-", 1791864*c, "-", 6613*c*l+14568
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

gut wenn man es so nimmt kann ich den code auch so nehmen.Das ist mein Code und nicht der von dem Cracker :wink: :wink:

Es sind abe wohl oder übel mehr als 3 zeilen, da raw_input noch reinmuss!
mfg

Thomas :-)
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Code: Alles auswählen

print "Serial: %s-%s-%s" % (lambda n: (666*ord(n[0])+14568*len(n),1791864*ord(n[0]),6613*ord(n[0])*len(n)+14568))(raw_input("Name? "))
Einzeilig geht's auch.

--- Heiko.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Ok THX für die Codes!
mfg

Thomas :-)
Antworten