2010-12-03 18 views
5

Ist es möglich, einen Dienst bereitzustellen, bei dem jedem Gerät eine kostenlose Testversion zur Verfügung gestellt wird, ohne dass eine Einzelperson in der Lage ist, mehrere kostenlose Testversionen auf einem einzelnen Gerät zu erhalten. Wenn es unmöglich ist, kennen Sie einen Weg, um mehrere kostenlose Studien zu erschweren.Ist es möglich, eine einzige Testversion pro Gerät zu haben?

+0

Vorsicht, die Android-ID ist anscheinend nicht eindeutig - angeblich gibt es eine Modell/Firmware-Version, wo alle Geräte die gleiche ID haben. –

+0

Ich mache das :) Auch Windows Mobile. Beachten Sie, dass die eindeutige Geräte-ID bei Android sehr schwer zu bekommen ist. –

+0

Die Geräte-ID, die Sie über Settings.Secure erhalten haben, kann sich beim Zurücksetzen des Geräts auf die Werkseinstellungen ändern. Die Geräte-ID, die über den Telefonie- Manager abgerufen wird, ist möglicherweise nicht vorhanden (wenn das Gerät z. B. kein Telefon ist). –

Antwort

11

Sie können den Lizenzschlüssel basierend auf der eindeutigen ID des Geräts, dem Anforderungsdatum und Ihrem eigenen privaten Schlüssel generieren, um eine Lizenz zu erstellen, die nur bis zu einem bestimmten Datum gültig ist.

Ihre Anwendung überprüft, ob der Lizenzschlüssel gültig ist, indem Sie den Lizenzschlüssel mit Ihrem öffentlichen Schlüssel dekodieren und sein Ablaufdatum und die Geräte-ID vergleichen. Personen können keine gefälschte Anforderung fälschen, da der Lizenzschlüssel nur für das vorgeschriebene Datum und eine bestimmte Geräte-ID gültig ist.

(Tipp: Lesen Sie über Public-Key-Kryptographie)

Allerdings ist es nicht völlig narrensicher. Ein wirklich entschlossener Angreifer kann sein Gerät rooten und eine benutzerdefinierte Firmware installieren, die es ihm ermöglicht, die von "getDeviceId()" zurückgegebene Kennung zu kontrollieren. Dies ist nicht etwas, was die meisten Menschen tun würden, die meisten Menschen würden lieber eine alternative kostenlose App finden oder einfach die App kaufen, anstatt diese Route zu gehen. Gegen Cracker mit dieser Entschlossenheit und Fähigkeiten kann man nicht viel tun. Der alternative Angriffsweg wäre, den öffentlichen Schlüssel, den Sie mit der Anwendung geliefert haben, durch die private/öffentliche Schlüsselkombination des Angreifers zu ersetzen, und er kann möglicherweise einen Schlüsselgenerator schreiben, der den Lizenzschlüssel für die gefälschte Anwendung generieren kann. Sie können diesen Angriff durch Selbstüberprüfung Ihrer eigenen ausführbaren Datei erschweren.

Jedoch ist kein Sicherheitsschema idiotensicher, Java/Android-Anwendung kann rückentwickelt werden und ein entschlossener Hacker kann Ihre Anwendung schmieden und ihre Lizenzprüfungen deaktivieren. Die einzige Möglichkeit, die nicht autorisierte Verwendung einer Anwendung zu verhindern, besteht darin, die Anwendung überhaupt nicht zu verteilen.

3

Sicher, aber Sie müssen eingerichtet werden, um Gerätekennungen auf Ihrem eigenen Server zu speichern. Auf einem iPhone, können Sie die UDID mit

UIDevice *device = [UIDevice currentDevice]; 
NSString *uniqueIdentifier = [device uniqueIdentifier]; 

erhalten Sie können eine Datenbank Anruf und acompare uniqueIdentifier auf Ihre gespeicherten Liste, um sicherzustellen, dass nur ein Versuch pro Gerät aktiviert werden kann.

In Android, getDeviceID() gibt Ihnen eine eindeutige Gerätekennung. Überprüfen Sie the documentation für weitere Informationen dazu.

+0

+1, aber ist das wirklich sicher? Am Ende des Tages muss ich eine Anfrage an meinen Server senden und was hält einen Angreifer davon ab, eine Anfrage zu fälschen? – rook

+0

wahr; Aber ich glaube nicht, dass es einen anderen Weg gibt, da Sie die Verbreitung von Apps nicht kontrollieren können (aufgrund des App Stores und des Marketplace). Dies macht es definitiv schwierig, aber nicht unmöglich. –

+0

@Rook: Sie können die Anfrage mit einem geheimen Schlüssel hashen und auf Ihrem Server verifizieren. – donkim

1

Wenn ich etwas nicht vermisse, wäre meine Lösung einfach. Ich werde den Service von der App ablaufen lassen, nicht die App selbst. Dies kann mithilfe eines Token-Mechanismus wie oAuth geschehen. (mit einem abgelaufenen Token mit einer beträchtlichen Lebensdauer, in diesem Fall Ihre Probezeit). Während des Client-Registrierungsprozesses werde ich das Anfrage-Token als Funktion der Android-Geräte-ID und der angeforderten Zeit erstellen. Checkout oAuth, es könnte ein Aufwand sein, aber fast alle großen Dienstleister nutzen es.

4

Ich kann mir vorstellen, dass Sie 99% der Wirkung eines komplexeren Schemas mit einem hirntot-einfachen erhalten können: Speichern Sie einfach irgendwo auf dem Gerät eine Datei, die anzeigt, dass die Testversion abgelaufen ist. Zugegeben, technisch versierte Benutzer könnten die Datei finden und entfernen, aber die große Mehrheit wird sich nicht darum kümmern - das Gerät ist eine unergründliche Zauberei für sie, die Einmischung in die internen Dateien könnte den winzigen Gnomen missfallen, die wütend hinter dem Haus pöbeln Bildschirm.

Sie können die Aufgabe schwieriger machen, indem Sie die Sperrdatei verstecken und den Namen und den Ort anhand der Geräte-ID ändern - so ist es für jemanden viel schwieriger, Anweisungen zu geben, wie Sie Ihr Testschema umgehen können. Wie die anderen Antworten angemerkt haben: Kein System ist narrensicher, es gibt immer jemanden da draußen, der klüger ist als du und der es genießen wird, dein Schema zu knacken. Der Trick ist, deine Zeit nicht damit zu verschwenden, diesem Kerl ein mentales Training zu geben und stattdessen für die Mehrheit zu sorgen.

1

Wie wäre es mit dem Speichern der MAC-Adresse des WLAN-Adapters? Möglicherweise werden Sie auf Ihrem Server und Ihrer App den Server abfragen, wenn dieser MAC bereits registriert ist.

MIT BENUTZERERKLÄRUNG, bei der ersten Ausführung der App, den Server abfragen, ob die MAC-Adresse des aktuellen Geräts bereits registriert ist? Wenn nicht, speichern Sie die MAC-Adresse auf Ihrem Server. Wenn Sie bereits registriert sind, bitten Sie den Benutzer, die App zu kaufen, um sie weiterhin verwenden zu können.

Diese Methode kann durch einige kryptografische Algorithmen ergänzt werden, wie von Lie Ryan vorgeschlagen, um zusätzliche Sicherheit und Sperren und/oder Testzeitraum zu bieten.

Ich weiß nicht viel über iPhone, aber ich glaube, dass jedes iPhone WLAN-Adapter hat und jeder WLAN-Adapter hat einzigartige MAC-Adresse. Überprüfen Sie auch die rechtliche Seite dieser Lösung, da das Speichern des MAC Datenschutzprobleme/Bedenken verursachen kann. Überprüfen Sie daher vor der Verwendung die geltenden Gesetze.

Verwandte Themen