Seite 1 von 2

Keygen in Pyhton

Verfasst: Montag 9. Januar 2006, 22:03
von Python 47
Hi Leuts,

hab mal ne frage:

Ist es möglich Keygens in Python zu programmieren??

Wie bekommt man das in ungefähr hin wenn man den Serial-Algorythmus hat??

Ich möchte keine genaue Anleitung haben, weil das illegal wäre

Ich möchte nur das ihr mir sagt ob man Keygens mit Python erstellen kann und wie es in etwa geht einen Algorythmus darzustellen!

Ist wirklich wichig!

Vielen Danke!

Re: Keygen in Pyhton

Verfasst: Montag 9. Januar 2006, 23:51
von BlackJack
Python Master 47 hat geschrieben:Ist es möglich Keygens in Python zu programmieren??
Ja klar. Das ist in so ziemlich jeder Programmiersprache möglich, die mit Zahlen und Zeichen umgehen kann.
Wie bekommt man das in ungefähr hin wenn man den Serial-Algorythmus hat??
Man setzt ihn in Python um!?
Ich möchte keine genaue Anleitung haben, weil das illegal wäre

Ich möchte nur das ihr mir sagt ob man Keygens mit Python erstellen kann und wie es in etwa geht einen Algorythmus darzustellen!
Na man setzt ihn halt einfach um. So ein Algorithmus ist eine Beschreibung einer Vorgehensweise. Bei Serials geht es wahrscheinlich darum, wie man aus einer Eingabezeichenkette, z.B. einen Namen, eine Zeichenkette erstellt, die den passenden Schlüssel dazu darstellt. Dazu wird man meistens die Eingabe als Byte-Werte also Zahlen irgendwie "mathematisch bearbeiten" und daraus am Ende wieder Zeichen gewinnen. Mit Zeichen und Zahlen kommt Python ganz gut zurecht.

Verfasst: Dienstag 10. Januar 2006, 09:27
von mr.hide
Wenn man den Algorithmus hat, hat man ja eh schon das Kochbuch zum Programmieren.

Dann musst du nur Schritt für Schritt machen was da steht...

Offtopic:
In Englisch ist die Signatur einfach besser ... Mess with the best, die like the rest
:wink:

Verfasst: Dienstag 10. Januar 2006, 14:21
von Python 47
Ok danke,

für die Antwort, ich werd mal ausprobieren, wenn ich net weiterkomm, frag ich nochmal!

Ich werde die Signatur umbennen :wink:

Verfasst: Dienstag 10. Januar 2006, 20:19
von Python 47
ja so hab jetzt die serialberechnung des Programmes, aber wie wandle ich hexadezimalzahlen in dezimalzahlen um und wie addiere/subtrahiere/multipliziere/dividiere ich hexadezimalzahlen???

Danke!

Verfasst: Dienstag 10. Januar 2006, 20:40
von Leonidas
Python Master 47 hat geschrieben:wie wandle ich hexadezimalzahlen in dezimalzahlen um und wie addiere/subtrahiere/multipliziere/dividiere ich hexadezimalzahlen???
Na, zum Beispiel so:

Code: Alles auswählen

In [5]: 0xFF
Out[5]: 255

In [6]: hex(255)
Out[6]: '0xff'

In [7]: 0xFF + 0x01
Out[7]: 256

In [8]: hex(0xFF + 0x01)
Out[8]: '0x100'

Verfasst: Dienstag 10. Januar 2006, 21:46
von Python 47
Also ich hab das noch nicht so ganz gecheckt :oops:

Das einzige was ich verstehe ist eine Hex-Zahl in eine Dezimalzahl zu wandeln

Was bedeutet das In und Out?
Wie wandle ich eine Hex-Zahl in eine Dezimalzahl um???
Wie addiere/subtrahiere/multipliziere/dividiere ich Hex-Zahlen??
Das mit 0*FF+0*4d klappt net!

Verfasst: Dienstag 10. Januar 2006, 21:58
von jens
In und Out zeigt dir nur ein Ein- und Ausgaben an ;)

Code: Alles auswählen

h = hex(255)
print h
d = float(h)
print d
d = int(h)
Ausgaben:
0xff
255.0
Traceback (most recent call last):
File "test.py", line 6, in ?
d = int(h)
ValueError: invalid literal for int(): 0xff
Warum geht denn kein int() ???

Verfasst: Dienstag 10. Januar 2006, 22:09
von Gast
Folgendes,was du geschrieben hast geht net:

Code: Alles auswählen

h=hex(255)
d=float(h)
Ansonsten Danke!

Verfasst: Mittwoch 11. Januar 2006, 18:17
von Leonidas
jens hat geschrieben:Warum geht denn kein int() ???
Warum willst du einen Int zu einem Int konvertieren?

Code: Alles auswählen

In [9]: type(0xFF)
Out[9]: <type 'int'>
In [10]: isinstance(0xFF, int)
Out[10]: True

Verfasst: Donnerstag 12. Januar 2006, 22:10
von Python 47
Also:

Ich habe jetzt die Serialberechnung, von einem Programm. Das Programm werde ich nicht sagen, weil wenn niemand das Programm kennt, dann kann er das Programm nicht cracken, da ihm die Serialberechnung alleine völlig wertlos ist. Die Serialberechnung muss ich euch senden, damit ihr mir helfen könnt!

Die Serialeingabe umfasst Namen+Serialnummer.

Serialberechnung:
1. Buchstaben zwischen a und z in Großbuchstaben umwandeln
2. alle Zeichen addieren
3. berechneten Wert von 1D4C0(h) abziehen
4. und in eine Dezimalzahl umwandeln

1.Könnte so aussehen:

Code: Alles auswählen

Name=raw_input('Name:')
Name.upper()
3.Könnte so aussehen:

Code: Alles auswählen

Endergebniss=0x1D4C0-hex(Ergebniss)
4.Könnte so aussehen:

Code: Alles auswählen

float(Endergebniss)
print 'Serial', Endergebniss
Jetzt zu meinem Problem:

zu 2.Wie bekomm ich es hin, jeden einzelnen Buschstaben von Name auszuwählen und ihm dann einen Hexwert zuzuordnen und dann in einer Variablen(Ich habe Ergebniss gewählt) zu speichern?

Und ich weiß ja nicht welchen String die Variable Name annimmt, da es dem Benutzer des Keygens ja selber überlassen ist, welchen Namen er eingibt!Also müsste ich etwas haben, das jedem Buchstaben von A-Z den entsprechenden Hex-Wert zuordnet und dann die Hexwerte für die Eingabe herausfischt und alle Hexwerte der Eingabe addiert und in eine Variable speichert.

Wie stelle ich das an??

Vielen Dank für eure Hilfe!

Verfasst: Donnerstag 12. Januar 2006, 23:50
von BlackJack
Python Master 47 hat geschrieben:Die Serialeingabe umfasst Namen+Serialnummer.

Serialberechnung:
1. Buchstaben zwischen a und z in Großbuchstaben umwandeln
2. alle Zeichen addieren
3. berechneten Wert von 1D4C0(h) abziehen
4. und in eine Dezimalzahl umwandeln
4. Ist überflüssig. Man rechnet mit ganzen Zahlen. So eine ganze Zahl kann man als Dezimalzahl, Hexadezimalzahl, Binärzahl oder in noch anderen Basen anzeigen lassen. Ein Satz wie 'Hexzahlen addieren und das Ergebnis in Dezimal umwandeln' macht keinen Sinn weil alles nur verschiedene Darstellungen von ganzen Zahlen sind.
3.Könnte so aussehen:

Code: Alles auswählen

Endergebniss=0x1D4C0-hex(Ergebniss)
Das geht nicht. ``0x1D4C0`` ist eine ganze Zahl und `hex()` ergibt eine Zeichenkette. Du kannst von einer Zahl keine Zeichenkette abziehen. Lass einfach das `hex()` weg.
4.Könnte so aussehen:

Code: Alles auswählen

float(Endergebniss)
print 'Serial', Endergebniss
`float()`!? Ich habe noch nie irgendwo eine Fliesskommazahl als Seriennummer eingeben müssen. Du meinst wohl eher `int()`. Was aber überflüssig ist, weil in Schritt 3 schon eine ganze Zahl als Ergebnis herauskommt.
Jetzt zu meinem Problem:

zu 2.Wie bekomm ich es hin, jeden einzelnen Buschstaben von Name auszuwählen und ihm dann einen Hexwert zuzuordnen und dann in einer Variablen(Ich habe Ergebniss gewählt) zu speichern?

Und ich weiß ja nicht welchen String die Variable Name annimmt, da es dem Benutzer des Keygens ja selber überlassen ist, welchen Namen er eingibt!Also müsste ich etwas haben, das jedem Buchstaben von A-Z den entsprechenden Hex-Wert zuordnet und dann die Hexwerte für die Eingabe herausfischt und alle Hexwerte der Eingabe addiert und in eine Variable speichert.
Wie gesagt: Du addierst keine Hexwerte sondern Zahlen. Und den ASCII- bzw. Bytewert für ein Zeichen bekommst Du mit `ord()`.

Ungetestet:

Code: Alles auswählen

schluessel = 0x1D4C0 - sum(map(ord, eingabe.upper()))

Verfasst: Freitag 13. Januar 2006, 00:01
von Gast
Ja ich meinte int und nicht float.

Danke!Ich werde es mal ausprobieren!

Verfasst: Freitag 13. Januar 2006, 15:32
von Python 47
So ich bins nochmal!

Dein Code hat einwandfrei funktioniert! Big THX!

Jetzt brauche noch einen Befehl für einen neuen Keygen!

Wenn die Eingabe des Namen Programm ist, wie stelle ich es an, einen bestimmten Buchstaben aus, dem Namen der Eingabe herrauszufischen und dann den Wert dieses Buchstaben mit einem gewissen wert zu multiplizieren?

Also ein Teil der Serialberechnung ist:

ErsterWert = (erstes Zeichen aus Name) * 29A(Hex-Wert

Code: Alles auswählen

Name=raw_input('Name:`)
Jetzt tippe ich als Namen Programm ein.Wie wähle ich jetzt P von Programm aus und multipliziere den ASCII Wert von P(P=erstes Zeichen aus Name) mit 666?

Danke!

Verfasst: Freitag 13. Januar 2006, 15:33
von jens
dict anlegen und über die eingabe interieren...

Verfasst: Freitag 13. Januar 2006, 15:46
von Leonidas
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]

Verfasst: Freitag 13. Januar 2006, 17:09
von Python 47
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

Verfasst: Freitag 13. Januar 2006, 17:30
von Leonidas
Und wenn du noch die Variablen klein schreibst und ein paar Leerzeichen zwischen den Operatoren einfügst wird es sicherlich lesbarer.

Re: Keygen in Pyhton

Verfasst: Freitag 13. Januar 2006, 17:34
von ProgChild
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.

Verfasst: Freitag 13. Januar 2006, 18:07
von Python 47
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!!