iPhoneがアラブSMSから再起動するのはなぜですか

免責事項



あなたの電話や同僚の電話でこれを繰り返そうとしないでください ! コメントから判断すると、多くの人がすでに自分の携帯電話に感染しており、まだ完全な治療法はありません!



免責条項2



そのようなWi-fiポイントを呼び出そうとしないでください!



約15時間前に、Redditに次の形式の奇妙なメッセージが表示された後、iPhoneを再起動するという面白い投稿がありました。

誰もiPhoneに送らないでください


لُلُصّبُلُلصّبُررًॣॣhॣॣ

冗談







同僚と私は、それが実際に機能することを試し、確認しました。 また、SMSから必ずしも機能するわけではありません。プッシュメッセージにテキストを表示するには十分でした。



もちろん、これは再起動ではなく、グラフィックスサブシステムのクラッシュであり、システム全体の再起動を引き起こします。 なぜなら プッシュメッセージのテキストを含むウィンドウは、iOSのグラフィカルシェルに直接入り、個別のウィジェットではありません(Androidなど)。このような高レベルでエラーが発生すると、システムが無効になります。



また、薬はRedditに記載されていました-攻撃された番号にコンテンツのSMSを送信する必要があり、グリッチは消えます。 説明してみましょう-攻撃された電話を再起動した後、被害者がSMSを読みたいと思うまで、つまり、 組み込みのメッセージアプリケーションをダウンロードします。



iOS全体と同じ理由でメッセージがクラッシュしますが、唯一の違いは個別のアプリケーションであり、iOSのメインスレッドがクラッシュすることはありません。 メイン画面に最後に送受信されたメッセージのテキストが表示されるため、メッセージがクラッシュします。 「ウイルス」の送信者から新しいSMSを受信すると、最後のメッセージは新しいSMSになり、メッセージは論理的に落下を停止します。



なぜすべてがそんなに悲しくクラッシュするのか疑問に思い、xCodeでテストプロジェクトを作成しました。 不運なテキストをInterface Builderに直接追加しようとすると、xCode自体がクラッシュし、ハードドライブからテストプロジェクトを削除するまで開きませんでした。



2回目の試行で、テキストファイルのコードを使用してアラビア語のテキストを追加し、何度か試行して、試行錯誤を繰り返しました。





すでにもっと面白いものがあります。 llvm-command btを使用して完全なスタックトレースを出力し、次のようなものを取得します。



* thread #1: tid = 0xf611cd, 0x00000001120ce5f3 CoreText`CopyFromStorage(TRunGlue&, long) + 28, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=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<TLine const*, TCharStream const*, void const* (*)(__CTRun const*, __CFString const*, void*), void*, std::__1::shared_ptr<TBidiLevelsProvider>*, unsigned int, unsigned char> 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: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:completion:] + 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 * frame #45: 0x000000010d91ed0f Islam`main(argc=1, argv=0x00007fff522e1330) + 111 at main.m:14 frame #46: 0x000000011076e145 libdyld.dylib`start + 1
      
      





最後に文書化された関数はCTLineCreateWithAttributedStringであり、基本的には何も提供しません。 クラッシュ自体は、CopyFromStorageメソッド(TRunGlue&、long)内で発生し、アセンブラーコードによって判断すると、メモリのある部分から別の部分に長さlong nのバイトをコピーする瞬間に(movq 0x90(%rax)、%rdx)。



これは、アラビア語のテキストの長さを計算する際のいくつかの違いによるものだと思われます-明らかに、長さは異なる方法を使用してプログラムの2つの場所で計算されます。 ここで私は間違っている可能性があり、知識のある人々を修正するように頼むことができます。



バグは、明らかにiOSと同じくらい存在し、明らかに偶然に気づかれました。 ちなみに、赤い単語にはPowerという単語が挿入されており、役割を果たしていません。 Google翻訳の助けを借りても、テキストの意味を知ることすらできませんでした(最後の文字はまったくアラビア語ではなく、中国語であり、冗長性を意味します。 おそらく中国語とアラビア語の文字が同時に存在するためでしょうか?



simについては、200コードすべて、exc_bad_accessとstackoverflowを使用せずにビルドし、1週間の生産的な作業を快適に終えることを願っています。



All Articles