摘要:轉自自己在開源中國上的博客前言公司群里經常有人會發一些微信小游戲,每次下面都會跟好多曬分截圖。因為前端攻城獅有前端攻城獅的玩法。取消斷點繼續游戲。這時在手機微信里訪問游戲的鏈接,在端里就可以看到手機發出的請求。
轉自自己在開源中國上的博客:https://my.oschina.net/u/7247...
前言公司群里經常有人會發一些微信小游戲,每次下面都會跟好多曬分截圖。比如這個《看你有多色》的考察眼力的(瞎眼)小游戲。
別人的截圖都是25分左右,還有30分以上的。自己玩了兩把,20分都沒上,于是只能悻悻的悶聲當沒看見。但如果你是一名前端攻城獅,并且還有一臺電腦在手邊,那就大不一樣了。因為:前端攻城獅有前端攻城獅的玩法。
準備材料手機一個(廢話)
電腦一臺
手機和電腦都可以連的WIFI
研究源碼首先當然得知道游戲本身是怎樣的玩啦。用瀏覽器打開游戲頁面,打開 F12。
可以看到這個頁面內嵌了一個 iframe,真正的游戲頁面其實是這個 http://9g.game6.cn/ssssds/gam...,打開之。
DOM 結構并不是很復雜。下面引入了一個 main.min.js,估計就是控制游戲的主代碼了。但也不著急看代碼內容,先點擊開始游戲。
游戲開始倒計時。不如先把這個時間改長點吧。因為每次時間刷新這個 DOM 元素都會刷新,那么檢測這個 DOM 元素的更改肯定能找到控制時間相關的代碼。審查元素,打開右鍵菜單,Break on -> subtree modifications
斷點斷到了 libs.min.js 里。代碼是被壓縮過的,名字是 libs 那應該是個第三方庫。
所以具體什么意思不用管,直接在調試工具的右側調用棧(Call stack)列表里找到最上層的用戶代碼(main.min.js)打開。
文件名雖然以 min.js 結尾,但是縮進還在。當然我們也可以點擊左下角的 {} 按鈕進一步美化代碼。
可以看到 DOM 操作用的是類似 jQuery 的庫。代碼邏輯也很簡單,如果當前游戲暫停什么都不做。如果沒有暫停,時間減一。如果時間小于 0,游戲結束,否則輸出當前時間。
那么要做的時間很簡單,回到 main.min.js,在函數頭部加上一句
this.time = 60;
保存,把 DOM 斷點取消,繼續游戲。可以看到時間固定在了 59 不再減少。
當然這樣做只是固定游戲時間,不如直接改分簡單暴力。
每次點擊正確方格。左上角的得分會被改變。如上類似操作可以容易的找到控制分數的代碼。
檢查 得分: X 這個 DOM 元素,右鍵,選擇 Break on -> subtree modifications。點擊一個正確的方格,斷點會斷到被壓縮過的 jQuery 代碼內部。右側調用棧列表里選擇第一個 main.min.js 所對應的函數 renderInfo。
很顯然這個 this.lv 就是當前的得分。那么要做的事情也很簡單,直接在 Console 里把 this.lv 的值改為你想要的值。
取消斷點繼續游戲。得分沒有變化。別著急,那是因為你只是改了外面的值,而寫入 DOM 元素中的值已經傳入了 jQuery 庫內部了。當你再次得分時,分數就會變為你想要的值。
分數被改掉了,圖還是一樣的瞎眼。有沒有什么辦法能直接標識出正確的方格呢?這時我們就必須看游戲的內部實現邏輯了,需要看看這些方格是怎么被畫出來的。
于是這次直接對大方格(#box)打斷點,點擊正確的方格。
斷點依舊是斷到了 jQuery 里面。調用棧列表回到最后用戶代碼 renderMap 里。
可以看到這里是在用多個 span 標簽畫方格區域。所有的 span 標簽都是相同的。然而這些方格至少得有 background-color 或者一個特別的 class 才對。
單步進入下面的 this.api.render 方法。
可以看到這個方法就是在給 span 標簽添加背景色了。可以看到這些 span 分為兩種 data("type", "a") 和 data("type", "b")。其中 type: b 的背景色用的是隨機生成的顏色,而 type: a 的背景色是基于 type: b 的顏色基礎生成的。那這個 type: a 是不是就代表正確方格的意思呢?
我們去看看程序究竟是怎樣判斷點擊的方格是否正確的。直接審查正確方格的元素,檢查他們綁定的 click 事件。
事件名右側有綁定事件的源代碼位置,點擊進入。
對于使用第三方庫綁定的事件,代碼經常會跳轉到第三方庫內部代碼里,不過這次我們運氣不錯。可以看到:代碼首先拿出了設置在元素上的 data("type"),如果為 a 則調用 e.nextLv。我們猜的沒錯。
那么事情就好辦了。看看原本這些 span 標簽就有個 5px 的 border。給這個 border 改個顏色好了呀。
回到之前的 render 函數里,給 type: a 的 span 標簽的邊框改個顏色:
span.css("border-color", "black")
繼續游戲,正確的方格有了顯眼的邊框,這下不會再瞎眼了。
實行魔改這下萬事俱備,就差把我們的改動放到手機端了。這時我們要請出移動端調試神器 Charles。
如圖所言,Charles 是一個跨平臺的網頁調試代理工具。Windows 上有免費的 Fiddler,然而 Fiddler 是用 .NET 寫的,在 macOS 上不太玩的轉。跨平臺(Java 寫)的 Charles 卻是收費軟件,有錢的可以支持一下原作者開發,沒錢的也可以簡單的用你懂的方式搞定。
我們要做的事情就是啟用手機代理到你的電腦上。首先查看電腦 IP。macOS 有個簡單的查看本機內網 IP 的方法:按住 Option 鍵點擊系統菜單欄上的 WiFi 圖標(當然你非要 ifconfig 也不是不可以)
保證 Charles 為打開狀態。在手機上,打開系統設置,將 WiFi 的代理設置為你電腦的 IP,端口號 8888
手機上隨便進行一個需要網絡請求的操作,Charles 會要求你確認是否允許接入代理請求,點擊 Allow 允許此操作。
這時在手機微信里訪問游戲的鏈接,在 PC 端 Charles 里就可以看到手機發出的 HTTP 請求。
注意,手機端瀏覽器自己的緩存經常讓服務器返回 204 或者根本不發出請求。這時可以嘗試開啟 Charles 的 Tools -> No Caching 并多刷新頁面解決,實在不行就得清除對應 APP 的數據。
找到需要修改的文件 main.min.js,右鍵,選擇 Breakpoints
這時就給這個文件 URL 的請求打了斷點。手機上刷新頁面。首先會收到 Request,點擊 Execute 放行。
然后會受到 Response。這時點擊右側的 Edit Response,然后點擊下面的 JavaScript,善用查找功能把代碼改掉
點擊 Execute,爽去吧
截圖跟同事顯擺一下。如果他問你圖是不是 P 的,那你可以詛咒發誓絕對沒有。本來就是純手點的嘛~~~
全文完
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94955.html
摘要:接下來,在支付寶小程序開發者工具中打,不出意外能跑起來一個電商支付寶小程序雛形。地址以上是我這個攻城獅對使用轉換原生微信小程序為支付寶小程序的一次微不足道的實踐。 showImg(https://segmentfault.com/img/bVbnCCN?w=1818&h=931);↑開局一張圖,故事全靠編↑ 從一個需求說起 作為底層的程序猿,哦不,我連猿都算不上,混的好的叫碼神,混得一...
摘要:開局一張圖,故事全靠編是啥變色龍又是啥自從有小程序以來,小程序的第三方框架便孕育而生,從原始時代的只基于微信小程序多如今多端統一開發框架,可以說前端技術從年到年又發生了天翻地覆的變化。 Created 2019-4-6 21:57:17 by huqi Updated 2019-4-7 22:54:55 by huqi showImg(https://segmentfault.c...
摘要:根據當時的情境,是在微信開發者工具中刪掉該小程序然后重新載入就解決了,大家給出的結論是微信小程序開發者工具的。 Created 2019-4-2 22:17:34 by huqiUpdated 2019-4-2 23:17:34 by huqishowImg(https://segmentfault.com/img/bVbqOLH?w=1526&h=818); ↑開局一張圖,故事全靠編...
摘要:裝飾器的使用符合了面向對象編程的開放封閉原則。三簡單的裝飾器基于上面的函數執行時間的需求,我們就手寫一個簡單的裝飾器進行實現。函數體就是要實現裝飾器的內容。類裝飾器的實現是調用了類里面的函數。類裝飾器的寫法比我們裝飾器函數的寫法更加簡單。 目錄 前言 一、什么是裝飾器 二、為什么要用裝飾器 ...
摘要:來吧,先做個簡單的不算自我介紹的介紹吧。我本一名普通的打工仔,自高中畢業后就出來打工。從服務員到工廠打工,已經年了。于是在年月份,我開始了根據我的興趣進行學習知識。 來吧,先做個簡單的不算自我介紹的介紹吧。我本一名普通的打工仔,自高中畢業后就出來打工。從服務員到工廠打工,已經4年了。在這四年里,我漸漸發覺為什么領導就得讓我仰視,我在他們這些老板當中我變得那么渺小。 于是在2016年...
閱讀 1117·2021-10-09 09:43
閱讀 18472·2021-09-22 15:52
閱讀 1058·2019-08-30 15:44
閱讀 3049·2019-08-30 15:44
閱讀 3243·2019-08-26 14:07
閱讀 903·2019-08-26 13:55
閱讀 2565·2019-08-26 13:41
閱讀 3086·2019-08-26 13:29