手把手教你五分鐘扒個源碼寫個無敵外掛

大家好,我是若川。源碼共讀《1個月,200+人,一起讀了4周源碼》?活動進行到第五期了,歡迎點鏈接加我微信 ruochuan12 報名參加。

前言

前段時間群里分享了一個小游戲,多次懷疑自己的眼睛以后,嘗試去寫個外掛。中間的過程算是一個典型的分析網頁源碼的步驟,于是整理這篇文章分享出來。

游戲傳送門:找方塊

具體工作

1 打開資源面板

通過?f12/ctrl + shift + i/cmd + shift + i?打開檢查,點擊?sources?標簽打開資源面板。

2 了解系統結構

展開?res?文件夾,可以看到,整個小游戲的資源文件很少,主要就是相關圖片以及一個負責主要邏輯的?game.min.js?文件。

3.定位判斷邏輯

有群友想通過自動獲取顏色不同的區域并點擊來實現外掛程序,一開始我的思路也是這樣,后來變了,如果我能找到游戲結束的判斷邏輯,并讓它一直保持成功,即可實現“無敵”。

于是我就通過以下幾個步驟來定位游戲結束的判斷部分。

3.1 格式化源文件

在資源面板中點開?game.min.js?文件,通過圖中所示,點擊?Pretty print?格式化源代碼,得到如下效果。

為了更好的查找代碼,點擊代碼區域?cmd + a/ctrl + a?全選所有代碼,拷貝至?vs code?中。vsc?里?cmd + n/ctrl + n?隨便新建一個文件粘貼就行,無需保存。然后?cmd + k, m/ctrl + k, m?選擇?javascript?格式,高亮一下代碼。也可以點擊圖中右下角的?plain text?進行切換。

3.2 查找資源鏈接

通過?cmd + f/ctrl + f?在源文件中搜索游戲結束的資源文件,可以得到如下結果。

通過這個變量定位出?gameEndAction?方法。

通過上面的方法,定位到判斷邏輯處。

分析一下?judgeIsBlockTouch?即可發現這里便是判斷邏輯的關鍵處。

4 攔截游戲

在?judgeIsBlockTouch?方法中增加一個斷點,并任意點擊一次游戲區域,這時我們就已經走到了這個方法中了。

分析該方法我們可以知道,方法邏輯是通過判斷點擊位置是否在矩形區域中,來決定玩家是否過關,我們把成功的后執行的代碼拿出來,并在?console?中運行一次。

中斷 debugger 你會發現,即使我們點擊的不是正確位置,我們依舊進入了下一關。此時,我們便已經“無敵”了。

5 重寫判斷邏輯

到上一步,我們還只能每次點擊以后,通過在?console?中執行一次成功邏輯來繞過判斷,這樣的外掛又怎么行呢,所以我們要想辦法修改游戲內部運行邏輯,也就是?judgeIsBlockTouch?方法。

而想要修改它,我們得知道它定義在哪個對象里的。

一開始我是找到控制整個游戲的對象,也就是?cc?上,可是發現里面的邏輯需要花時間進行梳理。然后我決定從?judgeIsBlockTouch?定義上進行分析。沿著代碼一直上滑,可以看到它是定義在?GameLayer?上的。

我們在控制臺中打印這個對象,發現是個方法,那么即使我們不知道?cc.Layer.extend?里做了什么,我們也知道?GameLayer?是個類方法了。

我們現在有兩種方式來修改?judgeIsBlockTouch?方法。第一種是修改?cc?上的實例對象,這個不好拿,得逐步分析。第二種,直接修改?GameLayer?這個類。嘗試一下獲取這個方法。

拿到了就好辦,執行下面的代碼,然后驗證。

OK,至此,在游戲里任意點擊都能過關了。

總結

寫這篇文章,只是為了分享這個外掛實現過程中的分析過程,里面的原理放到其他系統中也是通用的。這個分析方式,也是我遇到一些比較難復現的 bug 時,在生產中使用的分析方法,各位不要亂用哦,造成的后果作者概不負責。

最近組建了一個江西人的前端交流群,如果你是江西人可以加我微信?ruochuan12?私信 江西?拉你進群。


推薦閱讀

1個月,200+人,一起讀了4周源碼
我讀源碼的經歷

老姚淺談:怎么學JavaScript?

我在阿里招前端,該怎么幫你(可進面試群)

·················?若川簡介?·················

你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列》多篇,在知乎、掘金收獲超百萬閱讀。
從2014年起,每年都會寫一篇年度總結,已經寫了7篇,點擊查看年度總結。
同時,活躍在知乎@若川,掘金@若川。致力于分享前端開發經驗,愿景:幫助5年內前端人走向前列。

識別方二維碼加我微信、拉你進源碼共讀

今日話題

略。歡迎分享、收藏、點贊、在看我的公眾號文章~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275455.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275455.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275455.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kubernetes 1.14重磅來襲,多項關鍵特性生產可用

走過了突飛猛進的2018年,Kubernetes在2019年終于迎來了第一個大動作:Kubernetes 1.14版本的正式發布!Kubernetes 本次發布的 1.14 版本,包含了 31 項增強,其中 10 項為 GA,12 項進入 beta 試用階段&#xf…

中英文

http://it.freesion.com/3220/4888028/13606306/#轉載于:https://www.cnblogs.com/yqskj/articles/2082326.html

open ai gpt_讓我們來談談將GPT-3 AI推文震撼到核心的那條推文

open ai gpt重點 (Top highlight)“設計師”插件 (The ‘Designer’ plugin) A couple days ago, a tweet shared by Jordan Singer turned the heads of thousands of designers. With the capabilities of GPT-3 (from OpenAI), he shared a sample of what he was able to c…

我歷時3年才寫了10余篇源碼文章,但收獲了100w+閱讀

你好,我是若川。最近來了一些讀者朋友,在這里簡單介紹自己的經歷,也許對你有些啟發。之前發過這篇文章,現在修改下聲明原創,方便保護版權。最近組織了源碼共讀活動1個月,200人,一起讀了4周源碼&…

android onlescan 參數,Android BLE:從iOS外設廣告時,在onLeScan()回調中檢索服務UUID

我正在使用Nexus 4(4.4 kitkat)作為中央和iPad作為外設.外圍設備有廣告服務.廣告包有一些數據(22字節)的服務UUID.當我嘗試從Android掃描外圍設備時,iPad外圍設備被發現.但是當我嘗試從回調中的scanRecord參數獲取服務UUID時,我找不到它.我得到的是外設發送的20byte數據.當我嘗…

第 8 章 容器網絡 - 061 - flannel 的連通與隔離

flannel 的連通與隔離 測試 bbox1 和 bbxo2 的連通性: bbox1 能夠 ping 到位于不同 subnet 的 bbox2,通過 traceroute 分析一下 bbox1 到 bbox2 的路徑。 1) bbox1 與 bbox2 不是一個 subnet,數據包發送給默認網關 10.2.9.1&#…

Javascript 檢測 頁面是否在iframe中

//檢測是否在iframe中if(self.frameElement ! null && (self.frameElement.tagName "IFRAME" || self.frameElement.tagName "iframe")){parent.parent.location "login.jsp";}轉載于:https://www.cnblogs.com/kenkofox/archive/2011…

寫給前端的算法進階指南,我是如何兩個月零基礎刷200題 等推薦

大家好,我是若川。話不多說,這一次花了幾小時精心為大家挑選了20余篇好文,供大家閱讀學習。本文閱讀技巧,先粗看標題,感興趣可以都關注一波,一起共同進步。前端從進階到入院作者ssh就職于字節跳動基礎工程團…

計算機視覺筆記本推薦_視覺靈感:Mishti筆記本

計算機視覺筆記本推薦The Mishti Notebook is a project close to my heart, wherein I experimented with screen printing techniques at the Print Labs at the National Institute of Design, Ahmedabad. Dating back to the year 2012 when the NID Print Labs was first …

Google工程師:如何看待程序員普遍缺乏數據結構和算法知識?

出處:極客時間《數據結構與算法之美》很多技術人都很迷茫,覺得自己做的項目沒有技術含量,成天就是賣苦力。技術的東西,日新月異,有些人總在忙于追求熱點新技術,東學學、西學學,平時泛泛地看技術…

android guide 中文版,Sky Guide

Sky Guide是一款能讓小伙伴們觀察銀河的手機軟件,尤其是喜歡行星、星座的小伙伴們來講,這款軟件能很好的幫助小伙伴們觀看這些,讓小伙伴們體驗不一樣的觀星樂趣,因此想要觀看的小伙伴們,趕緊來試試吧。軟件介紹&#x…

Kinect for Windows SDK發布

轉載請注明出處為KlayGE游戲引擎,本文地址為http://www.klayge.org/2011/06/17/kinect-for-windows-sdk%e5%8f%91%e5%b8%83/ 前一段時間Microsoft研究院宣布了Kinect for Windows SDK。在眾人的期盼下,Kinect for Windows SDK Beta終于發布了&#xff01…

layui選項卡嵌套選項卡_在ProtoPie中使用嵌套組件構建選項卡欄

layui選項卡嵌套選項卡One of the powerful features of ProtoPie is the ability to build fully portable and interactive UI components. We are going to make use of nested components, SVG icons, and layout constraints to build a tab bar UI component that is sel…

50行代碼串行Promise,koa洋蔥模型原來這么有趣?

1. 前言大家好,我是若川,最近組織了源碼共讀活動《1個月,200人,一起讀了4周源碼》,感興趣的可以加我微信 ruochuan12 參與,長期交流學習。之前寫的《學習源碼整體架構系列》 包含jQuery、underscore、lodas…

如何定位死循環或高CPU使用率(linux)

如何定位死循環或高CPU使用率(linux) 確定是CPU過高 使用top觀察是否存在CPU使用率過高現象 找出線程 對CPU使用率過高的進程的所有線程進行排序 ps H -e -o pid,tid,pcpu,cmd --sortpcpu |grep xxx 得到如下結果,其中線程2909使用了7.8%的CPU. 2907 2913 0.0 ./xxx 2907…

js 用迭代器模式優雅的處理遞歸問題

2019獨角獸企業重金招聘Python工程師標準>>> 什么是迭代器 循環數組或對象內每一項值,在 js 里原生已經提供了一個迭代器。 var arr [1, 2, 3] arr.forEach(function (item) {console.log(item) })實現一個迭代器 var iterator function (arr, cb) {fo…

如何抓取html請求,請求獲取網頁的response,獲取網頁的html 怎么那么慢

HttpEntity multipart builder.build();httppost.setEntity(multipart);long start System.currentTimeMillis();// 發送請求response httpclient.execute(httppost);long end System.currentTimeMillis();System.out.println("查詢upsfreight消耗的時間是(毫秒):&quo…

Serverless 究竟是什么?

大家好,我是若川。說起 Serverless,我想你應該并不陌生,作為一種云開發的架構模式,在近兩年里,伴隨著云原生概念的推廣愈發火爆。作為一名 Serverless 的擁躉,在跟大家推薦的過程中,我經常能看到…

instagram.apk_評論:Instagram Reels vs.TikTok

instagram.apkWith all the attention to the newly debuted Instagram Reels from Facebook and the hilarious, bizarre world of TikTok, here’s a first impression on the two platforms and how they compare from a designer’s perspective.所有人都在關注Facebook新近…

240多個jQuery常用到的插件

概述 jQuery 是繼 prototype 之后又一個優秀的 Javascript 框架。其宗旨是—寫更少的代碼,做更多的事情。它是輕量級的 js 庫(壓縮后只有21k) ,這是其它的 js 庫所不及的,它兼容 CSS3,還兼容各種瀏覽器(IE 6.0, FF 1.5, Safari 2.…