This page has been robot translated, sorry for typos if any. Original content here.

Der iMessage-Bug mit arabischem Text erlaubt Ihnen, jedes iPhone remote neu zu starten [FIX]

IOS entdeckte einen äußerst unangenehmen Fehler. iPhone, das mit einer Nachricht mit einem bestimmten Satz von Zeichen kam, reboots, und die Anwendung "Messages" beginnt zu fallen.

DISCLAIMER1: Versuchen Sie nicht, dies mit den Handys und Handys Ihrer Kollegen zu wiederholen! Nach den Kommentaren zu urteilen, haben viele Leute ihre Telefone bereits infiziert und 100% der Medikamente sind noch nicht verfügbar!

DISCLAIMER2: Versuchen Sie nicht einmal, es zu nennen Wi-Fi-Punkt!

DISCLAIMER3: Funktioniert auch durch alle sozialen Netzwerke oder Boten!

Sende niemandem zum iPhone !!!!

"Klicken Sie hier, um den Spoiler zu zeigen - klicken Sie erneut, um sich zu verstecken ..."

Öffne den Message-Bug in einem separaten Fenster (nicht mit dem iPhone öffnen!).

FIX

Es gibt ein paar einfache Möglichkeiten, um den Fehler zu beheben:

  • öffnen Sie die Nachrichten auf der letzten Konversation und senden Sie die Antwort an den Joker;
  • Wenn du bereits im Dialoglistenmodus Nachrichten aufgetrieben hast, bitte den Freund bitten, dir irgendeine andere Nachricht zu schicken.
  • Sende dir eine Nachricht mit Siri;
  • Erstellen Sie eine Notiz und senden Sie sie als Nachricht an Ihre Telefonnummer mit der Schaltfläche Freigeben.

Auch auf Reddit wurde eine Medizin beschrieben - Sie müssen sms von irgendwelchen Inhalten an die angegriffene Zahl senden, und die Störung verschwindet. Ich werde erklären - nach dem Neustart des angegriffenen Telefons funktioniert alles gut, bis das Opfer sms lesen will, d.h. Laden Sie die eingebaute Nachrichten App herunter. Nach dem Erhalt einer neuen SMS vom Absender des "Virus", wird die letzte Nachricht eine neue SMS und Nachrichten, logisch, wird aufhören zu fallen.

WORKING FIX von shram.kiev.ua

Bitten Sie Siri, die letzte ungeöffnete Nachricht zu lesen ("Siri las letzte ungelesene Nachricht" oder "Siri las meine letzte Nachricht"), dann erstellen Sie eine Notiz und senden Sie sie selbst an iMessage.

Ein Workaround von Apple

Am Donnerstagabend, in einem neuen Unterstützungsdokument, erkennt Apple diesen Bug, der vor zwei Tagen entdeckt wurde, und bietet eine einfache Lösung, um dieses Problem vorübergehend umzugehen, indem es ankündigt, dass das Update über Software-Updates in der nahen Zukunft verfügbar sein wird.

Der sogenannte Unicode-Todescode, auch bekannt als "Effektive Power", liegt in der Tatsache, dass das System versucht, Unicode-Zeichen zu entschlüsseln, was zu einer Überlastung des Gerätspeichers führt und zum Neustart führt. Viele Benutzer berichten, dass sie die iMessage-Anwendung nach dem Erhalt dieses arabischen Textes nicht öffnen können.

Apple hat zuvor Aussagen an die Medien weitergeleitet, diesen Bug bestätigt, aber in der Nacht von Donnerstag veröffentlichte das Unternehmen ein offizielles Dokument über die Anerkennung des Bugs und die Platzierung einer temporären Lösung dafür.

Apple ist sich eines iMessage-Problems bewusst, das durch eine bestimmte Reihe von Unicode-Zeichen verursacht wird. Bis das Update verfügbar ist, können Sie diese Schritte verwenden, um die Nachrichten App erneut zu öffnen.

Schritt 1: Halten Sie die Home-Taste gedrückt, um Siri aufzurufen. Nach der Aktivierung, frage Siri ", um ungelesene Nachrichten zu lesen."

Schritt 2: Siri Art von lesen Sie die Nachricht (es ist unmöglich, tatsächlich sprechen es in ordnungsgemäß Englisch), und dann wird es fragen, ob Sie auf die Nachricht zu antworten möchten. Sag ja

Schritt 3: Sagen Sie etwas. Der eigentliche Inhalt der Antwort spielt keine Rolle. Das Wichtigste ist, eine Nachricht zu senden.

Schritt 4: Nachdem die Antwort gesendet wurde, solltest du die Messaging-Anwendung öffnen können. Von dort aus, um die gesamte Konversation mit einer Zeichenfolge zu löschen, oder drücken Sie eine schädliche Nachricht, und klicken Sie auf Erweitert, und löschen Sie dann die Nachricht aus der Konversation.

Dies ist nicht der erste Umweg, den wir in dieser Ausgabe gesehen haben. Wir haben gestern ein paar Optionen veröffentlicht. Menschen mit gehackten Geräten haben auch die Möglichkeit, Drittanbieter-Tricks zu installieren, die verhindern, dass das Problem in erster Linie passiert.

Ähnlich wie die berichtende Gesellschaft, die Anfang dieser Woche herausgegeben wurde, wird die Unterstützung für das am Donnerstagabend veröffentlichte Dokument auch erwähnt, dass das Unternehmen in naher Zukunft mit Software-Updates Fixes mit Software-Updates ausgeben wird, anscheinend zusammen mit der Firmware 8.4, die noch in der Beta-Phase ist.

Auf habrhabr.ru schrieb ich, wenn nach dem Erhalt einer solchen Nachricht versuchen, Nachrichten im Dialog-Listenmodus zu öffnen, dann beginnt die Anwendung zu fallen. "Meldungen" wird geöffnet, wenn du sie direkt auf dem Bildschirm eines gesonderten Gesprächs anfängst, aber wenn du versuchst, in die Liste der Gespräche zu gehen, wird die Anwendung wieder fallen.

Wir haben versucht und sorgten dafür, dass das wirklich funktioniert. Und es funktioniert nicht unbedingt von SMS - der Text reicht aus, um in jeder Push-Nachricht zu erscheinen, zum Beispiel von Viber, Watzup, Vkontakte oder Facebook und anderen Diensten.

Natürlich ist dies kein Neustart oder Absturz, sondern ein Absturz des Grafik-Subsystems, der einen Neustart des gesamten Systems verursacht. Weil das Fenster mit dem Text der Push-Nachricht ist direkt in der iOS-Grafik-Shell enthalten und nicht ein separates Widget (wie z. B. in Android), ist es logisch, dass jeder Fehler auf einem so hohen Level das System deaktiviert.

iMessages startet aus dem gleichen Grund wie das ganze iOS, mit dem einzigen Unterschied - eine separate Anwendung, es provoziert nicht einen Tropfen im mainthread von iOS selbst. Crash-Nachrichten sind aufgrund der Tatsache, dass auf dem Hauptbildschirm sehen Sie die Texte der letzten gesendeten und empfangenen Nachrichten.

Das habrahabr-Projekt hat in xCode ein Testprojekt erstellt. Als ich versuchte, einen unglücklichen Text direkt dem Interface Builder hinzuzufügen, bekam ich den Crash von xCode selbst, und es wurde nicht geöffnet, bis ich das Testprojekt von der Festplatte gelöscht habe.

Beim zweiten Versuch wurde der arabische Text mit dem Code aus der Textdatei hinzugefügt und nach mehreren Versuchen wurde es durch Versuch und Irrtum herausgefunden:

  • UILabel hat nichts damit zu tun, er kann nicht einmal den Text zeigen und das Wort Power anhalten;
  • UITextField ist ähnlich;
  • UITextView hat den Volltext perfekt dargestellt.
  • UIButton hat einen schlechten Zugriff!

Hier ist es interessanter. Wir drucken die volle Stapelspur mit dem llvm-Befehl bt aus und erhalten folgendes:

  * Thread # 1: tid = 0xf611cd, 0x00000001120ce5f3 CoreText`CopyFromStorage (TRunGlue &, long) + 28, queue = 'com.apple.main-thread', Stop-Grund = EXC_BAD_ACCESS (Code = 1, Adresse = 0x90)
  Rahmen # 0: 0x00000001120ce5f3 CoreText`CopyFromStorage (TRunGlue &, lang) + 28
  Rahmen # 1: 0x00000001120ce283 CoreText`TRunGlue :: RotateGlyphs (CFRange, lang) + 527
  Rahmen # 2: 0x000000011212b71b CoreText`OpenTypeShapingEngine :: ApplyScriptShaping (unsigned int *) + 465
  Rahmen # 3: 0x00000001120d0201 CoreText`TOpenTypeMorph :: ApplyShapingEngine (OTL :: GSUB &, OTL :: GlyphLookups &, unsigned int *, CFRange, bool &) + 739
  Rahmen # 4: 0x00000001120d1007 CoreText`TOpenTypeMorph :: ShapeGlyphs (bool &) + 331
  Rahmen # 5: 0x0000000112056c4e CoreText`TShapingEngine :: ShapeGlyphs (TLine &, TCharStream const *) + 264
  Rahmen # 6: 0x000000011205c48b CoreText`TTypesetter :: FinishEncoding (std :: __ 1 :: Tupel  *, unsigned int, unsigned char> const &, TLine &, signiert char) + 127
  Rahmen # 7: 0x0000000112070586 CoreText`TTypesetterAttrString :: Initialisieren (__ CFAttributedString const *) + 674
  Rahmen # 8: 0x000000011207029a CoreText`TTypesetterAttrString :: TTypesetterAttrString (__ CFAttributedString const *) + 158
  Rahmen # 9: 0x000000011205d79f CoreText`CTLineCreateWithAttributedString + 63
  Rahmen # 10: 0x0000000110c6d8bd UIFoundation`__NSStringDrawingEngine + 18744
  Rahmen # 11: 0x0000000110c68f5f UIFoundation`- [NSString (NSExtendedStringDrawing) boundingRectWithSize: Optionen: Attribute: Kontext:] + 198
  Rahmen # 12: 0x000000010e875788 UIKit`- [UIButton _intrinsicSizeWithinSize:] + 946
  Rahmen # 13: 0x000000010ec2466d UIKit`- [UIView (UIConstraintBasedLayout) intrinsicContentSize] + 37
  Rahmen # 14: 0x000000010ec24b6c UIKit`- [UIView (UIConstraintBasedLayout) _generateContentSizeConstraints] + 33
  Rahmen # 15: 0x000000010ec24930 UIKit`- [UIView (UIConstraintBasedLayout) _updateContentSizeConstraints] + 422
  Rahmen # 16: 0x000000010ec2bd25 UIKit`- [UIView (AdditionalLayoutSupport) updateConstraints] + 162
  Rahmen # 17: 0x000000010e87521b UIKit`- [UIButton updateConstraints] + 2925
  Rahmen # 18: 0x000000010ec2b346 UIKit`- [UIView (AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 242
  Rahmen # 19: 0x000000010ec2b53e UIKit`- [UIView (AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 124
  Rahmen # 20: 0x000000010d0bd354 CoreFoundation`CFArrayApplyFunction + 68
  Rahmen # 21: 0x000000010ec2b2ed UIKit`- [UIView (AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 153
  Rahmen # 22: 0x000000010d9ef1be Stiftung `- [NSISEngine mitBehaviors: performModifikationen:] + 155
  Rahmen # 23: 0x000000010ec2b53e UIKit`- [UIView (AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 124
  Rahmen # 24: 0x000000010ec2ba0e UIKit`__60- [UIView (AdditionalLayoutSupport) updateConstraintsIfNeeded] _block_invoke + 96
  Rahmen # 25: 0x000000010d9ef1be Stiftung `- [NSISEngine mitBehaviors: performModifikationen:] + 155
  Rahmen # 26: 0x000000010ec2b6d6 UIKit`- [UIView (AdditionalLayoutSupport) updateConstraintsIfNeeded] + 231
  Rahmen # 27: 0x000000010ec2bdde UIKit`- [UIView (AdditionalLayoutSupport) _updateConstraintsAtEngineLevelIfNeeded] + 146
  Rahmen # 28: 0x000000010e623a3d UIKit`- [UIView (Hierarchie) _updateConstraintsAsNecessaryAndApplyLayoutFromEngine] + 114
  Rahmen # 29: 0x000000010e62fa2b UIKit`- [UIView (CALayerDelegate) layoutSublayersOfLayer:] + 536
  Rahmen # 30: 0x0000000111e08ec2 QuartzCore`- [CALayer layoutSublayers] + 146
  Rahmen # 31: 0x0000000111dfd6d6 QuartzCore`CA :: Layer :: layout_if_needed (CA :: Transaktion *) + 380
  Rahmen # 32: 0x0000000111dfd546 QuartzCore`CA :: Layer :: layout_and_display_if_needed (CA :: Transaktion *) + 24
  Rahmen # 33: 0x0000000111d69886 QuartzCore`CA :: Kontext :: commit_transaction (CA :: Transaktion *) + 242
  Rahmen # 34: 0x0000000111d6aa3a QuartzCore`CA :: Transaktion :: commit () + 462
  Rahmen # 35: 0x000000010e5ada2d UIKit`- [UIApplication _reportMainSceneUpdateFinished:] + 44
  Rahmen # 36: 0x000000010e5ae6f1 UIKit`- [UIApplication _runWithMainScene: ÜbergangContext: completion:] + 2648
  Rahmen # 37: 0x000000010e5ad0d5 UIKit`- [UIApplication ArbeitsbereichDidEndTransaction:] + 179
  Rahmen # 38: 0x0000000110d835e5 FrontBoardServices`__31- [FBSSerialQueue performAsync:] _block_invoke_2 + 21
  Rahmen # 39: 0x000000010e0ea41c CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
  Rahmen # 40: 0x000000010e0e0165 CoreFoundation`__CFRunLoopDoBlocks + 341
  Rahmen # 41: 0x000000010e0dff25 CoreFoundation`__CFRunLoopRun + 2389
  Rahmen # 42: 0x000000010d0df366 CoreFoundation`CFRunLoopRunSpecific + 470
  Rahmen # 43: 0x000000010e5acb42 UIKit`- [UIApplication _run] + 413
  Rahmen # 44: 0x000000010e5af900 UIKit` UIApplicationMain + 1282
  * Rahmen # 45: 0x000000010d91ed0f Islam`main (argc = 1, argv = 0x00007fff522e1330) + 111 at main.m: 14
  Rahmen # 46: 0x000000011076e145 libdyld.dylib`start + 1 

Die letzte dokumentierte Funktion ist CTLineCreateWithAttributedString, die grundsätzlich uns nichts gibt. Der Absturz selbst tritt innerhalb der CopyFromStorage-Methode (TRunGlue & lang) auf und beurteilt nach dem Assembler-Code, wenn lange von n Bytes von einem Teil des Speichers in einen anderen kopiert werden (movq 0x90 (% rax),% rdx).

Ich gehe davon aus, dass dies auf einige Unterschiede in der Berechnung der Länge des arabischen Textes zurückzuführen ist - anscheinend wird die Länge an zwei Stellen im Programm durch verschiedene Methoden berechnet. Hier kann ich Fehler machen und dich bitten, Leute zu korrigieren, die es wissen.

Bug, anscheinend gibt es so viele wie iOS, und wurde gesehen, anscheinend, durch Zufall. Übrigens ist das Wort Power für ein rotes Wort eingefügt und spielt keine Rolle. Die Bedeutung des gleichen Textes konnte ich auch mit Google Translate nicht identifizieren (das letzte Zeichen - nicht Arabisch, sondern Chinesisch und bedeutet Redundanz, das scheint zu beachten!). Vielleicht wegen der Anwesenheit von chinesischen und arabischen Zeichen zur gleichen Zeit?

Dafür nehme ich meine Abreise, ich wünsche allen Codes 200, baue ohne exc_bad_access und Stackoverflow und ein angenehmes Ende der produktiven Arbeitswoche!