Feststellen, ob ein iPhone programmgesteuert defekt ist

79

Wie bestimmen Sie (programmgesteuert), ob ein iPhone / iPod ist:

  1. Gefängnis kaputt
  2. Ausführen einer geknackten Kopie Ihrer Software

Pinch Media kann erkennen, ob ein Telefon im Gefängnis defekt ist oder die laufende Software geknackt ist. Weiß jemand, wie sie dies tun? Gibt es Bibliotheken?

Richard Stelling
quelle
1
Apple weiß, wie man das feststellt: p
JoshJordan
2
Wenn Sie an dieser Frage interessiert sind, warum unterstützen Sie nicht den Vorschlag von Area 51 für eine Website zum Stack Exchange im Gefängnis
Richard Stelling,

Antworten:

39

Hier ist eine der Möglichkeiten, um festzustellen, ob Ihre App geknackt wurde.

Kurz gesagt: Das Knacken erfordert normalerweise das Ändern der Info.plist. Da es sich um eine reguläre Datei handelt, auf die Sie Zugriff haben, ist es ziemlich einfach, solche Änderungen festzustellen.

zakovyrya
quelle
1
Leider gibt es eine Problemumgehung, die diesen Erkennungsmechanismus unterbricht. Sobald die App installiert ist, ist der SignerIdentity-Schlüssel nicht mehr erforderlich, sodass der Cracker einfach in sein Telefon mit Jailbreak ssh und die Liste bearbeiten kann, um sie zu entfernen.
Lily Ballard
@ KevinBallard Haben Sie eine Empfehlung für die Erkennung häufiger Jailbreaks im Jahr 2017?
Cœur
@ Cœur Nein, ich habe mich seit dem Schreiben dieses Kommentars nicht mehr damit befasst.
Lily Ballard
25

Das Erkennen eines Telefons mit Jailbreak ist so einfach wie das Überprüfen des Vorhandenseins eines /private/var/lib/apt/Ordners. Obwohl dies keine Nur-Installer-Benutzer erkennt, haben die meisten inzwischen Cydia, Icy oder RockYourPhone installiert (alle verwenden apt).

Um Raubkopien zu erkennen, überprüfen Sie am einfachsten, ob SignerIdentityin Ihrer App ein Schlüssel vorhanden ist Info.plist. Da fortgeschrittene Cracker die Standardprüfungen leicht finden [[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"]können, ist es am besten, diese Aufrufe mithilfe der Objective C-Laufzeit zu verschleiern, die über #import <objc/runtime.h>oder über alternative Äquivalente verfügbar ist .

rpetrich
quelle
10

Um die Antwort von zakovyrya zu erweitern, können Sie den folgenden Code verwenden:

if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) {
  // Jailbroken
}

JEDOCH kann die Person, die Ihre App jailbreakt, Ihr Programm verhexen und als solche die Zeichenfolge @ "SignerIdentity" bearbeiten, um @ "siNGeridentity" oder etwas anderes zu lesen, das null zurückgibt und somit bestanden wird.

Wenn Sie dies verwenden (oder einen der anderen Vorschläge von http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html ):

  • Erwarten Sie nicht, dass es für immer funktioniert
  • Verwenden Sie diese Informationen nicht, um Ihre App in irgendeiner Weise zu beschädigen oder zu behindern (andernfalls haben sie Grund, sie zu verhexen, sodass Ihre App nicht weiß, dass sie einen Jailbreak aufweist).
  • Wahrscheinlich ist es ratsam, diesen Teil des Codes zu verschleiern. Sie können beispielsweise die Base64-codierte umgekehrte Zeichenfolge in Ihren Code einfügen und sie dann in der App dekodieren, indem Sie den Vorgang umkehren.
  • Validieren Sie Ihre Validierung später in Ihrem Code (z. B. als ich SignerIdentity sagte, stand dort tatsächlich SignerIdentity oder siNGeridentity?)
  • Sagen Sie den Leuten auf einer öffentlichen Website wie stackoverflow nicht, wie Sie es tun
  • Denken Sie daran, es ist nur eine Anleitung und nicht narrensicher (noch knackersicher!) - mit großer Kraft geht große Verantwortung einher.
Benjie
quelle
Dies überprüft also die SignerIdentity in Ihrem App-Bundle, aber was ist mit dem Fall, dass die App nicht gehackt wird oder irgendetwas anderes als das Gerät JailBroken ist? Wie würden Sie das erkennen?
Edward Ashak
Stellen Sie es als eine Frage auf SO und jemand wird antworten :)
Benjie
5

Um die obigen Kommentare von Yonel und Benjie zu erweitern:

1) Die Methode von Landon Fuller, die sich auf die oben von yonel verknüpfte Verschlüsselungsprüfung stützt, scheint die einzige zu sein, die noch nicht von automatisierten Cracking-Tools besiegt wurde. Ich würde mir keine allzu großen Sorgen machen, dass Apple den Status des LC_ENCRYPTION_INFO-Headers bald ändern könnte. Es scheint einige unvorhersehbare Auswirkungen auf iphone mit Jailbreak zu haben (selbst wenn der Benutzer eine Kopie gekauft hat ...)

Auf jeden Fall würde ich keine vorschnellen Maßnahmen gegen einen Benutzer ergreifen, der auf diesem Code basiert ...

2) Zur Ergänzung von Benjies Kommentar zu. Verschleierung (eine absolute Notwendigkeit, wenn Sie mit Zeichenfolgenwerten in Ihrem Anti-Piraterie-Code arbeiten): Eine ähnliche, aber vielleicht noch einfachere Möglichkeit besteht darin, immer eine gesalzene Hash- Version des gesuchten Werts zu überprüfen . Zum Beispiel (obwohl diese Prüfung nicht mehr effizient ist) würden Sie den Schlüsselnamen jedes MainBundle als md5 (Schlüsselname + "etwas geheimes Salz") gegen die entsprechende Konstante prüfen ... Ziemlich einfach, aber sicher jeden Versuch, die zu finden, zu vereiteln Zeichenfolge.

Dies setzt natürlich voraus, dass Sie den zu vergleichenden Wert indirekt abfragen können (z. B. indem Sie ein Array durchlaufen, das ihn enthält). Dies ist jedoch meistens der Fall.


quelle
Ist die Landon Fuller-Methode mit iOS 7 heute noch funktionsfähig?
Basil Bourque