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」チェックマークがありません。 通常のユーザーのアクションに関する統計の収集を妨げる可能性はほとんどありません。 本当に大丈夫かもしれませんが、それは私がすでに年をとっており、時代遅れになっているということです。そして私は勇敢な新しい世界に慣れなければなりません。 しかし、それでも私はそうではないと思います。