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

Ein IMessage-Fehler mit arabischem Text ermöglicht es Ihnen, jedes iPhone aus der Ferne neu zu starten. [FIX]

In iOS einen sehr unangenehmen Fehler gefunden. Das iPhone, das eine Nachricht mit bestimmten Zeichen erhalten hat, startet neu und die Nachrichtenanwendung beginnt zu fallen.

HAFTUNGSAUSSCHLUSS1: Versuchen Sie es nicht mit Ihren Telefonen und Kollegen! Nach den Kommentaren zu urteilen, haben viele Leute bereits ihre Handys angesteckt, aber es gibt noch keine 100% ige Medizin!

DISCLAIMER2: Versuchen Sie nicht einmal, diesen WLAN-Punkt so zu nennen!

HAFTUNGSAUSSCHLUSS3: Es funktioniert auch über soziale Netzwerke oder Boten!

Schicken Sie niemanden zum iPhone!

"Klicken Sie, um den Spoiler anzuzeigen - klicken Sie erneut, um auszublenden ..."

Öffnen Sie den Nachrichtenfehler in einem separaten Fenster (nicht mit dem iPhone öffnen!).

FIX

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

  • Öffnen Sie die Nachrichten im letzten Gespräch und senden Sie die Antwort an den Joker.
  • Wenn Sie Nachrichten bereits im Dialoglistenmodus geöffnet haben, bitten Sie einen Freund, Ihnen eine andere Nachricht zu senden.
  • Senden Sie eine Nachricht an sich mit Siri;
  • Erstellen Sie eine Notiz und senden Sie sie mit der Share-Taste als Nachricht an Ihre Telefonnummer.

Auch bei Reddit wurde das Medikament beschrieben - es ist erforderlich, SMS mit jeglichem Inhalt an die angegriffene Nummer zu senden, und der Panne wird verschwinden. Lassen Sie mich erklären - nach dem Neustart des angegriffenen Telefons funktioniert alles einwandfrei, bis das Opfer die SMS lesen möchte, d. H. Laden Sie die integrierte Nachrichtenanwendung herunter. Nachdem Sie eine neue SMS vom Absender des "Virus" erhalten haben, wird die letzte Nachricht die neue SMS und die Nachrichten sein. Logischerweise wird sie nicht mehr fallen.

ARBEIT 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"), erstellen Sie eine Notiz und senden Sie sie per iMessage an sich.

Apple Problemumgehung

Am Donnerstagabend erkennt Apple in einem neuen Helpdesk- Dokument diesen vor zwei Tagen entdeckten Fehler und bietet eine einfache Lösung, um dieses Problem vorübergehend zu umgehen. Das Update wird in Kürze durch ein Softwareupdate verfügbar sein.

Der sogenannte Unicode-Todescode, der auch als "Effektive Leistung" bezeichnet wird, tritt auf, weil das System versucht, die Unicode-Zeichen zu decodieren, was dazu führt, dass das Gerät das Gerät überlastet und neu startet. Viele Benutzer berichten, dass sie die iMessage-Anwendung nicht öffnen können, nachdem sie diesen arabischen Text erhalten haben.

Apple, der zuvor den Medien Aussagen übermittelt hatte, bestätigte diesen Fehler, aber am Donnerstagabend veröffentlichte das Unternehmen ein offizielles Dokument über die Erkennung des Fehlers und die Platzierung einer temporären Lösung dafür.

Das ist kein Problem. Wiederholen Sie die Nachrichten-App.

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

Schritt 2: Siri liest die Nachricht (dies ist nicht möglich, um sie auf Englisch zu sprechen) und fragt, ob Sie auf die Nachricht antworten möchten. Sag ja

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

Schritt 4: Nachdem die Antwort gesendet wurde, sollten Sie die Nachrichtenanwendung öffnen können. Streichen Sie von dort aus, um die gesamte Konversation mit einer Zeichenfolge zu löschen, oder halten Sie eine schädliche Nachricht gedrückt, klicken Sie auf Erweitert, und löschen Sie die Nachricht aus der Konversation.

Dies ist nicht die erste Problemumgehung, die wir in dieser Angelegenheit gesehen haben. Wir haben gestern mehrere Optionen veröffentlicht. Benutzer mit gehackten Geräten können auch Tricks von Drittanbietern installieren, die das Problem überhaupt erst verhindern.

Wie das Berichterstattungsunternehmen, das zu Beginn dieser Woche herausgegeben wurde, wird in einem am Donnerstagabend veröffentlichten Unterstützungsdokument erwähnt, dass das Unternehmen in Kürze Softwareupdates veröffentlichen wird, offenbar neben Firmware 8.4, die sich noch in der Beta-Phase befindet.

Sie schrieben auf habrhabr.ru, wenn nach dem Empfang einer solchen Nachricht die Meldungen im Dialoglistenmodus geöffnet werden sollen, fällt die Anwendung ab. „Nachrichten“ wird geöffnet, wenn Sie sie sofort auf dem Bildschirm einer separaten Konversation starten. Wenn Sie jedoch versuchen, zur Liste der Konversationen zu gelangen, fällt die Anwendung wieder ab.

Wir haben versucht und sichergestellt, dass es wirklich funktioniert. Und es funktioniert nicht unbedingt von SMS - es genügt, dass ein Text in einer Push-Nachricht erscheint, beispielsweise von Viber, Watzup, VKontakte oder Facebook und anderen Diensten.

Natürlich ist dies kein Neustart oder Absturz, sondern ein Absturz des Grafik-Subsystems, wodurch das gesamte System neu gestartet wird. Seit Das Fenster mit dem Text der Push-Nachrichten ist direkt in der grafischen Shell von iOS enthalten und stellt kein separates Widget dar (z. B. in Android). Es ist logisch, dass jeder Fehler auf einer so hohen Ebene das System in eine falsche Reihenfolge bringt.

iMessages stürzt aus demselben Grund wie das gesamte iOS ab. Der einzige Unterschied besteht in einer separaten Anwendung. Es verursacht keinen Rückgang des Mainthread von iOS. Crash Messages beruht darauf, dass auf dem Hauptbildschirm die Texte der zuletzt gesendeten und empfangenen Nachrichten angezeigt werden.

In diesem Projekt hat habrahabr ein Testprojekt in xCode erstellt. Beim Versuch, den unglückseligen Text direkt in den Interface Builder einzufügen, kam es zum Absturz von xCode und er wurde nicht geöffnet, bis das Testprojekt von der Festplatte gelöscht wurde.

Beim zweiten Versuch wurde arabischer Text mit Code aus einer Textdatei hinzugefügt. Nach mehreren Versuchen wurde durch Versuch und Irrtum Folgendes festgestellt:

  • UILabel hat nichts damit zu tun, er kann nicht einmal Text zeigen, der sich auf das Wort Macht konzentriert;
  • UITextField ist ähnlich;
  • UITextView zeigte den vollständigen Text perfekt an.
  • UIButton hat einen schlechten Zugriff generiert !!

Es ist hier interessanter. Wir drucken die vollständige Stapelverfolgung mit dem Befehl bt llvm aus und erhalten so etwas wie folgt:

  * thread # 1: tid = 0xf611cd, 0x00000001120ce5f3 CoreText`CopyFromStorage (TRunGlue &, long) + 28, Warteschlange = 'com.apple.main-thread', Stoppgrund = EXC_BAD_ACCESS (Code = 1, Adresse = 0x)
  frame # 0: 0x00000001120ce5f3 CoreText`CopyFromStorage (TRunGlue &, long) + 28
  Frame # 1: 0x00000001120ce283 CoreText`TRunGlue :: RotateGlyphs (CFRange, long) + 527
  frame # 2: 0x000000011212b71b CoreText`OpenTypeShapingEngine :: ApplyScriptShaping (unsigned int *) + 465
  frame # 3: 0x00000001120d0201 CoreText`TOpenTypeMorph :: ApplyShapingEngine (OTL :: GSUB &, OTL :: GlyphLookups &, unsigned 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 :: tuple  *, vorzeichenlose int, vorzeichenlose Zeichen> const &, TLine &, signierte Zeichen) + 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
  Rahmen # 10: 0x0000000110c6d8bd UIFoundation`__NSStringDrawingEngine + 18744
  frame # 11: 0x0000000110c68f5f UIFoundation`- [NSString (NSExtendedStringDrawing) boundingRectWithSize: Optionen: Attribute: Kontext:] + 198
  Rahmen # 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) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondAndViewsNeedingBaselineUpdate:] + 242
  frame # 19: 0x000000010ec2b53e UIKit`- [UIView (AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondAndViewsNeedingBaselineUpdate:] + 124
  Frame # 20: 0x000000010e0bd354 CoreFoundation`CFArrayApplyFunction + 68
  frame # 21: 0x000000010ec2b2ed UIKit`- [UIView (AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondAndViewsNeedingBaselineUpdate:] + 153
  frame # 22: 0x000000010d9ef1be Foundation`- [NSISEngine withBehaviors: performModifications:] + 155
  frame # 23: 0x000000010ec2b53e UIKit`- [UIView (AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondAndViewsNeedingBaselineUpdate:] + 124
  frame # 24: 0x000000010ec2ba0e UIKit`__60- [UIView (AdditionalLayoutSupport) updateConstraintsIfNeeded] _block_invoke + 96
  frame # 25: 0x000000010d9ef1be Foundation`- [NSISEngine withBehaviors: performModifications:] + 155
  Frame # 26: 0x000000010ec2b6d6 UIKit`- [UIView (AdditionalLayoutSupport) updateConstraintsIfNeeded] + 231
  frame # 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
  frame # 31: 0x0000000111dfd6d6 QuartzCore`CA :: Layer :: layout_if_needed (CA :: Transaction *) + 380
  frame # 32: 0x0000000111dfd546 QuartzCore`CA :: Layer :: layout_and_display_if_needed (CA :: Transaction *) + 24
  frame # 33: 0x0000000111d69886 QuartzCore`CA :: Context :: commit_transaction (CA :: Transaction *) + 242
  Frame # 34: 0x0000000111d6aa3a QuartzCore`CA :: Transaction :: commit () + 462
  frame # 35: 0x000000010e5ada2d UIKit`- [UIApplication _reportMainSceneUpdateFinished:] + 44
  Rahmen # 36: 0x000000010e5ae6f1 UIKit`- [UIApplication _runWithMainScene: Übergangskontext: Abschluss:] + 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
  Rahmen # 40: 0x000000010e0e0165 CoreFoundation`__CFRunLoopDoBlocks + 341
  Frame # 41: 0x000000010e0dff25 CoreFoundation`__CFRunLoopRun + 2389
  Rahmen # 42: 0x000000010e0df366 CoreFoundation`CFRunLoopRunSpecific + 470
  Rahmen # 43: 0x000000010e5acb42 UIKit`- [UIApplication _run] + 413
  Rahmen # 44: 0x000000010e5af900 UIKit`UIApplicationMain + 1282
  * frame # 45: 0x000000010d91ed0f Islam`main (argc = 1, argv = 0x00007fff522e1330) + 111 in main.m: 14
  Rahmen # 46: 0x000000011076e145 libdyld.dylib`start + 1 

Die letzte dokumentierte Funktion ist CTLineCreateWithAttributedString, die im Grunde nichts ergibt. Der gleiche Absturz tritt innerhalb der CopyFromStorage-Methode (TRunGlue &, long) und beim Assembler-Code zum Zeitpunkt des Kopierens der Bytes mit der Länge n von einem Teil des Speichers in einen anderen (movq 0x90 (% rax),% rdx) auf.

Ich vermute, dass dies aufgrund einiger Unterschiede bei der Berechnung der Länge des arabischen Textes geschieht - offensichtlich wird die Länge an zwei Stellen des Programms mit unterschiedlichen Methoden berechnet. Hier kann ich mich irren und nach sachkundigen Leuten fragen.

Der Fehler existiert anscheinend genauso wie iOS und wurde offenbar zufällig bemerkt. Das Wort Power wird übrigens für rote Wörter eingefügt und spielt keine Rolle. Ich konnte die Bedeutung des Textes selbst mit Hilfe von Google Translate nicht identifizieren (das letzte Zeichen ist überhaupt nicht Arabisch, sondern Chinesisch und bedeutet Redundanz, was sozusagen anspielt!). Vielleicht, weil gleichzeitig chinesische und arabische Schriftzeichen vorhanden sind?

Ich werde mich hinterher lassen, ich wünsche Ihnen alle 200 Codes, baut ohne exc_bad_access und stackoverflow und einen angenehmen Abschluss einer produktiven Arbeitswoche!