飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7761|回复: 16

[Android] TapTap某高分跑酷游戏实现自动奔跑教程-破解验证分析

  [复制链接]
  • TA的每日心情
    奋斗
    2024-1-15 09:10
  • 签到天数: 106 天

    [LV.6]常住居民II

    发表于 2018-12-27 20:17:27 | 显示全部楼层 |阅读模式
    本帖最后由 CrazyNut 于 2018-12-28 00:16 编辑

    前言:
    这款游戏是u3d的Mono打包方式
    看的教程一般都是修改无限金币or修改资源类的
    所以打算出一篇开发游戏的思维修改游戏功能以达到 目的 的教程

    如有错误的地方,还望各位表哥指出,以免误人子弟

    准备工具:
    Dnspy,Androidkiller,一款能打开apk的压缩工具
    一点点的英语基础和一点点的语言基础

    如果你有过Unity3d的开发经验,那这篇教程对你来说就再简单不过了

    先看看最后的效果

    开搞:

    玩过游戏的就知道,游戏有两个操作按钮,前面有敌人就按攻击,没敌人按跳跃,按错了就会出现失误。

    先说一下我最开始的破解逻辑:
    找到两个操作按钮的按钮事件,把判断失误的地方改为另一个按钮的按钮事件【相当于如果你按错了,不执行错误流程,自动帮你按另一个键】

    破解流程:
    把Managed文件夹下所有dll拖进dnspy从中找到关键函数,修改代码以达到目的
    而游戏的关键脚本通常都在Assembly-CSharp.dll中,所以通常我们只用关注这个dll里面的脚本就行



    定位到关键代码并处理反编译后的坑:

    Managed文件夹下所有dll解压到同一个文件夹
    然后把Assembly-CSharp和Assembly-CSharp-firstpass拖入dnspy

    然后把Assembly-CSharp和Assembly-CSharp-firstpass拖入dnspy


    定位到一个关键的playercontrol类。  【顺便吐槽一下作者一个类写了3k+行的代码,真的强,自己看着不头痛吗= =】
    里面可以看到JumpButtonAttackButton两个方法可以确定为跳跃按钮攻击按钮的按钮事件。

    【至于怎么找到的。。以经验根据名字来判断】


    【因为两个按钮事件内容几乎一样,我只截图了一个攻击按钮来进行分析】
    可以看到图上并没有之前想的,在按钮事件中就进行了错误或者判断,而只是修改了一个状态的bool值,所以肯定有其他地方在进行判断。所以我们,右键isattack,分析,查看什么地方调用了然后进行的分析!


    图上可以看到,除了按钮事件里面调用了这个值,
    只剩下一个JudgePlayerMove的方法调用了这个状态,
    那么这个方法肯定就是判断操作成功或者失败的方法了,
    双击过去看看这个方法

    我从代码里面找到了判断攻击按键的地方,如下图:

    【因为判断内容几乎一样,我只截图了一个攻击按钮来进行分析】
    有人就要问了,JudgePlayerMove这个方法是哪里调用的呢?


    分析器分析一下可以看到,只在playercontrol类中的Update方法调用了这个方法
    这里说明一下Unity中的Update方法是游戏每一帧运行的时候都会调用的方法,也可以理解为一个Timer或者说一个时钟

    关键代码找到了,但是不急,先修复一下反编译后的坑

    就算你什么都不修改,点编译的时候也出现了报错


    可以看到Unity可以识别的特殊字符在Dnspy里面无法识别,我们需要自己修改一下这个变量

    并处理好调用这个变量的地方

    特殊字符串修改好之后又报错了


    可以看到dnspy无法识别unity自带的Get_TimeScale方法 【具体原因未知】
    Get_TimeScale这个方法呢是获取游戏运行速度倍率的

    那我们只好自己写一个获取游戏运行速度倍率的方法给他填回去,如下图



    点编译 OK 没问题了,可以开始修改之前找到的代码了


    回到判断攻击状态的地方进行修改,修改后如下
    【忘了可以看看上面图上的注释】


    顺便把判断跳跃状态的地方改了

    现在已经实现了:你乱按攻击或者跳跃键都可以疯狂的向前冲,不会出现失误,现在我们需要加上自动
    之前已经说过了Update这个方法是游戏运行的每一帧调用的,而Update里面调用了JudgePlayerMove,那么也是每一 帧都在调用的了

    所以我们只需要在JudgePlayerMove这个方法里面调用一个跳跃按钮事件。。相当于每帧都在点击按钮,如果你FPS是120那么相当于你一秒点120次跳跃按钮,嘿嘿,但是在这之前,我们先改一下按钮事件



    按钮事件改好,我们回到JudgePlayerMove进行修改



    好了,保存,替换回原路径,
    上一下游戏,点攻击键有惊喜哦 嘿嘿!



    我们再来说说游戏的破解验证和资源的修改:
    其实我自己是先改了资源,发现被封了,才知道有破解验证,我教程就从破解验证开始分析!先看看改了资源后是什么样子


    这个界面是关不掉的,所以我决定从UI方向入手
    我找到了一个叫UiManager的类 【控制着所有的UI,又是3k多行的代码,作者真叼】
    了可以看到里面有一个ClosedGongGaoMeau的方法,就是控制公告界面的!

    可以看到里面有个IsCrack的变量控制着是否能关闭界面,所以我们找到给IsCrack赋值的地方,肯定就是破解验证的地方!

    分析后发现一个ClearNativeScore类的CallBack方法在给他赋值,双击过去看看

    通过注释可以看出来这是发现破解后执行操作的地方,这只是一个Callback的方法,看名字就知道肯定有其他地方还在调用这里,我们看看还有什么地方调用这个Callback

    后面我发现ClearNativeScore这整个类都和防破解有关系,我们挨个分析他里面的方法【注意看我截图代码上的注释】

    这里Unity的Start方法是在脚本最开始被激活时调用的

    上面是清空积分的方法
    看懂了上面的分析的话,心里面对于如何干掉验证应该有数了,现在我们看看游戏是如何储存金币的【我一开始简单的修改过,发现有很多问题】所以我决定直接找作者修改资源的地方,看他如何修改的,然后抄一份

    我直接找到了存魂火的变量,然后分析,找到了一个作者修改魂火的地方。。从上面可以看出。。
    作者通过了多次储存来想达到加密目的??不是很懂。。。反正照抄就对了

    下面同时修改魂火和皮肤碎片,顺便干掉破解验证

    回到ClearNativeScore 修改Start方法


    上图把该改的地方都改了,并且有注释,最后,我还是把这些方法挨个分析,看调用的地方,修改掉以免出现其他问题



    可以看到在打开天梯榜的时候会进行一次检测,这里直接改掉就好

    但是改的时候又报错了= =又是特殊字符串的问题


    这次太多了= = 不想改 = =直接改IL指令把,右键-编辑IL指令进去,把上面没用的指令全部NOP掉


    修改后



    好了完工! 不会弹出无法关闭的公告了= =
    魂火也用不完



    也许作者看到我上面的破解分析轻蔑一笑。。。
    我觉得我可能还有没发现的地方。。不过暂时不影响自己玩就行了。。



    预计更新:

    广告移除教程。

    我还在为了5.4培训的200飘云币学费而奋斗

    如果帖子有帮助到你,请给点飘云币支持一下哦!谢谢!




    评分

    参与人数 6威望 +73 飘云币 +93 收起 理由
    fishso + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    cnlistone + 2 + 2 PYG有你更精彩!
    tree_fly + 10 + 10 PYG有你更精彩!
    small-q + 20 + 20 原创精品 感谢分享!
    creantan + 20 + 20 原创精品 感谢分享!
    Rooking + 20 + 40 感谢发布原创作品,PYG有你更精彩!

    查看全部评分

    本帖被以下淘专辑推荐:

    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    前天 11:59
  • 签到天数: 1311 天

    [LV.10]以坛为家III

    发表于 2018-12-29 09:56:53 | 显示全部楼层
    厉害了大佬。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 1699 天

    [LV.Master]伴坛终老

    发表于 2018-12-31 09:42:24 | 显示全部楼层
    谢谢分享,很不错的教程。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    4 天前
  • 签到天数: 563 天

    [LV.9]以坛为家II

    发表于 2018-12-31 17:33:56 | 显示全部楼层
    大佬的教程很棒 像我们这样不太会的菜鸟想玩体验一下 你的成果可以么
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-1-15 09:10
  • 签到天数: 106 天

    [LV.6]常住居民II

     楼主| 发表于 2018-12-31 20:02:36 | 显示全部楼层
    天玄 发表于 2018-12-31 17:33
    大佬的教程很棒 像我们这样不太会的菜鸟想玩体验一下 你的成果可以么

      = =看我们是同一天注册的 如此有缘分 私聊发给你了
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 676 天

    [LV.9]以坛为家II

    发表于 2019-1-2 18:43:36 | 显示全部楼层
    很不错的教程。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-1-12 14:18
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2019-1-2 20:05:34 | 显示全部楼层
    比较入门的一个技术分享贴吧,还行
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 676 天

    [LV.9]以坛为家II

    发表于 2019-1-3 18:32:40 | 显示全部楼层
    谢谢楼主分享!!!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2019-1-5 10:01
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-1-5 12:56:46 | 显示全部楼层

    谢谢楼主分享!!!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2019-1-5 10:01
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-1-5 22:12:14 | 显示全部楼层

    很不错的教程。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表