Twitterはあなたをフォローしています、匿名

Google、Facebook、 LGのような大企業が不幸なユーザーを監視しているとよく耳にします 。 そして、彼らのソフトウェアのいくつかを調べて、私はそうだと認めなければなりません-彼らは従います。



昨日、私は最新(この記事の執筆時点)の公式Twitter iOSクライアントバージョン5.13.1を調査しました 。 とりわけ、クライアントとサーバー間のトラフィックを見るのは興味深いものでした。 Twitterクライアントは証明書のピン留めを使用しているため、Fiddler2および同様のプログラムを使用してトラフィックを傍受することは非常に困難です。 したがって、 [NSURLConnection start]



ブレークポイントにフックし、このvery start



呼び出す直前に、興味深いNSURLConnection



フィールドをNSURLConnection



ダンプするGDBのdefine



コマンドを作成しました。 一般に、このような単純なトリックを使用すると、プログラムがサーバー送信する内容を確認してから、HTTPを介してさらに送信するためこの「内容」を暗号化できます。



そして、あなたは私が見たものを知っていますか? Twitterクライアントは、通常のリクエスト(ユーザー登録、承認、ツイートなど)に加えて、しばしばそうです...そうではありません... 非常に頻繁に、POSTサーバーへの不可解なURLにリクエストを送信しました api.twitter.com/1.1/jot/client_event



api.twitter.com/1.1/jot/client_event



これらの要求は、ほとんどすべての理由でサーバーに送信されました。 私はクライアントを開始しました-要求は行きました。 「サインイン」ボタンをクリックしました(まだログインしていない、ボタンをクリックしただけです)-リクエストは消えました。 ログイン画面が表示され、「ユーザー名」フィールドにフォーカスが移りました-リクエストが送信されました。 私はクライアントをオフにしました-要求は行きました...もちろん、私は驚いて理解しました。



の典型的なリクエスト api.twitter.com/1.1/jot/client_event



api.twitter.com/1.1/jot/client_event



は次のようになりました(明らかな理由で、いくつかのフィールドを api.twitter.com/1.1/jot/client_event



ていました)。







数十のそのようなクエリを見て、一般的な構造を大まかに理解しました。



  URL:https://api.twitter.com/1.1/jot/client_event
メソッド:POST
ヘッダー:
   X-Twitter-API-バージョン:5
  認可:OAuth ... la-la-la、秘密鍵で署名された通常のOAuth認証(引用符なし)
                  「GgDYlkSvaPxGxC4X8liwpUoqKwwr3lCADbz8A7ADU&fgFuHBbtKUk1ykYzwEKaYeNg28H0XEvztfVQCEu8GA」
   X-Twitter-Client:Twitter-iPhone
   X-Twitter-Client-Version:5.13.1
  ジオロケーション:私の座標、いまいましい(ただし、ロケーションサービスをオフにすると、このフィールドはリクエストから消えます)
   Accept-Language:en
   X-Twitter-Client-DeviceID:デバイスのID
   X-Client-UUID:一意のUUID(クライアントの最初の起動時に1回生成され、それ以上変更されません) 
  ユーザーエージェント:Twitter-iPhone / 5.13.1はiOSバージョンです(Apple; iPhone3,1 ;;;;;; 1)
本文(もちろんURLエンコード):
   lang = en&log = <cite> ...ここに興味深いJSONがあります(以下を参照)... </ cite>&send_error_codes = 1 


もちろん、ここで最も興味深いのは、リクエスト本文のJSONでした。 すべてのクエリで、次の形式の要素の配列でした。



  [
   ...
   {
    「event_name」:イベント名
    「ts」:UNIXタイムスタンプ、
    「format_version」:2
    「_category _」:「client_event」、
    "client_version": "Twitter-iPhone \ 5.13.1はiOSバージョンです(Apple; iPhone3,1 ;;;;; 1)"
   }
   ...
 ] 


たとえば、[サインイン]ボタンをクリックすると(まだログインしていないので、ボタンをクリックしただけです)、このJSONのようなリクエストがサーバーに送信されました。



  [
   {
    "event_name": "iphone:ログイン:::印象"、
    「ts」:1385678390003、
    「format_version」:2
    「_category _」:「client_event」、
    "client_version": "Twitter-iPhone \ 5.13.1 iOS \ 6.1.3(Apple; iPhone3,1 ;;;;; 1)"
   }
 ] 


私は他のリクエストを見ました(多くありました、はい)、フィールドevent_name



ts



format_version



_category_



およびclient_version



が必要なようです。 各JSON要素には、各リクエストでそれらが含まれていました。 しかし、それらに加えて、追加のフィールドが出くわしました。 たとえば、ユーザー名フィールドがログイン画面でフォーカスを受け取ったとき、次のJSONがリクエストに残っていました。



  [
   {
    「_category _」:「client_event」、
    "event_name": "iphone:ddg:digits_iphone_signup_1337 ::実験"、
    "client_version": "Twitter-iPhone \ 5.13.1 iOS \ 6.1.3(Apple; iPhone3,1 ;;;;; 1)"、
    「ts」:1385678389354、
    「experiment_key」:「digits_iphone_signup_1337」、
    「format_version」:2
    「バージョン」:12、
    「バケット」:「uncheck_follows」
    }
 ] 


experiment_key



version



およびbucket



フィールドには、おそらく、私が何をどのように行っているかについての追加情報が含まれています。 さて、Twitterの人は何を理解するでしょう。 これはどのような情報であり、これらの魔法の12



uncheck_follows



、まだわかりませんが、この問題をさらに詳しく調べるつもりです。



それだけです。 記事の終わりに、何かスマートなことを言う必要がありますが、午前4時に何も思い浮かぶことはありません。 Twitterがアプリケーションを介してほとんどすべての動きを監視し、そのプログラムで何を、いつ、どこで( Geolocation



ヘッダーを指定して)行うかを詳細に把握している場合をGeolocation



ます。 どのボタンまで、いつクリックしたか。 これはおそらく、ユーザーエクスペリエンスを収集するための何らかの必要かつ有用な実験であり、リクエストによってはexperiment_key



フィールドがあることを意味します。



そして、無限の「スパイ」リクエストを持つこのアプリケーションが、貴重な(文字通り)GPRSトラフィックを使い果たしてしまうのは好きではありません。 少なくとも、私はローミング中ではありません。そうでなければ、これらのTwitterの実験では、パンツなしで数日間滞在できます...まあ、私は何かをぼんやりさせました。



皆さん、グッドフライデー:)



PSタイトルが誰かに黄色に見えたら申し訳ありません。 コメント内の意見をありがとう、それは興味深い議論になります。 現時点では、コメンテーターの視点は分かれています。誰かが公式のTwitterクライアントからのそのような細心の注意を払った追跡を好まないのです。 他の人は、彼らが大丈夫だと言っている、例えばサイトは長い間ユーザーの行動やアプリケーションに関する統計を収集してきた。 うーん...私も知りません。 サイトの場合、ユーザーは少なくとも理論的にはプライバシーを競う機会があります(たとえば、同じGhosteryを使用します)。 また、App Storeのアプリケーションにはクローズドソース、HTTPsがあり、一部の証明書の固定には「Do not follow me」チェックマークがありません。 通常のユーザーのアクションに関する統計の収集を妨げる可能性はほとんどありません。 本当に大丈夫かもしれませんが、それは私がすでに年をとっており、時代遅れになっているということです。そして私は勇敢な新しい世界に慣れなければなりません。 しかし、それでも私はそうではないと思います。



All Articles