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

画像


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


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


ページが読み込まれると、カウンターサーバーへの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では、ロボットの存在を確認できます。そこで、彼女は偽のリクエストを確認します。


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



Source: https://habr.com/ru/post/J347712/


All Articles