地元の紳士の神聖な意志に違反する何かに従事することは、彼らが彼らの周りに見たいだけのコンテンツであるということは、もちろん、恩知らずで軍隊的に危険なことです。 しかし、広告ブロッカーと広告システムの間の軍拡競争は避けられないので、それについて話してください。 現在、カットオフトラフィックの総量が約1%になると、すべてがやや緩慢になりますが、広告から受け取るお金が30%未満のサイトオーナーを既に探しています。 広告ネットワークは相互に通信を開始し、仕様を交換しています。このテーマについては、すでにイスラエルのスタートアップが何らかの形で存在しています。 これまでのところ、ロシアのセグメントのすべてが、「広告を無効にしている-これにより開発が妨げられている」という形式の推奨告知や、そのようなユーザーの存在の事実を無視しています。 私は言わなければならない、
それはすべてそのままにしておきます。
ここでは、最小限の操作性の証明モードのみで、URLパターンにより、最も一般的なタイプの広告ブロッカーをバイパスします。 メソッドは以下をサポートする必要があります。
- クッキー広告システムをユーザー側に保存する
- ユーザーに関する情報をブラウザより少なく送信します:User-Agent、IP
- ほとんどの標準広告タグの最小限のカスタマイズが必要
- だれかが怠け者ではなく、主流になったカスタムルールを追加した場合は、簡単に接続して変更できます
結果を達成するために、パブリッシャーのサーバーと広告主の間の一種のプロキシを介して、広告ネットワークのすべてのURLをマスクします。
この方法はリソースの観点から最も安価ではありません。広告主にとっては潜在的に危険です。クリックやコンバージョンによるトラフィックの品質を評価せずに詐欺の原因となることはできません。サイト運営者にとっては-Googleが禁止されている場合、サイト全体が禁止されます。 したがって、それらの間には信頼の一定のしきい値が必要ですが、これらはすべて別個の問題です。 はい、すべての偶然または言及はランダムであり、手に入れたものを取りました。
そのため、広告ブロッカーを検出した人を対象としたすべてのサイト呼び出しが必要です。
ads.*.ru/228129/prepareCode?pp=g&ps=bugf&p2=ezfl&pct=a&plp=a&pli=a&pop=a'
たとえば、サイト固有のコンテンツと区別できないローカルに置き換えます。
/meduza/2015/09/28/shapitorbFgFQ4Y7_Z3jaPSRix09Pn5VyrnV5Pcki64JcXvjIyzlgYXerh3yMMgY8DB5vleYAkS_gbRiHDSyQHU7QscAd38-1tKyYnnLjLSlpHq6aJ4sEo
明確にするために、必要なものから始めます。1.広告タグを取得し、最初のエントリポイント(広告タグ自体のエントリポイント)を手動で暗号化します
<!-- : 990x90js--> <script type="text/javascript"> </script>
2.サーバー設定(この場合はnginx)を少し拡張し、特別なモードでそのようなURLの処理を開始し、要求処理をスクリプトに渡します:
location /meduza/2015/09/28/shapito { set $prefix "http://localhost:9090/meduza/2015/09/28/shapito"; rewrite shapito(.*)$ /adbb.php?query=$1&url_mask_prefix=$prefix&ua=$http_user_agent&remote_addr=$remote_addr; }
それだけです-その後、広告が表示されます。
どのように機能しますか?リトリート、資金の選択Luaですべてのロジックを記述したかったのですが、nginxを再構築するのは面倒で、PHPはサイトの所有者により近い可能性があるため、それを使用しました。 簡単なコードは概念実証のために書かれており、2ページで、最後に添付された任意の言語で複製できます。 mbcryptとcurlに依存しています。
仕事のアルゴリズム。1.渡された文字列を構成のキーで復号化し、宛先URLを取得します
2.そこからドメインを取得し、暗号化します
ads.XXXXXX.ru -> pPM9l7raWppVawqO
3.このキーにより、送信されたCookieを調べ、フォームの値を見つけます。
niFJ2HLxzm27hCLnQUvcmLx62sEU-worI4tjmSAfqxNSMR6DSZ279lampNh_CN2jlu7FXaVk0WRVt-HMxy4vdm0uEncngawC6RvcKBwRXrT0wIi0icl4BvSXPJzH99C_5-mTmneEISfz
そして、インストールのためにこのサーバーから送信された元のCookieを受け取ったら、暗号化を解除します。
4. URLにクリックマーカーが含まれている場合、他には何もせず、302リダイレクトを指定して終了します。
5.それ以外の場合は、Cookie、元のユーザーUser-Agent、およびX-Forwarded-Forヘッダーの実際のIPを渡して、宛先URLにリクエストを行います。
6.サーバーからの応答を分析します。
5.1。 Set-Cookieが送信された場合-それらを再パックし(キーは暗号化されたドメイン、値は呼び出しの結果からの暗号化されたSet-Cookieです)、それらを設定すると、次のようになります
Set-Cookie:oI5upmClXJaq6DY4QWT5g5ZsvQ=niFJ3pLNsqSh0x19ux1HB-3XQiMb3XDhuJC5Byrefm_xOIDJBlZ2FL5q2zvyVtPcNOimtTk-lfoY; expires=Mon, 28-Dec-2015 08:23:57 GMT; Max-Age=7776000
5.2。 content-typeにテキストやJavaScript(画像、gifピクセルなど)が含まれていない場合は、そのままのコンテンツを提供し、キャッシングを好みに合わせて設定します(ただし、しない方が良いです)。 そして出かける
5.3。 他のすべてのコンテンツタイプについては、パターンに従ってURLの応答本文を調べ、それぞれを暗号化し、サーバーから送信されたプレフィックスを使用して、呼び出しを偽装、つまりフォームの場所に置き換えます
object_1986381203 += '<a href="http://ads.XXXXX.ru/228129/goLink?pr=gleurtb&p5=dcxnh&p1=bohgi&p2=ezfl" target="_blank"><img src="http://content.XXXXX.ru/150924/XXXX/507850/1421973.jpg" width="990" height="90" alt="" border=0></a>';
このように与えられます:
object_1986381203 += '<a href="/meduza/2015/09/28/shapitorbFgFQ4Y7_Z3jaPSRix09Pn5VyrnV5P" target="_blank"><img src="/meduza/2015/09/28/shapitorbFgFQ4Y7_Z3jaPSRix09Pn5VyrnV5Pcki64JcXvjIyzlgYXerh3yMMgY8DB5vleYA" width="990" height="90" alt="" border=0></a>';
変更されたコンテンツを提供して終了します。
6.ブラウザー自体が必要な呼び出しを行い、それぞれに対してステップ1からのすべてが完了します
スクリプト構成セクション $CONF = array( 'mask_urls' => array( 'prefix' => '/meduza/2015/09/28/shapito',
繰り返しになりますが、これはコンセプトです-本番環境では使用できません ! サーバーから匿名プロキシを作成しますadbb.php <?php $CONF = array( 'mask_urls' => array( 'prefix' => '/meduza/2015/09/28/shapito',
adbb_functions.php <?php function adbb_encrypt($data, $encrypt_conf) { $iv = $encrypt_conf['iv']; return rtrim(strtr( base64_encode(mcrypt_encrypt($encrypt_conf['cipher'], $encrypt_conf['key'], $data, $encrypt_conf['mode'],$iv)), '+/', '-_'), '='); } function adbb_decrypt($data, $encrypt_conf) { $encrypted = base64_decode(str_pad(strtr( $data, '-_', '+/'), strlen( $data ) % 4, '=', STR_PAD_RIGHT)); return mcrypt_decrypt( $encrypt_conf['cipher'], $encrypt_conf['key'], $encrypted, $encrypt_conf['mode'], $encrypt_conf['iv'] ); } function adbb_translate_cookie_values($set_cookies) { $keys = array(); foreach ($set_cookies as $sc) { if ($pos = strpos($sc, ';')) { $keys[] = substr($sc, 0, $pos); } else { $keys[] = $sc; } } return $keys; } function adbb_get_headers_from_curl_response($headerContent) { $headers = array();
プライマリログインリンク自体を取得するには、同じ構成で実行します
adbb_encrypt('http://ads.XXX.ru/XXXX/prepareCode?pp=g&ps=bugf&p2', $CONF['encrypt']);
ご清聴ありがとうございました。