AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wie kommen Buchstaben in eine Seriennummer?

Wie kommen Buchstaben in eine Seriennummer?

Ein Thema von TheMiller · begonnen am 17. Dez 2009 · letzter Beitrag vom 28. Dez 2009
Antwort Antwort
Seite 2 von 3     12 3   
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#11

Re: Wie kommen Buchstaben in eine Seriennummer?

  Alt 18. Dez 2009, 10:47
also wenn Buchstaben von A-Z, dann auf Unterscheidung 0(Zahl Null) und O(Buchstabe O) Rücksicht nehmen.
Ich würde hingehen und Kleinbuchstaben verwenden, so sieht man den Unterschied.
Oder was mir nochbesser gefällt: md5 hash Bzw z.B. bestimmte Teile daraus.
Du sagst zB das der Freischaltcode mit dem Namen verknüpft sein soll.
Den Namen muss man in der Software eingeben, z.B. Martin Weber
MD5-Hash von Martin Weber ist 481a6cc754f02475bc946bdfee3965f5
Daraus nimmst du jetzt z.B. die Stellen 1,3,7,9,12,17,21,24 und 29 => 41c50b6f6
Den Code muss man zusammen mit dem Namen im Programm eingeben um das Programm freizuschalten.

Ich weis, ist sehr schlicht und zusaätzlich zu dem Namen würd ich eventuell noch was anderes in den Hash reinmischen, aber für en kleines Programm reicht das allemal.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#12

Re: Wie kommen Buchstaben in eine Seriennummer?

  Alt 18. Dez 2009, 10:51
Das hört sich doch wunderbar an... Das ist auch eine sehr gute Idee. Da ich sowieso eine SN mit 5x5 Stellen haben möchte, kann ich ja einen Block komplett mit 5 fixen Stellen des MD5-Hashes füllen. Ich habe mehrere Informationen, die in den Hash einberechnet werden.

Sehr gute Idee, wenn man dies zusätzlich zu anderen Berechnungen benutzt.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.378 Beiträge
 
#13

Re: Wie kommen Buchstaben in eine Seriennummer?

  Alt 18. Dez 2009, 11:00
Und damit man im Quellcode nicht die numerischen Werte sieht, die zur Heranziehung der Teile aus dem Hash benutzt werden, würde ich einfach eine kleine Primzahlberechnung einbauen. So könntest du dir ein Array mit den Ergebnissen der Primzahlen füllen, bspw. "2,3,5,7,11,13,17,19,23". Die Werte in dem Array dienen dann als Index. Wenn du ganz gemein bist, tauscht du die einzelnen Positionen nochmal, damit man die Reihenfolge nicht an einem MD5-Hash festmachen kann.

Bspw.:
"2,3,5,7,11,13,17,19,23"
= Tausche um die Mitte =
"13,17,19,23,11,2,3,5,7"

usw...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#14

Re: Wie kommen Buchstaben in eine Seriennummer?

  Alt 18. Dez 2009, 11:04
Ehm, Prinzip verstanden, aber wie genau meinst du das mit der Primzahlenberechnung? (Ja, ich kenne Primzahlen )
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.378 Beiträge
 
#15

Re: Wie kommen Buchstaben in eine Seriennummer?

  Alt 18. Dez 2009, 11:37
Hm... Naja, angenommen du setzt den Vorschlag um, den der Engel gebracht hat. Dann sähe das in Delphi in etwa so aus:

key := md5str[1] + md5str[3] + md5str[7]; //usw... Ich weiß jetzt nicht, wie das im Disassembler aussähe, aber ich könnte mir vorstellen, dass man so relativ schnell erkennt, auf welche Elemente zugegriffen wird.

Daher war meine Idee, Primzahlen als Zugriff auf die einzelnen Elemente zu nutzen. Sagen wir, dein Key soll 6 Stellen haben, dann könnte eine Schleife so aussehen:

Delphi-Quellcode:
var
prime: integer;
idx,n: integer;

//[...]

key := '';
idx := 3;

for i := 0 to 5 do
begin
 repeat
  idx := idx + 2; //nur ungerade Zahlen
 until isPrimzahl(idx);
 key := key + md5str[idx];
end;
Die Funktion isPrimzahl prüft, ob eine Zahl eine Primzahl ist. Ist sie das, so wird sie als Index verwendet. Ist sie es nicht, wird die nächste ungerade Zahl getestet. Zum Test auf Primzahl fällt mir jetzt Miller-Rabin ein. Hier gibst was gut lesbares und lesenswertes dazu [PDF].

Und ich denke, für den Miller-Rabin-Test wird sich bestimmt eine Implementation in Pascal finden lassen.

Das Ziel ist eigentlich, dem Hacker oder RE die Arbeit möglichst aufwändig zu gestalten, indem man möglichst viele Berechnungen mit möglichst vielen Sprüngen (Bedingungen, Schleifen) einbaut. Die Script Kiddies werden so schnell aufgeben, da ihnen dass dann zu mühsam wird. Es soll aber auch exemplare geben, die durch sowas erst richtig aufblühen.

Ich hoffe, meine geistigen Ergüsse waren etwas verständlich.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#16

Re: Wie kommen Buchstaben in eine Seriennummer?

  Alt 24. Dez 2009, 15:08
@Daniel G:
Danke für die tolle Erklärung. Das muss ich mir aber nochmal genauer ansehen

@All:
Was ich bisher noch nicht verstanden habe ist folgende Sache: Oben hieß es, man solle Vergleiche vermeinden wie "if check(serial)=True then Starte_Programm;". Ist ja logisch, aber irgendwie muss ich doch prüfen, ob die SN gültig ist. Das kann ich ja in mehreren Prozeduren/Methoden machen, aber if-Vergleiche wie (if CheckBlock(1) = true) werde ich immer haben, oder?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#17

Re: Wie kommen Buchstaben in eine Seriennummer?

  Alt 24. Dez 2009, 15:19
Zitat von DJ-SPM:
@All:
Was ich bisher noch nicht verstanden habe ist folgende Sache: Oben hieß es, man solle Vergleiche vermeinden wie "if check(serial)=True then Starte_Programm;". Ist ja logisch, aber irgendwie muss ich doch prüfen, ob die SN gültig ist. Das kann ich ja in mehreren Prozeduren/Methoden machen, aber if-Vergleiche wie (if CheckBlock(1) = true) werde ich immer haben, oder?
Nein, du kannst den Code mit der Seriennummer (bzw. einem daraus errechneten Wert) verschlüsseln. Zusätzlich solltest du irgendwo noch eine Checksumme ablegen, damit nicht bei falsch eingegebener Nummer irgendein Quark ausgeführt wird.

Ich stelle mir das aber nicht ganz trivial vor...
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Wie kommen Buchstaben in eine Seriennummer?

  Alt 24. Dez 2009, 22:00
Es gibt nunmal ein par Tricks wie man das aushelben eines solchen Schutzes erschweren kann. Einer davon ist unter diesem Artikel zu finden.
Im übrigen habe ich mir sagen lassen, dass das packen der (gesamten) EXE mit gängigen Packern quasi gar kein Hindernis darstellt. Auf virustotal.com lassen z.B. die meisten schon identifizieren. Einen Unpacker zu finden ist dann eine Sache von einer google-Anfrage...
Jan
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.400 Beiträge
 
Delphi XE5 Professional
 
#19

Re: Wie kommen Buchstaben in eine Seriennummer?

  Alt 26. Dez 2009, 14:22
Viele Interessante Ansätze hier.

Die meisten Seriennummern mit Buchstaben sind einfach nur eine andere Darstellung für Binärdaten.
Dieses kannst du vergleichen mit einer Base64 oder UUencode Kodierung.

Die Kodierung erfolgt allerdings etwas mit Verstand. Die zur Verfügung stehenden Buchstaben und Zahlen sind so gewählt das Verwechselungen beim abschreiben, nicht vorkommen sollten.
So kommen z.B. meist nicht 1,l und I vor.

Wenn du 32 Zeichen zusammen bekommst, dann kannst du damit je Zeichen 5 Bit kodieren.

In den Binärdaten sind fortlaufende Nummern abgelegt plus Prüfsummen und/oder Signaturen.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/channel/UCUG...aXLclwO9qA-lzA
  Mit Zitat antworten Zitat
1carter1

Registriert seit: 22. Nov 2009
30 Beiträge
 
#20

Re: Wie kommen Buchstaben in eine Seriennummer?

  Alt 28. Dez 2009, 11:13
Zitat:
indem man möglichst viele Berechnungen mit möglichst vielen Sprüngen (Bedingungen, Schleifen)
nunja da müssten es wirklich sehr viele jumps geben, dass da wirklich jemand aufhört, der das ding knacken will.

Aber mal b2t

Ne weitere idee wäre evtl noch nen PhP Backend miteinzubauen, wie das genau aussehen soll, darüber habe ich mir jetzt nicht ernsthaft gedanken gemacht aber wenn man für dein Programm sowieso Internet braucht, wäre nen zusätzlicher Schutz durch nen WebBackend nicht das schlechteste, da ließen sich dann ja unbegrenzte schutzmöglichkeiten aufstellen (Programm nur durch login,Hardware ID abfrage usw)

mfg carTer
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf