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

Le bogue d'iMessage avec le texte arabe vous permet de redémarrer à distance n'importe quel iPhone [FIX]

IOS a détecté un bug extrêmement désagréable. iPhone, qui est venu avec un message avec un certain ensemble de caractères, redémarre, et l'application "Messages" commence à tomber.

AVERTISSEMENT1: N'essayez pas de répéter ceci avec les téléphones et les téléphones de vos collègues! À en juger par les commentaires, beaucoup de personnes ont déjà infecté leur téléphone et 100% des médicaments ne sont pas encore disponibles!

DISCLAIMER2: N'essayez même pas de l'appeler point Wi-Fi!

CLAUSE DE NON-RESPONSABILITÉ3: Fonctionne également via des réseaux sociaux ou des messagers!

N'envoyez personne à l'iPhone !!!!

"Cliquez pour afficher le spoiler - cliquez à nouveau pour cacher ..."

Ouvrez le message-bug dans une fenêtre séparée (ne pas ouvrir avec l'iPhone!).

FIX

Il existe quelques moyens simples de corriger l'erreur:

  • ouvrez les messages sur la dernière conversation et envoyez la réponse au joker;
  • Si vous avez déjà ouvert des messages en mode liste de dialogue, demandez à votre ami de vous envoyer tout autre message.
  • envoyez-vous un message avec Siri;
  • créer une note et l'envoyer sous forme de message à votre numéro de téléphone à l'aide du bouton Partager.

Un médicament a également été décrit sur Reddit - vous devez envoyer des SMS de n'importe quel contenu au numéro attaqué, et le problème disparaîtra. Je vais expliquer - après le redémarrage du téléphone attaqué, tout fonctionne bien jusqu'à ce que la victime veuille lire des sms, c'est-à-dire téléchargez l'application Messages intégrée. Après avoir reçu un nouveau SMS de l'expéditeur du "virus", le dernier message sera un nouveau SMS et les messages, logiquement, cesseront de tomber.

FIX DE TRAVAIL par shram.kiev.ua

Demandez à Siri de lire le dernier message non ouvert ("Siri a lu le dernier message non lu" ou "Siri a lu mon dernier message"), puis créez une note et envoyez-la vous-même à iMessage.

Une solution de rechange d'Apple

Jeudi soir, dans un nouveau document de support, Apple reconnaît ce bogue découvert il ya deux jours et offre une solution simple pour contourner temporairement ce problème en annonçant que le correctif sera disponible dans des mises à jour logicielles dans un avenir proche.

Le code de décès Unicode, également appelé «puissance effective», est dû au fait que le système essaie de décoder les caractères Unicode, ce qui provoque une surcharge de la mémoire de l'appareil et provoque son redémarrage. De nombreux utilisateurs signalent qu'ils ne peuvent pas ouvrir l'application iMessage après avoir reçu ce texte arabe.

Apple a déjà transmis des déclarations aux médias, a confirmé ce bug, mais dans la nuit de jeudi, la société a publié un document officiel sur la reconnaissance du bug et le placement d'une solution temporaire pour cela.

Apple a connaissance d'un problème lié à iMessage causé par une série spécifique de caractères Unicode. Tant que la mise à jour n'est pas disponible, vous pouvez utiliser ces étapes pour rouvrir l'application Messages.

Étape 1: Appuyez et maintenez le bouton Accueil pour appeler Siri. Après l'activation, demandez à Siri "de lire les messages non lus".

Etape 2: Siri, en quelque sorte, lit le message (il est impossible de le parler correctement en anglais), puis il vous demandera si vous souhaitez répondre au message. Dites oui.

Étape 3: Dites quelque chose. Le contenu réel de la réponse n'a pas d'importance. L'important est d'envoyer un message.

Étape 4: Une fois la réponse envoyée, vous devriez pouvoir ouvrir l'application Messaging. À partir de là, balayez pour supprimer l'intégralité de la conversation contenant une chaîne de caractères ou appuyez et maintenez un message malveillant, cliquez sur Avancé, puis supprimez le message de la conversation.

Ce n'est pas la première façon de voir ce numéro. Nous avons publié quelques options hier. Les personnes avec des appareils piratés ont également la possibilité d'installer des astuces de tiers qui empêcheront le problème de se produire en premier lieu.

Semblable à la société de publication publiée en début de semaine, le support du document publié jeudi soir mentionne également que la société publiera prochainement des correctifs utilisant des mises à jour logicielles, apparemment avec le firmware 8.4, qui est encore en phase bêta.

Sur habrhabr.ru écrit, si, après avoir reçu un tel message, essayez d'ouvrir des messages en mode liste de dialogue, alors l'application commencera à tomber. "Messages" s'ouvrira si vous les lancez directement sur l'écran d'une conversation séparée, cependant, lorsque vous essayez d'accéder à la liste des conversations, l'application recommencera à tomber.

Nous avons essayé et fait en sorte que cela fonctionne vraiment. Et cela ne fonctionne pas nécessairement à partir de SMS - le texte était suffisant pour apparaître dans tout message push, par exemple de viber, watzup, vkontakte ou facebook et d'autres services.

Bien sûr, il ne s’agit pas d’un redémarrage ou d’une panne, mais d’un crash du sous-système graphique, ce qui provoque un redémarrage de l’ensemble du système. Parce que la fenêtre avec le texte du message push est directement incluse dans le shell graphique iOS, et n'est pas un widget séparé (comme, par exemple, dans Android), il est logique que toute erreur à un niveau aussi élevé désactivera le système.

iMessages prend son envol pour la même raison que l’ensemble de l’iOS, la seule différence étant qu’il s’agit d’une application distincte, elle ne provoque pas une baisse du fil de discussion sur iOS lui-même. Crash Messages est dû au fait que sur l'écran principal, vous voyez les textes des derniers messages envoyés et reçus.

Le projet habrahabr a créé un projet de test dans xCode. Lorsque j'ai essayé d'ajouter un texte malheureux directement à Interface Builder, j'ai eu le plantage de xCode lui-même et il ne s'est pas ouvert tant que j'ai supprimé le projet de test du disque dur.

Lors de la deuxième tentative, le texte arabe a été ajouté avec le code du fichier texte et après plusieurs tentatives, il a été découvert par essais et erreurs que:

  • UILabel n'a rien à voir avec cela, il ne peut même pas montrer le texte, s'arrêtant au mot Power;
  • UITextField est similaire;
  • UITextView affiche parfaitement le texte intégral;
  • UIButton a généré un mauvais accès !!

C'est plus intéressant ici. Nous imprimons la trace complète de la pile avec la commande llvm-bt et obtenons ce qui suit:

  * thread # 1: tid = 0xf611cd, 0x00000001120ce5f3 CoreText`CopyFromStorage (TRunGlue &, long) + 28, queue = 'com.apple.main-thread', raison d'arrêt = EXC_BAD_ACCESS (code = 1, adresse = 0x90)
  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  *, unsigned int, unsigned char> const &, TLine &, char signé) + 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: options: attributes: context:] + 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 (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
  frame # 28: 0x000000010e623a3d UIKit`- [UIView (Hierarchy) _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 :: 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
  frame # 36: 0x000000010e5ae6f1 UIKit`- [UIApplication _runWithMainScene: transitionContext: achèvement:] + 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`CFRunLoopRunSpecific + 470
  frame # 43: 0x000000010e5acb42 UIKit`- [UIApplication _run] + 413
  frame # 44: 0x000000010e5af900 UIKit` UIApplicationMain + 1282
  * cadre # 45: 0x000000010d91ed0f Islam`main (argc = 1, argv = 0x00007fff522e1330) + 111 à main.m: 14
  frame # 46: 0x000000011076e145 libdyld.dylib`start + 1 

La dernière fonction documentée est CTLineCreateWithAttributedString, qui ne nous donne en principe rien. Le crash lui-même se produit à l'intérieur de la méthode CopyFromStorage (TRunGlue & long) et, à en juger par le code assembleur, lorsque n octets sont copiés d'une partie de la mémoire (movq 0x90 (% rax),% rdx).

Je suppose que cela est dû à certaines différences dans le calcul de la longueur du texte arabe - apparemment, la longueur est calculée à deux endroits du programme par des méthodes différentes. Ici, je peux faire des erreurs et vous demander de corriger les personnes qui connaissent.

Bug, apparemment, il y en a autant qu'iOS, et a été vu, apparemment, par accident. En passant, le mot Power est inséré pour un mot rouge et ne joue aucun rôle. La signification du même texte que je n'ai pas pu identifier, même en utilisant Google Translate (le dernier caractère - pas en arabe, mais en chinois, et qui signifie la redondance, cela semble indiquer!). Peut-être à cause de la présence de caractères chinois et arabes en même temps?

Pour cela je prends congé, je souhaite tous les codes 200, construit sans exc_bad_access et stackoverflow et une fin agréable à la semaine de travail productive!