三分鐘基礎:路由器是如何偷偷植入廣告的?

  • 2020 年 2 月 21 日
  • 筆記

閱讀本文大概需要 5 分鐘。

來源:編程技術宇宙

作者:軒轅之風

1

撈油水

「今天的工作累死了,這好色的人類看了這麼多影片,可把我忙的夠嗆」,負責數據轉發的阿斐癱坐在椅子上,沒了精神。

「別抱怨了,咱們所在的路由器就是干這活的,這就是命啊,來抽一支放鬆下」,一旁負責WIFI連接的阿訊遞來了一支香煙。

阿斐接過香煙,掏出打火機點燃,猛吸了幾口。

阿斐和阿訊是路由器中的兩個模組,打出生起就在路由器中工作,一直勤勤懇懇為人類能夠連接互聯網默默工作。

「你要是覺得這工作乾的沒有奔頭,要不咱想個辦法撈點油水?」,阿訊朝阿斐擠了下眼睛。

「咳~~,」,阿斐嗆了幾聲,「撈油水?怎麼個撈法?」

「你看啊,你每天經手那麼多數據包,隨便挑一些HTTP協議傳輸的網頁,在裡面插入一點廣告,咱不就可以賺錢了嗎?」

「啊,這樣啊,這不太好吧,要是被發現了怎麼辦?」

阿訊吐了一個煙圈說到:「怕啥,就是一點廣告,不礙事,這些人類早就習慣了滿屏的廣告了,不差這一點。你要實在擔心,那咱設置一個概率,比如只有20%的網頁插入廣告,這樣就不容易被發現了。」

「聽上去可行,只是不知道具體怎麼操作呢?」,阿斐又問道。

「這樣,咱們分工下,廣告的事情我去負責,我去聯繫下廣告商,至於如何修改數據包插入廣告,你去研究一下,好吧?」

「好嘞!」,說完阿斐和阿訊戳滅了手裡的煙頭,開始分頭行動。

2

網頁篡改

阿斐拿出了前端技術指南,研究了一晚上終於想到了方案,第二天找到阿訊商量。

「訊哥,我有辦法了!」

「哦,這麼快,說說看,什麼辦法?」

「我可以在HTML網頁中直接插入<iframe>標籤,裡面就可以嵌入我們的廣告啦!」,阿斐自豪的說到。

「嗨,就這啊,我還以為你有什麼好的辦法呢!這麼簡單還用你想」,阿訊有點失望。

「怎麼了,這有什麼不對嗎?」

「不是不對,你要考慮咱們的廣告又不是固定一個,你不能這樣固定寫死啊。」

「那簡單,換成<script>標籤,在網頁中插入一段JS程式碼,去咱們的web伺服器動態拉取廣告,就可以靈活管理了,怎麼樣?」

「還是不行,瀏覽器發現跨站腳本訪問會禁止的!」,阿訊再一次否定了阿斐的方案。

「跨站腳本?這是什麼意思?」

「你回去再研究研究吧」,阿訊說完就離開了。

原先興高采烈的阿斐一下子像泄了氣的皮球,本以為可以大功告成沒想到被潑了一盆冷水。

阿訊走後,他又搬出來前端技術指南,打算研究一下這個跨站腳本是個什麼意思。

半晌過去,阿斐總算弄懂了,隨即也想出了新的辦法,下午又找到了阿訊。

「迅哥,我又有辦法了。瀏覽器只會限制<script>中的JS程式碼,但不會限制通過外部引入的JS哦」

「外部引入,什麼意思?」,

「把我們的程式碼寫在單獨的文件中,然後像這樣引入到原網頁中,就可以搞定了」,阿斐一邊說,一遍給阿訊畫了一個示意圖:

<html>  <head>    <script src="http://xx.xx.xx.xx/xx/x.js"></script>  </head>  <body>    ......  </body>  </html>

「嗯,剛好我這邊聯繫了一個淘貝網的廣告,咱們來試一試」。

3

302重定向

按照這種辦法,阿斐和阿訊開始了他們撈油水的嘗試。

阿斐在數據轉發的時候,遇到HTTP協議的數據包,就看一下Content-Type是不是text/html,如果發現傳輸的內容是html網頁,就在<head>標籤中插入一個外部引用<script>,通過這個外部的JS腳本動態的生成一個<iframe>載入他們的廣告。

很快,阿訊就統計到了廣告的拉取數據和點擊,看著數字蹭蹭的增長,他倆高興壞了。

阿斐和阿訊靠著修改數據包插入廣告賺得盆滿缽滿,不知不覺就過了一個月,意外卻發生了。

這一天,阿訊急匆匆的找到阿斐,「阿斐,最近廣告拉取和點擊數據直線下滑啊,什麼情況啊?」

「難道我們插入在網頁中的內容被安全軟體發現了?別著急,我想想辦法」,阿斐開始思考對策。

思考一會兒後,阿斐打了一個響指,「有了!咱們不修改HTML網頁!修改它引用的JS文件」

阿訊一臉問號,沒太聽懂,「修改JS文件,什麼意思?」

「迅哥,你看,現在的網頁一般都會引用很多JS文件,比如JQuery這種公共的前端庫程式碼,咱們要是在這個JQuery文件中做點手腳,你想想呢?」,阿斐一邊說一邊挑了挑眉毛。

「你小子,腦子挺靈光嘛!挺不錯的想法,我給你再加一招」

「哦,還有什麼招數,願聞其詳」

「你也別每次修改數據包了,麻煩還容易出錯,要不提前把修改後的文件準備好,到時候遇到對應文件的請求,直接用一個302重定向,豈不是更省事?」,阿訊說完拍了拍阿斐的肩膀。

「302跳轉?我怎麼沒想到,佩服!我這就修改下方案」

當天,阿斐就修改了方案,很快就見效,廣告的拉取數據又漲回來了。

晚上人類已經睡了,兄弟倆好好的慶祝了一番,原以為在路由器幹活是一件艱苦差事,沒想到是個肥差,兩人喝了個酩酊大醉 ?

4

HTTPS

這美滋滋的生活仍然沒有過太久,沒出半年,廣告費又開始銳減。

「阿斐啊,咱們的方案是不是又被發現了?」,阿訊又找到了阿斐。

「訊哥,我也正想找你說呢,最近HTTP協議的數據包太少了,很久才能碰到。」

阿訊不相信,觀察了好一會兒,確實發現HTTP協議的流量少了許多。

「我還是不太相信,人類怎麼可能不上網,這其中一定有詐!難道是他們換了埠,不用80埠了?」,阿訊在一旁自言自語。

「不大可能吧?」

「有了,阿斐,你留意下原來那些網站的IP地址,看看他們現在的流量有沒有在其他埠上去」

按照阿訊的建議,阿斐開始留意起幾個經常訪問的網站IP地址,果然,80埠的流量沒有了,另外一個埠的流量倒是多了起來。

「訊哥,他們果然換了埠!你真聰明!」

「哈哈,快告訴我他們換什麼埠了?」,聽到好消息的阿訊一下高興起來。

443

「嗯,知道了埠就好辦了,調整下關注目標策略就好,居然跟我們玩起了躲貓貓」

「等一下訊哥,你過來看看,這數據好像不是HTTP協議,怎麼看不太懂啊,難道被加密了?」

「納尼???」