雖然遲了一天,但還是祝各位小伙伴端午安康,
最近因為端午節到來,物業舉辦了一個網頁小游戲,得分最高的前 N 名可以拿到獎品,
閑來無事的我參加了一下,發現自己實在是太菜了,總是玩不過別人,于是轉變思路,研究看看這個小游戲是如何提交分數的,
抓包
通過 Charles 進行抓包,發現游戲結束時會呼叫 commit 介面提交分數,那這就好辦了,因為我們可以利用 Postman 偽造請求,從而達到 “不戰而勝”,
如果想了解如何抓包,可以在評論區留言,有需要的話再寫一篇抓包教程,
介面分析
抓包知道哪個介面還遠遠不夠,因為介面最重要的還是請求引數,所以我們需要弄清楚每個引數的代表的意思,一般可以引數名可以猜出來,
特殊引數
一個特殊的引數 sign,這個引數是簽名的意思,由其他引數計算得到,作用是防止請求引數被篡改,因為引數發生變化,計算出來的簽名也是不同的,服務端經過相同的計算,可以校驗引數與簽名是否匹配,
因為 sign 是計算得到的,我們偽造請求同樣需要計算 sign,那么就要知道簽名演算法,如何知道?我們只能通過網頁原始碼查看,
現在的網頁原始碼大部分都是經過打包工具壓碩訓淆,我們想要閱讀是一件比較困難的事情,但是我們只需要看提交分數的部分即可,如何快速定位代碼位置?答案是通過搜索字串來定位,
打包工具混淆代碼只能修改變數名,而字串是不能被混淆的,我們通過字串搜索就可以稍微快速找到對應位置的代碼,比如通過介面名 'commit'、引數名 'sign' 進行搜索,查看簽名演算法的邏輯,
請求頭
很多人偽造請求,都不注意請求頭的引數,例如 User-Agent 用戶代理,即用戶使用的瀏覽器標識、Cookie 一般會攜帶用戶資訊,用于區分用戶,
既然要偽造請求,那就要偽造的真實一點,將抓包中顯示的請求頭都復制到 Postman 中(Content-Length除外),
發起請求
一切都準備就緒,那么就可以開始利用 Postman 發起請求,因為涉及簽名計算,我們可以利用 Postman 提供的 Pre-requset Script 撰寫請求前的計算邏輯,并將計算結果寫入環境變數中,然后再使用 {{}} 進行取值,
將 sign 保存到環境變數中
pm.environment.set('sign', sign);
變數的使用 
到這里就可以發起請求了,從而達到 “不戰而勝” 的效果,當然了,這種做法破壞了游戲的公平性,是不可取的,不過我們可以從中吸取經驗,多思考問題,提升自身的技能,
思考
換位思考一下,假如這個小游戲是我們自己開發的,那么請你思考這幾個問題,
- 我們的應用該如何提高安全性,如何防止原始碼被輕易解讀?
- 我們如何去發現識別這類偽造請求?
歡迎評論區留言討論,也可以 wx 搜索 fe_develop6 一起在群里學習討論,最后別忘了關注我,點贊來一波哦~
注意事項
- 該方法并不適用所有游戲,請自行分辨;
- 本文僅供學習,如產生不良后果,本文概不負責;
- 轉載請標明出處 技術人玩小游戲,如何“不戰而勝” @前端develop,
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287816.html
標籤:其他
上一篇:逃跑吧少年拆包亂碼問題的解決
