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

Der iMessage-Bug mit arabischem Text ermöglicht es Ihnen, jedes iPhone per Fernzugriff neu zu starten [FIX]

IOS hat einen extrem unangenehmen Fehler entdeckt. Das iPhone, das mit einer Nachricht mit einem bestimmten Zeichensatz geliefert wurde, startet neu, und die Anwendung "Nachrichten" beginnt zu fallen.

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

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

DISCLAIMER3: Funktioniert auch über soziale Netzwerke oder Messenger!

Schicke niemanden zum iPhone !!!!

"Klicken Sie, um den Spoiler anzuzeigen - klicken Sie erneut, um ihn zu verstecken ..."

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

FIX

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

  • Öffne die Nachrichten der letzten Konversation und sende die Antwort an den Joker.
  • Wenn Sie bereits Nachrichten im Dialoglistenmodus geöffnet haben, bitten Sie den Freund, Ihnen eine andere Nachricht zu senden.
  • Sende dir eine Nachricht mit Siri;
  • Erstellen Sie eine Notiz und senden Sie sie mit der Schaltfläche Freigeben als Nachricht an Ihre Telefonnummer.

Auch auf Reddit wurde ein Medikament beschrieben - man muss SMS von beliebigem Inhalt an die angegriffene Nummer schicken, und der Störimpuls verschwindet. Ich werde erklären - nach dem Neustart des angegriffenen Telefons funktioniert alles in Ordnung, bis das Opfer SMS lesen will, d.h. Laden Sie die integrierte Nachrichten-App herunter. Nachdem eine neue SMS vom Absender des "Virus" empfangen wurde, wird die letzte Nachricht eine neue SMS sein und Nachrichten werden logischerweise nicht mehr fallen.

ARBEITSFIX von shram.kiev.ua

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

Ein Workaround von Apple

Am Donnerstagabend erkennt Apple in einem neuen Supportdokument diesen Fehler, der vor zwei Tagen entdeckt wurde, und bietet eine einfache Lösung, um dieses Problem vorübergehend zu umgehen, indem bekannt gegeben wird, dass das Update in naher Zukunft über Software-Updates verfügbar sein wird.

Der so genannte Unicode-Todescode, auch bekannt als "Effektive Energie", ist auf die Tatsache zurückzuführen, dass das System versucht, Unicode-Zeichen zu decodieren, was eine Überlastung des Gerätespeichers verursacht und zu einem Neustart führt. Viele Benutzer berichten, dass sie die iMessage-Anwendung nicht öffnen können, nachdem sie diesen arabischen Text erhalten haben.

Apple hat die Aussagen an die Medien weitergeleitet und diesen Fehler bestätigt. In der Nacht zum Donnerstag hat das Unternehmen jedoch ein offizielles Dokument über die Erkennung des Fehlers und die Platzierung einer temporären Lösung veröffentlicht.

Apple ist sich eines iMessage-Problems bewusst, das durch eine bestimmte Serie von Unicode-Zeichen verursacht wird. Bis die Aktualisierung 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 anzurufen. Bitten Sie Siri nach dem Aktivieren, "ungelesene Nachrichten zu lesen".

Schritt 2: Siri liest die Nachricht (es ist unmöglich, sie wirklich in richtigem Englisch zu sprechen), und dann wird sie fragen, ob Sie auf die Nachricht antworten möchten. Sag ja.

Schritt 3: Sag etwas. Der tatsächliche Inhalt der Antwort spielt keine Rolle. Wichtig ist das Senden einer Nachricht.

Schritt 4: Nachdem die Antwort gesendet wurde, sollten Sie die Messaging-Anwendung öffnen können. Wischen Sie von dort aus, um die gesamte Konversation zu löschen, die eine Zeichenfolge enthält, oder halten Sie eine bösartige Nachricht gedrückt, klicken Sie auf Erweitert, und löschen Sie 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. Nutzer mit gehackten Geräten haben auch die Möglichkeit, Drittanbieter-Tricks zu installieren, die verhindern, dass das Problem überhaupt auftritt.

Ähnlich wie bei dem Berichterstatter, der Anfang dieser Woche veröffentlicht wurde, erwähnt die Unterstützung für das am Donnerstagabend veröffentlichte Dokument, dass das Unternehmen in naher Zukunft Korrekturen mit Software-Updates herausgeben wird, offenbar zusammen mit der Firmware 8.4, die immer noch im Beta-Stadium ist.

Auf habrhabr.ru schrieb, wenn nach Erhalt einer solchen Nachricht versuchen, Nachrichten in der Dialogliste Modus zu öffnen, dann wird die Anwendung beginnen zu fallen. "Nachrichten" wird geöffnet, wenn Sie sie direkt auf dem Bildschirm einer separaten Konversation starten. Wenn Sie jedoch versuchen, in die Liste der Konversationen zu wechseln, beginnt die Anwendung erneut zu fallen.

Wir haben versucht und dafür gesorgt, dass das wirklich funktioniert. Und es funktioniert nicht notwendigerweise von SMS - der Text war genug, um in irgendeiner Push-Nachricht zu erscheinen, zum Beispiel von Viber, Watzup, Vkontakte oder Facebook und anderen Diensten.

Dies ist natürlich kein Neustart oder Absturz, sondern ein Absturz des Grafiksubsystems, der einen Neustart des gesamten Systems bewirkt. Weil Das Fenster mit dem Text der Push-Nachricht ist direkt in der iOS-Grafik-Shell enthalten und kein separates Widget (wie z. B. in Android). Es ist logisch, dass jeder Fehler auf einer so hohen Ebene das System deaktiviert.

iMessages hebt sich aus dem gleichen Grund wie das gesamte iOS ab, mit dem einzigen Unterschied - es handelt sich um eine separate Anwendung, die keinen Verlust im Hauptthread von iOS selbst verursacht. Crash Messages ist darauf zurückzuführen, dass auf dem Hauptbildschirm die Texte der zuletzt gesendeten und empfangenen Nachrichten angezeigt werden.

Das habrahabr-Projekt hat ein Testprojekt in xCode erstellt. Als ich versuchte, einen unglücklichen Text direkt zum Interface Builder hinzuzufügen, bekam ich den Absturz von xCode selbst und es öffnete sich erst, nachdem ich das Testprojekt von der Festplatte gelöscht hatte.

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

  • UILabel hat nichts damit zu tun, er kann den Text nicht einmal zeigen und hält an dem Wort Macht fest;
  • UITextField ist ähnlich;
  • UITextView zeigte perfekt den vollen Text an;
  • UIButton hat schlechten Zugriff erzeugt !!

Es ist hier interessanter. Wir drucken die vollständige Stack-Trace mit dem llvm-Befehl bt aus und erhalten folgendes:

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

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

Ich nehme an, dass dies auf einige Unterschiede bei der Berechnung der Länge des arabischen Textes zurückzuführen ist - offenbar wird die Länge an zwei Stellen im Programm mit verschiedenen Methoden berechnet. Hier kann ich Fehler machen und Sie bitten, Leute zu korrigieren, die Bescheid wissen.

Bug, anscheinend gibt es so viele wie iOS, und wurde offenbar aus Versehen gesehen. Übrigens wird das Wort Power für ein rotes Wort eingefügt und spielt keine Rolle. Die Bedeutung des gleichen Textes konnte ich selbst mit Google Translate nicht identifizieren (das letzte Zeichen - nicht Arabisch, sondern Chinesisch, und das bedeutet Redundanz, das scheint zu vermuten!). Vielleicht wegen der Anwesenheit chinesischer und arabischer Schriftzeichen gleichzeitig?

Dafür verabschiede ich mich, wünsche alle Codes 200, baue ohne exc_bad_access und stackoverflow und ein angenehmes Ende der produktiven Arbeitswoche!