Hmm, nun wird mir langsam klar, meine Antwort nicht so ganz zu Normens Anforderung pat:
Mein Vorschlag ist dafr gedacht, da man sicherstellt, da eine App nur auf bestimmten Macs luft. D.h, die App kann auch nicht ohne Erzeugung eines neuen Codes auf einem anderen Mac installiert werden. Das ist es gar nicht, was Normen will, oder?
Normen, lies mal meinen Artikel zum Absichern von Lizenzen, ich hoffe, Englisch ist kein Problem: http://www.tempel.org/UsingAquaticPrime
Noch mehr zu meinem obigen Kommentar:
Das “Verwurscheln” von Ser-Nr mit Mac-Kennung ist natrlich auch eine Kunst. Am Einfachsten macht man das so, vorausgesetzt, beide Werte liegen als Strings vor.
[code]const secretKey = “for” // Eine kurzer String, der nie verndert wird, aber bei jeder App anders sein sollte.
dim regCode as String = … // Hier die Ser-Nr laden, die z.B. (sichtbar) in den Prefs abgelegt ist.
dim hashedCode as String = … // Hier den erzeugten Hash-Code laden, der z.B. (sichtbar) in den Prefs abgelegt ist.
dim macID as MemoryBlock = CertTools.DeviceGUID // may be nil, e.g. on Hackintosh PCs!
dim gewurschtel as MemoryBlock = macID + secretKey + regCode
dim currHash as new MemoryBlock(20) ’ SHA_DIGEST_LENGTH
declare sub SHA1 lib “/usr/lib/libcrypto.dylib” (d as Ptr, n as Int32, md as Ptr)
SHA1 (gewurschtel, gewurschtel.Size, currHash)
if StrComp (currHash, hashedCode, 0) = 0 then
// pat!
else
// ungltig
end if[/code]
Der Code oben ist fr das Prfen, ob die Ser-Nr zu dem Mac passt.
Das “Verwurschteln” passiert durch das Berechnen eines Hash-Codes aus der Ser-Nr und der Mac-Kennung. Der Trick ist, da der User, der (hchstwahrscheinlich) nicht den Code des Programms analysieren kann und somit nicht wei, wie er beim Kopieren des Programms auf einen anderen Mac beide Werte (Ser-Nr und Hash-Code) korrekt setzen muss, damit die Kopie auch luft. D.h, hier wird mit der SHA1-Funktion eine simple Verschlsselung von Daten vorgenommen, und nur du als Programmierer weit, wie die Verschlsselung funktioniert (damit die nicht blind erraten werden kann, fgt man einen secretKey hinzu, wie oben zu sehen).
Wenn man nun dem Kunden die App verkauft, lt man ihn erst ein kl. Programm starten, das die Mac-ID ausliest. Die wird dann an den Hersteller (hier: Normen) bermittelt und der erzeugt dann den Hash-Code aus der Ser-Nr, dem secretKey und der macID, und teilt den Hash-Code dem User mit. Den mu das Programm dann speichern, zusammen mit der Ser-Nr, so da beim Start der App beide wieder gelesen und mit obigem code berprft werden knnen.
Ist das Verstndlich, Normen?
Allerdings willst du es evtl. gar nicht so aufwndig machen. Kommt auf den Preis der App an - wenn sie 1000ekostet und du nur ein paar Kunden hast, dann kannst du das so machen, weil du die Kunden dann auch direkt betreuen kannst. Bei einer billigen App, die 1000fach verkauft wird, mut du das automatisieren, mit einem Server. Das wird aufwndig. Bedenke auch, da Kunden oft genug auf einen neuen Mac wechseln wollen. Wenn dann deine Hashcode-Generierung nicht mehr zur Verfgung steht, sind die Kunden sauer (aber dann bist du eh aus dem Geschft raus, vermutlich).