手把手教你五分钟扒个源码写个无敌外挂

大家好,我是若川。源码共读《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.mzph.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…

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周源码&…

第 8 章 容器网络 - 061 - flannel 的连通与隔离

flannel 的连通与隔离 测试 bbox1 和 bbxo2 的连通性: bbox1 能够 ping 到位于不同 subnet 的 bbox2,通过 traceroute 分析一下 bbox1 到 bbox2 的路径。 1) bbox1 与 bbox2 不是一个 subnet,数据包发送给默认网关 10.2.9.1&#…

计算机视觉笔记本推荐_视觉灵感: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…

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…

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.…

华为首款鸿蒙设备正式入网,华为首款鸿蒙设备正式入网:麒麟9000+挖孔全面屏,价格感人!...

作为国内电子产品领域的巨头之一,华为这两年的快速发展是大众有目共睹的,除了手机业务外,华为的平板业务同样有亮眼表现,无独有偶,在近期各方媒体的不断披露之下,又有一款华为平板被基本确认,这…

myeclipse深色模式_完善深色模式的调色板

myeclipse深色模式Apps largely have a limited color palette which may already map well to dark mode. However, some colors produce optical vibrations when viewed on a dark background, straining the user’s eyes. So, certain apps need to map to a slightly des…

微软悄悄发布了 Web 版的 VsCode

大家好,我是若川,最近组织了源码共读活动《1个月,200人,一起读了4周源码》,感兴趣的可以加我微信 ruochuan12 参与,长期交流学习。在8月31日,微软发了一个介绍他们新发布的功能的帖子介绍&#…

figma设计_设计原型的最简单方法:Figma速成课程

figma设计It doesn’t matter if you haven’t used any prototyping tools before or you’re transitioning from other ones (like Sketch, Adobe XD); This guide is for beginners and professionals alike. So for a university assignment, I had to prepare a presenta…

初中级工程师如何快速成长和寻求突破

大家好,我是若川,最近组织了源码共读活动《1个月,200人,一起读了4周源码》,已经有超50人提交了笔记,群里已经有超1200人,感兴趣的可以加我微信 ruochuan12 参与。前言写这篇文章的初衷是因为看到…

ajax使用html()后样式无效,jquery.ajax使用字符串拼接后内联css样式失效

问题所在:是这样的,我使用ajax调用了一串json数据,使用字符串拼接的方法动态插入div容器.结果css并没有对动态插入的内容加css样式.代码描述:css使用的内联,在head部分, jquery使用外联,在body后.我尝试过:$(function(){}) //入口函数加载window.onload function(){} //原生do…