三分鐘基礎:路由器是如何偷偷植入廣告的?
- 2020 年 2 月 21 日
- 筆記
來源:編程技術宇宙
作者:軒轅之風
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協議,怎麼看不太懂啊,難道被加密了?」
「納尼???」