引言
最近跳一跳遊戲真是風靡了整個朋(I)友(T)圈,身邊有很多小夥伴嘗試了各種語言寫跳一跳的指令碼,而我由於比較懶,所以只嘗試py版本的指令碼實驗,然後又研究了一下POST直接提交分數的過程,在這個過程中,對抓包這件事兒產生了濃厚的興趣。
抓包
首先說說自己的抓包把,前端攻城獅一枚,所以採用的代理工具是阿里的 AnyProxy
主要特性包括:
基於Node.js,開放二次開發能力,允許自定義請求處理邏輯
支援Https的解析
提供GUI介面,用以觀察請求
這裡簡單描述一下如何使用anyproxy抓取https的包
1. npm install -g anyproxy
2. anyproxy-ca // 生成https ca證書
3. 手機下載生成的本地ca證書並新增信任(IOS需要使用Safari開啟下載證書的地址)
4. anyproxy -i 啟動AnyProxy並解析所有https的服務
複製程式碼
具體細節這裡就不擴充開了,百度能找到很多資料。 然後由於放在本地代理抓包每次都要重新啟動AnyProxy並且需要保證和電腦在同一個區域網下非常麻煩,所以我將AnyProxy部署到了伺服器上。 伺服器上的部署和本地沒什麼區別,無非就是需要使用pm2去管理一下AnyProxy
pm2 start anyproxy -x -- -i [這裡可以加上anyproxy其他的引數,比如埠相關]
複製程式碼
這裡有一個問題就是,AnyProxy有一個Web GUI可以看到抓取的包,但是沒有任何認證,所以任何人都可以登入這個介面看到使用這個代理的包資訊,這是一件非常不安全的事情,所以如果放在服務端還是對AnyProxy做一下二次開發比較好。
某遊戲
簡單介紹一下這個遊戲:
一款單機類的遊戲,可以根據離線時間獲取離線收益。(夠簡單吧...)
包分析
其實沒啥好分析,因為獲取離線收益的包一眼就能發現,由於是一款單機遊戲,那麼與伺服器進行互動的就比較少,所以一眼就能發現這樣的一個請求。
一看就能發現這是請求的一個時間戳,那簡單的分析一下,這個遊戲應該是用這個伺服器的時間和本地的時間作比較然後計算出離線時間的(當然修改本地時間這種做法已經被作者考慮到了),那麼是不是意味著我可以偽造一個這樣的時間戳就能產生一個高額的離線收益呢!偽造請求
這種請求比較容易偽造,不需要身份驗證,沒有加密資料,需要完成的就是偽造host然後轉發一個虛假的時間戳。
偽造host
最簡單的方式:
1. vim /etc/hosts // 開啟hosts檔案
2. 在最後一行加入 伺服器IP 指向域名
複製程式碼
這時候如果從伺服器訪問www.hko.gov.hk
的話必然會先解析到本地的host
,然後跳轉到伺服器啟動的Server
所以這時候我選擇用node起一個Simple Server
, GET
請求的地址便是上圖的/cgi-bin/gts/time5a.pr
,簡單的server如下
const server = require('server')
const { get } = server.router
server({ post: 80 }, {
get('/cgi-bin/gts/time5a.pr', ctx => '0x191234567890')
})
複製程式碼
這裡偷懶了,用了一個第三方的庫快速生成一個Simple Server
,沒用使用http來createServer,並且直接使用了80埠。如果80埠被佔用的話可以考慮使用結合Nginx處理。
成果
好了一切準備就緒,來看一下最終的成果吧。
成功了~果然成功了~離線收益成功結算了,但是有上限的數額,好像是6個小時,不過可以無限刷...無限刷...
其他實踐
這只是一個很簡單的實踐,在做這個實踐之前還有一個大膽的想法。在跳一跳火的同時,發現口令紅包莫名火了起來,這時候就思量著如何能夠提取口令紅包的資料然後偽造呢(壞笑ing...) 思路大概這樣
- 通過代理捕獲小程式口令紅包介面(https)
- 提取其中需要轉化成語音的欄位
- 通過文字轉化語音的介面偽造報文POST
唔...顯然我是失敗了,不然我現在就躲在後面悶聲發大財了...應該不違法把各位親,畢竟我搶的是紅包呀~~不過有興趣的人可以再嘗試嘗試,如果能捕獲到所有的紅包...那收入還是有些可怕的...
總結
總的來說這個過程是比較輕鬆Esay的,但貴在思考和探索的過程,通過也從一個方面給我這個前端攻城獅打響了警鐘,原來抓包偽造是一件如此可怕的事情,對於網路安全的防範需要特別的注意才行,不然輕則諸如這個小遊戲,重則涉及資金相關的,這可不是鬧著玩的。