U3D游戏《跳舞的线》破解详细教程
本帖最后由 CrazyNut 于 2018-12-2 23:22 编辑前言
https://static.52pojie.cn/static/image/hrline/4.gif
先提两个问题:
1.Dnspy怎么可以更方便的搜索字符串,我发现只能在当前脚本里面搜内容,并不知道怎么直接搜dll里面的方法名
2.有没有什么办法可以动态调试
膜拜一下各位大佬
https://static.52pojie.cn/static/image/hrline/4.gif
《跳舞的线》这个游戏用了u3d的Mono打包方式,不加密的话反编译出来就和源码一样【按理说想怎么改游戏就怎么改】
但是脚本太多,要找到关键的脚本就需要去猜测作者的思维,作者对脚本的命名方式,找的到脚本怎么好说,找不到只能干瞪眼
因为自己也在用U3D来开发,所以我这篇文章主要说破解时候的思路,代码修改方面就不详细解释
https://static.52pojie.cn/static/image/hrline/4.gif
进入正题
https://static.52pojie.cn/static/image/hrline/4.gif
准备工具
Dnspy,Androidkiller,一款能打开apk的压缩工具
一点点的英语基础和一点点的语言基础
https://static.52pojie.cn/static/image/hrline/4.gif
判断是否是U3D的游戏,并且是不是Mono打包
http://wx2.sinaimg.cn/mw690/78128aa9gy1fxst06o5e8j20p70af75n.jpg
没什么好说的看到路径\assets\bin\Data\Managed下有
Assembly-CSharp.dll这个文件,肯定就是Unity的Mono打包方式的作品了
https://static.52pojie.cn/static/image/hrline/4.gif
思路流程
首先我们要看一下游戏,决定自己要破解的东西
这款游戏我们要搞的就是
能量-金币-广告-内购【内购没干掉这都是后话了= =】
破解流程:
把Managed文件夹下所有dll拖进dnspy从中找到关键函数,修改代码以达到目的
而游戏的关键脚本通常都在Assembly-CSharp.dll中,所以通常我们只用关注这个dll里面的脚本就行
https://static.52pojie.cn/static/image/hrline/4.gif
开搞
把Managed文件夹下所有dll解压到同一个文件夹
然后把Assembly-CSharp和Assembly-CSharp-firstpass拖入dnspyhttp://wx4.sinaimg.cn/mw690/78128aa9gy1fxst0bgjhaj21ek0sqjw5.jpg
然后可以看到有这么多的类
http://wx4.sinaimg.cn/mw690/78128aa9gy1fxst0d5nj7j209r14wt9t.jpg
http://wx3.sinaimg.cn/mw690/78128aa9gy1fxst0c7o8uj208l03kq2u.jpg
从类名入手,先找找有没有什么特别的名字,比如money,playerdata之类的东西
这里可以看到Assembly-CSharp-firstpass只有两个没什么关系的东西,那就重点关注Assembly-CSharp里的那么多类
http://wx2.sinaimg.cn/mw690/78128aa9gy1fxst0e26lxj208k04edfv.jpg
我找到了一个叫Playerdata的东西= =结果里面并没有储存什么钱一类的东西然后类里面我也没发现其他和我们要破解的内容有关系的类
http://wx3.sinaimg.cn/mw690/78128aa9gy1fxst0f5qwhj209l0qnjsj.jpg
然后打开最上面-的那个类,和游戏有关的脚本一般都在里面! 至于为什么知道,自己打包过一次看看就知道了。。
https://static.52pojie.cn/static/image/hrline/4.gif
找到修改金币和能量的地方
然后我在这里面看到一个名字有趣的脚本叫ShopPanel
应该就是商店界面的意思,既然是商店界面,里面肯定有和购买有关的代码
http://wx4.sinaimg.cn/mw690/78128aa9gy1fxst0g7koej208d0grwff.jpg
我们看到这个ShopPlane的脚本里面有一个Buy的方法
肯定就是购买相关的方法了,具体看下面图http://wx4.sinaimg.cn/mw690/78128aa9gy1fxst0j7a1xj20j6046mxg.jpg
http://wx3.sinaimg.cn/mw690/78128aa9gy1fxst0lrgg0j20tx0mpgo3.jpg
然后我们去看一下这个getcoin的地方http://wx4.sinaimg.cn/mw690/78128aa9gy1fxst0oygpuj20uz0iq424.jpg
http://wx1.sinaimg.cn/mw690/78128aa9gy1fxst0qkkndj20op0j7myq.jpg
开始修改
http://wx4.sinaimg.cn/mw690/78128aa9gy1fxst0s8ky4j20p10jdq4o.jpg
OK金币就改好了
https://static.52pojie.cn/static/image/hrline/4.gif
改能量
http://wx1.sinaimg.cn/mw690/78128aa9gy1fxst0sya66j20ad06qaaa.jpg
我们看到我们之前修改的金币的类Monetyzation中
有ConisController【金币管理】[刚刚修改的脚本] 和 EnergyController【能量管理】这两个脚本
所以EnergyController肯定就是我们要修改能量的地方
顺便一说- - 这个人和我的命名习惯很像欸= =什么的控制脚本就是xxController
下面还看得到LuckyBoxController 【幸运盒子管理】和SpecialGiftController【特殊礼物管理】
这两个脚本就是控制游戏里面游戏抽奖的东西,不过既然都无限金币了,我也没有去改什么中奖概率什么的= =有兴趣的可以自己去改一改
继续看EnergyController
http://wx1.sinaimg.cn/mw690/78128aa9gy1fxst0uwrq3j20rd0pe76i.jpg
修改后
http://wx3.sinaimg.cn/mw690/78128aa9gy1fxst0wp5hlj20pe0lemyw.jpg
能量修改完毕上游戏看看
https://static.52pojie.cn/static/image/hrline/4.gif
http://wx4.sinaimg.cn/mw690/78128aa9gy1fxst0xqzlnj20e10k2mxx.jpg
好的,看来金币和能量都修改成功了,广告还是没搞掉,现在开始搞广告
https://static.52pojie.cn/static/image/hrline/4.gif
搞广告
同样的方法 - - 通过名字找脚本广告嘛,多半和AD有点关系 = =找到和AD有关的脚本
http://wx2.sinaimg.cn/mw690/78128aa9gy1fxst0ykumkj207x099q36.jpg
从上面可以看到作者真棒 命名习惯都是一样的 AdsController 明摆着就是 【广告管理】啊
http://wx4.sinaimg.cn/mw690/78128aa9gy1fxst0zrej1j20bo0kf3zr.jpg
打开这个脚本看到有这么多方法,挨个挨个的看具体是干什么的。。
直到看到一个方法。。
http://wx1.sinaimg.cn/mw690/78128aa9gy1fxst161rx0j20ud0lewkf.jpg
可以很明显的看出AreAdsBlocked这个Bool值就是控制是否是买了那个区去广告的判断标准,true就是为购买,所以去看看这个Bool值赋值的地方
http://wx1.sinaimg.cn/mw690/78128aa9gy1fxst174z3qj212j0563z2.jpg
这个直接修改返回值为true就行
http://wx2.sinaimg.cn/mw690/78128aa9gy1fxst17qk8aj208904p3yg.jpg
ok 上游戏看看
https://static.52pojie.cn/static/image/hrline/4.gif
http://wx3.sinaimg.cn/mw690/78128aa9gy1fxst1ec9yij20ez0i6aak.jpg
好的可以看到广告购买的这一项已经没有了,判断是你已经购买了
但是
http://wx2.sinaimg.cn/mw690/78128aa9gy1fxst1fhljvj20ek0bw3zo.jpg
这种地方还有观看广告免费解锁的地方,
点这个按钮就会开始看广告,看完后关卡就解锁,所以我们要改一下这个地方
目标很明确,思路也应该很清晰,找到播放广告的地方,直接改成播放成功
https://static.52pojie.cn/static/image/hrline/4.gif
http://wx4.sinaimg.cn/mw690/78128aa9gy1fxst0zrej1j20bo0kf3zr.jpg
回到这个AdsController看里面的方法,里面有
http://wx2.sinaimg.cn/mw690/78128aa9gy1fxst18f8r9j20as03faa0.jpg
WatchVideo 【观看视频】
VideoWatchFailed 【视频观看失败】
VideoWatchedWithSuccess【视频观看成功】
VideoWatchCancelled 【视频观看被关闭】
这些方法,已经很明显了,看看代码
http://wx4.sinaimg.cn/mw690/78128aa9gy1fxst1a7wnmj20rr0l4mz6.jpg
http://wx2.sinaimg.cn/mw690/78128aa9gy1fxst1cmbqwj20tb0df406.jpg
轻微改动一下观看成功中的代码,然后直接把watchvideo里面的所有代码删了换成播放成功的就行
http://wx2.sinaimg.cn/mw690/78128aa9gy1fxst1dfe8bj20fn02q0ss.jpg
ok 现在点击广告就不会播放广告了,直接进入播放完毕的流程
https://static.52pojie.cn/static/image/hrline/4.gif
最后把Assembly-CSharp.dll替换进原路径,用Androidkiller签一下名完毕
成品链接:https://www.52pojie.cn/thread-832018-1-1.html
https://static.52pojie.cn/static/image/hrline/4.gif
如果帖子有帮助到你,给一个免费评分支持一下噢!Thanks!
这种帖子真不错,充分考虑考虑了坛里成员的水平,编排得很容易看懂,图片里还有中文注释。
我试着按你的思路破解的另外一款unity游戏,然后修改完数据之后编译就出错了,这是因为什么问题?是资源混淆了吗? 感谢分享 我来抢个沙发 膜拜,学习了 很好,谢谢 不错的教程,支持一下楼主 思路好浅析。。。。 这个游戏好玩么? 为何我修改过后点击游戏中的 免费体验 这个按钮没有反应了呢 额。。。这什么鬼游戏。。。