暮雨丶 发表于 2021-9-10 14:31:40

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

前言

前段时间群里分享了一个小游戏,多次怀疑本身的眼睛以后,尝试去写个外挂。中心的过程算是一个典范的分析网页源码的步骤,于是整理这篇文章分享出来。
游戏传送门:找方块
具体工作

1 打开资源面板

通过 f12/ctrl + shift + i/cmd + shift + i 打开检查,点击 sources 标签打开资源面板。
https://p5.toutiaoimg.com/large/pgc-image/f73f130d537446f78a37d1e9126c48a5
2 相识体系结构

展开 res 文件夹,可以看到,整个小游戏的资源文件很少,重要就是相关图片以及一个负责重要逻辑的 game.min.js 文件。
https://p5.toutiaoimg.com/large/pgc-image/aa764fec560c436ab23ffb5b24fafa16
3.定位判断逻辑

有群友想通过自动获取颜色不同的地区并点击来实现外挂步伐,一开始我的思路也是这样,后来变了,如果我能找到游戏竣事的判断逻辑,并让它不停保持成功,即可实现“无敌”。
于是我就通过以下几个步骤来定位游戏竣事的判断部分。
3.1 格式化源文件

https://p5.toutiaoimg.com/large/pgc-image/8ee6db370cb2431a8a0407b67514b91b
在资源面板中点开 game.min.js 文件,通过图中所示,点击 Pretty print 格式化源代码,得到如下效果。
https://p6.toutiaoimg.com/large/pgc-image/841b319c8fc644ecbf674e848e30e7ec
为了更好的查找代码,点击代码地区 cmd + a/ctrl + a 全选所有代码,拷贝至 vs code 中。vsc 里 cmd + n/ctrl + n 任意新建一个文件粘贴就行,无需保存。然后 cmd + k, m/ctrl + k, m 选择 javascript 格式,高亮一下代码。也可以点击图中右下角的 plain text 进行切换。
https://p5.toutiaoimg.com/large/pgc-image/656f0f93606a43969bf81c1f71b4b646
3.2 查找资源链接

通过 cmd + f/ctrl + f 在源文件中搜刮游戏竣事的资源文件,可以得到如下效果。
https://p5.toutiaoimg.com/large/pgc-image/9588ed0ce0854e6e8f194528d6446856
通过这个变量定位出 gameEndAction 方法。
https://p5.toutiaoimg.com/large/pgc-image/12117df7d8dc49d8bc5ee416b575aefe
通过上面的方法,定位到判断逻辑处。
https://p26.toutiaoimg.com/large/pgc-image/bffba4c551f54a2fbe0869be700fc92a
分析一下 judgeIsBlockTouch 即可发现这里便是判断逻辑的关键处。
4 拦截游戏

在 judgeIsBlockTouch 方法中增加一个断点,并任意点击一次游戏地区,这时我们就已经走到了这个方法中了。
https://p9.toutiaoimg.com/large/pgc-image/db596aa308644d3f89b69291f203a450
分析该方法我们可以知道,方法逻辑是通过判断点击位置是否在矩形地区中,来决定玩家是否过关,我们把成功的后实行的代码拿出来,并在 console 中运行一次。
https://p6.toutiaoimg.com/large/pgc-image/aabe4c3035484d68ae289c40de73810e
停止 debugger 你会发现,即使我们点击的不是正确位置,我们依旧进入了下一关。此时,我们便已经“无敌”了。
5 重写判断逻辑

到上一步,我们还只能每次点击以后,通过在 console 中实行一次成功逻辑来绕过判断,这样的外挂又怎么行呢,所以我们要想办法修改游戏内部运行逻辑,也就是 judgeIsBlockTouch 方法。
而想要修改它,我们得知道它定义在哪个对象里的。
一开始我是找到控制整个游戏的对象,也就是 cc 上,可是发现里面的逻辑需要花时间进行梳理。然后我决定从 judgeIsBlockTouch 定义上进行分析。沿着代码不停上滑,可以看到它是定义在 GameLayer 上的。
我们在控制台中打印这个对象,发现是个方法,那么即使我们不知道 cc.Layer.extend 里做了什么,我们也知道 GameLayer 是个类方法了。
https://p9.toutiaoimg.com/large/pgc-image/d95c89425d274fa0ad098957ce685d3d
我们现在有两种方式来修改 judgeIsBlockTouch 方法。第一种是修改 cc 上的实例对象,这个不好拿,得逐步分析。第二种,直接修改 GameLayer 这个类。尝试一下获取这个方法。
https://p5.toutiaoimg.com/large/pgc-image/8fefd5450f6644a0a72c726f6834c040
拿到了就好办,实行下面的代码,然后验证。
https://p3.toutiaoimg.com/large/pgc-image/ca87c10efb9d44ec97fc36dfa8f210c1
OK,至此,在游戏里任意点击都能过关了
文章转载:乐字节 交流裙:933-873-310 备注:75
总结

写这篇文章,只是为了分享这个外挂实现过程中的分析过程,里面的原理放到其他体系中也是通用的。这个分析方式,也是我遇到一些比较难复现的 bug 时,在生产中使用的分析方法,各位不要乱用哦

安全界的泥石流 发表于 2021-9-11 12:07:18

转发了
页: [1]
查看完整版本: 手把手教你五分钟扒个源码写个无敌外挂