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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 13. Januar 2006, 15:46

Python Master 47 hat geschrieben:Wie wähle ich jetzt P von Programm aus und multipliziere den ASCII Wert von P(P=erstes Zeichen aus Name) mit 666?
Wie wärs damit?

Code: Alles auswählen

name = 'Programm'
multiplied = [ord(ch) * 666 for ch in name]
und den ersten Buchstaben von name bekommst du mit

Code: Alles auswählen

name[0]
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Freitag 13. Januar 2006, 17:09

Also:

1.Danke für eure Hilfreichen Antworten
2.Meine Frage in meinem letzten Beitrag hätte ich, wenn ich ein bischen mehr überlegt hätte, mir auch selber beantworten können.Aber ich hab nicht richtig nachgedacht und da ist mir nix eingefallen
3.Den Rest habe ich allein ohne Probleme hinbekommen. Ich zeigs euch mal zur Info:

Serialeingabe besteht wieder aus Name+Serialnummer
Serialberechnung:

1. ErsterWert = (erstes Zeichen aus Name) * 29Ah
2. ErsterWert = ErsterWert + ((Länge des Namens) * 38E8h)
3. ZweiterWert = (erstes Zeichen aus Name) * 38E8h
4. ZweiterWert = ZweiterWert * 7Bh
5. DritterWert = (Länge des Namens) * (erstes Zeichen aus Name)
6. DritterWert = DritterWert * 19D5h
7. DritterWert = DritterWert + 38E8h
8. Alle drei Werte durch ein "-" getrennt aneinanderhängen.

und hier mein Keygen:

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)
ihr fragt euch sicher warum anstatt dem hier:

Code: Alles auswählen

Serial1=Serial1[0]+(len(Name)*14568)
das hier dasteht

Code: Alles auswählen

Serial2=Serial1[0]+(len(Name)*14568)
Nun ja ich musste ja wieder auf Den ersten wert von Serial1 zugreifen, aber da Serial1 schon wieder in der neuen Serial1 Variable gespeichert wurde, konnte ich es nicht mehr aufrufen. Einfach 5 mal durchlesen dann versteht ihr es :lol: :lol: :lol:

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
b)um den 1.Buchstaben von Name zu erhalten.

Auch hier wiede 5 mal durchlesen um es zu verstehen :lol: :lol: :lol:

Sicher hätte ich die beiden Sachen auch anders lösen können, aber das waren die beiden leichtesten und kürzesten Lösungen. Und ehrlich gesagt, wem interessiert bei einem Keygen der Quelltext!

Wenn Ihr aber Verbesserungsvorschläge oder Meinungen dazu zusagen habt, dann postet Sie einfach!

Noch einmal Big THX
mfg

Thomas :-)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 13. Januar 2006, 17:30

Und wenn du noch die Variablen klein schreibst und ein paar Leerzeichen zwischen den Operatoren einfügst wird es sicherlich lesbarer.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Freitag 13. Januar 2006, 17:34

Python Master 47 hat geschrieben:Ich möchte keine genaue Anleitung haben, weil das illegal wäre
Noch ist es _nicht_ illegal. Das kann sich aber dank EU bald ändern.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Freitag 13. Januar 2006, 18:07

aha naja ich crack programme nicht um den Firmen zu schaden, sondern weil es spaßt macht, und auch sehr viel mit Intelligenz zu tun hat, serials zu berechnen, und auserdem, steigere ich mit der Programmierung von Keygens auch noch meine Programmierkenntnisse, jedenfalls ein bischen!!
mfg

Thomas :-)
BlackJack

Freitag 13. Januar 2006, 23:27

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

Samstag 14. Januar 2006, 02:03

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

Samstag 14. Januar 2006, 22:59

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

Sonntag 15. Januar 2006, 03:50

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:

Sonntag 15. Januar 2006, 20:31

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

Sonntag 15. Januar 2006, 20:54

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:

Sonntag 15. Januar 2006, 21:17

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

Sonntag 15. Januar 2006, 22:20

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:

Montag 16. Januar 2006, 11:37

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:

Montag 16. Januar 2006, 11:37

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

--- Heiko.
Antworten