チートカウンターがサイトを訪れる

画像







この記事では、サイトの訪問カウンターがどのように巻き上げられ、人口統計、場所、および監視サービスのその他のパラメーターが偽装されているかを伝えたいと思います。







カウンターはどのように機能しますか?



ページが読み込まれると、カウンターサーバーへのHTTPリクエストの送信を開始するJavaScriptコードをホストします。







これは、データが送信されるヘッダー内の1回限りの要求、またはより多くの統計を送信する定期的な要求のいずれかです。







テスト対象として、「シンプルな」ヒットカウンター、liveinternetを使用しました。







httpを解析



ページがロードされると、jsカウンターは統計付きの画像のGETリクエストを送信します。 同時に、URLでクライアントデータの一部を渡します。







画像







クエリ文字列をデコードすると、次のような結果が得られます。







http://counter.yadro.ru/hit?t54.6;rhttp://RefererName.com/;s1920*1080*24;uhttp://SiteName.com/;hSite Header;0.5985211677780615









「;」で区切られた多数のパラメーターがあります。つまり、モニターのサイズと解像度、遷移ページ、リクエストが行われたURLとページタイトル、および一意の訪問を保証する乱数です。







CookieUser-Agentもhttpヘッダーに送信され、サーバーはユーザーの人口統計(だけでなく)とブラウザーのバージョンをそれぞれ通知します。

これらのデータはすべて、ユーザーを集合的に識別します。







理論から実践へ



クエリはCurlを使用して生成できますが、jsに問題があり、各カウンターに対して個別のクエリを作成する必要があります。







コンソールでPhantomJS -WebKitを選択しました。







ユニークな訪問をカウントする簡単なスクリプトを作成します。







 var page = require('webpage').create(); var system = require('system'); var url = system.args[1]; page.open(url, function(status) { console.log("Status: " + status); phantom.exit(); });
      
      





一部のカウンターでは訪問もカウントされますが、これは予想されたものとはまったく異なります。







ユーザーエージェントリファラー (移行元のページ)をインストールします







最初は非常に簡単に行われます:







 var userAgent = 'Custom UA'; page.settings.userAgent = userAgent;
      
      





2番目のタスクはもう少し複雑です。 事実は、単にhttpヘッダーにRefererを記述した場合、カウンターは遷移をカウントしません。 「実際の」トランジションの場合、リンクをクリックするだけで、jsイベントが処理されます。







コード
 var page = require('webpage').create(); var system = require('system'); var url = system.args[1]; var userAgent = 'Simple UA'; page.settings.userAgent = userAgent; var expectedContent = '<a id="link" href="' + url + '">link</a>'; //     «» var expectedLocation = system.args[2]; //   referer page.setContent(expectedContent, expectedLocation); //     url page.firstLoad = true; page.onLoadFinished = function(status){ if(page.firstLoad){ page.firstLoad = page.evaluate(function(){ console.log('Set Referer'); document.getElementById('link').click(); //     return false; }); } else{ console.log("Status: " + status); phantom.exit(); } }; function click(el){ var ev = document.createEvent("MouseEvent"); ev.initMouseEvent( //    "click", true, true, window, null, 0, 0, 0, 0, false, false, false, false, 0, null ); el.dispatchEvent(ev); } page.onConsoleMessage = function (msg){ //     console.log(msg); };
      
      





page.setContentを使用して、ドメインとページのコンテンツをエミュレートするのは面白いです。

実際、jsカウンターを取得して、ページの本文に配置し、Webサーバーですべての操作を実行できます。







画面解像度を変更する

次に、画面解像度、色数などの追加パラメーターを変更します。

PhantomJSには、トラフィックをその場で変更できる機能があります。







 page.new_resolution = "800x600x24".split('x'); //   page.onResourceRequested = function(requestData, networkRequest){ // 1920*1080*32 -     PhantomJS var newUrl = requestData.url.replace("1920*1080*32", page.new_resolution[0] + "*" + page.new_resolution[1] + "*" + page.new_resolution[2]); //      newUrl = requestData.url.replace("1920", page.new_resolution[0]); newUrl = newUrl.replace("1080", page.new_resolution[1]); newUrl = newUrl.replace("32-bit", page.new_resolution[2] + "-bit"); networkRequest.changeUrl(newUrl); //   };
      
      





残念ながら、この関数はGETリクエストのみを処理しますが、実験にはこれで十分でした。









空のCookieですべてを行うと、カウンターはビューをブロックし、禁止をスローします。

さらに、Cookieは比較的「古い」ものでなければなりません(1日以上)。

グラバーを作成し、ネットワーク上の人気のあるサイトを「歩き回り」、大量のCookieを保存しました。

PhantomJSでは、Cookieは--cookies-fileスイッチで接続されます







phantomjs --cookies-file=/path/to/cookies.txt









人口統計学では、すべてが非常に簡単です。「ユーザー」には性別と年齢が設定されるので、一般的なリソース(mail.ruメールアカウントを取得しました)にログインする必要があります。

驚くべきことに、私がサイトを「歩き回った」とき、ほとんどのサイトからdoubleclick.netからのCookieが保存されていました。 彼女は広告の提案を担当しています(2007年にGoogleはこの会社を31億ドルで買収しました)。







場所を変更



ロケーションの置換では魔法はありません。IPを変更する必要があります。

PhantomJSはプロキシをサポートしています。 --proxyスイッチを使用してプログラムを実行する必要があります。







phantomjs --proxy=ip:port









まとめ



Google Analytics、Yandex Metric、Liveinternetなどの一般的なカウンターをインストールしました。

彼らは皆、ビューを数えました。 Yandex Metricでは、ロボットの存在を確認できます。そこで、彼女は偽のリクエストを確認します。







誰が気にかける: 既製のスクリプト








All Articles