V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zero3412
V2EX  ›  程序员

H5 游戏,外部如何修改游戏值提交的?

  •  
  •   zero3412 · 178 天前 · 3045 次点击
    这是一个创建于 178 天前的主题,其中的信息可能已经有所发展或是发生改变。
    发现有很多刷票的人。
    let gameScore = 0;
    游戏改变游戏得分 gameScore
    ajax(postUrl, {score : gameScore }, true).then( res => {
    console.log(res)
    }).catch( (error) => {
    console.log(error)
    }).finally(() => {});

    后端增加了 HTTP_REFERER 与 HTTP_ORIGIN 检测、双 cookies 检测、提交时间检测。

    感觉是使用了啥模拟器,抓包改游戏数据提交的,所以其它检测都没啥用。
    28 条回复    2024-07-13 09:55:19 +08:00
    laommmm
        1
    laommmm  
       178 天前 via Android
    都做游戏引那么大的包了,都舍不得引 200K 的加密包?
    zero3412
        2
    zero3412  
    OP
       178 天前
    @laommmm 使用将用户 token➕时间戳进行 RSA 后提交
    Marthemis
        3
    Marthemis  
       178 天前
    普通的。浏览器打开 f12 ,找到提交分数的接口,找到在哪个方法调用的,将 score 这个参数固定传一个 9999999 。
    zephyru
        4
    zephyru  
       178 天前
    @zero3412 这种写在前端的话,对着源码 debug ,找到加密前提交前即将执行的函数,加个断点,自己想提交什么提交什么区别应该不大
    zero3412
        5
    zero3412  
    OP
       178 天前
    @zephyru 哪里有教程么?学习一下,另外有什么解法?
    zero3412
        6
    zero3412  
    OP
       178 天前
    @Marthemis 微信浏览器环境,但我感觉与普通浏览器区别不大。
    renmu
        7
    renmu  
       178 天前 via Android
    对用户每一步操作发送信息到接口,最后计算操作是否与分数一致
    hezhou920
        8
    hezhou920  
       178 天前
    我感觉根本上前端无法解决掉这个问题,只能增加篡改难度。根本上解决还是得将计算逻辑放到后端。
    zero3412
        9
    zero3412  
    OP
       178 天前
    @renmu 就是 H5 的小程序,得分全靠前端获得的 -_!!
    zero3412
        10
    zero3412  
    OP
       178 天前
    @hezhou920 所以我感觉使用了模拟器啥的,只修改了游戏得分,其它能验证的数据都是正常的。
    LuckyLauncher
        11
    LuckyLauncher  
       178 天前
    能说一下是什么类型的游戏么,感觉只能加风控提高破解成本或者将得分放到后端计算
    zero3412
        12
    zero3412  
    OP
       178 天前
    @LuckyLauncher 可以理解为纯前端得分的 html5 游戏,类似 120 秒倒计时填词,余多少秒即为得分值,
    但后台都是 119 秒就完成的 -_!!
    imdong
        13
    imdong  
       178 天前 via iPhone
    贵司这代码好眼熟…端午女朋友公司的 H5 活动,抓了一下代码,连变量名都一样,看着就是一个通用模板然后改一下素材就上线的。

    提交接口分数有加密,加密的方法是一个看起来随机的函数名,但所有的代码都没有搜索到相关内容,但好巧不巧不巧看到一段所谓“最强”加密后的代码,好巧不巧不巧鄙人擅长此加密的脱密,好巧不巧又是这个加密里面最容易还原的,两分钟就取出函数内容,好了,现在,先调用函数算出一个分数的密文,然后复制一个请求到 curl 命令,替换加密分数,回车,搞定。‘前后总耗时 30 分钟’

    端午前一天,女朋友拎着活动奖品回家了(特意刷的二等奖,因为一等奖不需要)
    LuckyLauncher
        14
    LuckyLauncher  
       178 天前
    @zero3412 #12 首先从风控角度不可能 1 秒就完成游戏的,这些账户设备可以都 ban 了,其次,可以记录开始时间,每填一个词都记录下时间,时间过于离谱的也按作弊处理
    zero3412
        15
    zero3412  
    OP
       178 天前
    @imdong 哈哈哈,这边代码中没有这个“最强”加密函数,也没有为得分进行加密,能分享下这个最强加密么,至少给你造成了 30 分钟的难度。
    hwf
        16
    hwf  
       178 天前
    每道题记录一下答题填写的时间, 不合理的就按作弊处理
    vace
        17
    vace  
       178 天前
    直接提交分数这种,仅在前端无法避免,加密也无法避免,只能不断提高门槛,踢掉一些脚本小子。

    简单的互动可以服务端验算,把用户的操作 log 下来,在服务端推导分数验证,但开发成本比较高了。
    imdong
        18
    imdong  
       178 天前 via iPhone   ❤️ 1
    关于这个加密可以在我资料页进我博客搜索加密,最牛相关关键词找一下,应该会有 3 篇文章讲解,具体细节我也忘记了。

    至于怎么反破解,如果只是小游戏,短期的东西,我给你一个实现简单效果好的方案:

    首先游戏道具生成之类的不要真随机,要通过下发随机数种子,然后要有带时间的得分纪录,客户端不要只提交分数,把种子和得分纪录都提交。

    服务器拿到数据,要确认种子是自己下发的,且只能用一次。然后分数保存到数据库就好了。

    什么?你问我得分 log 呢?丢掉,直接丢掉。没用的东西,只是障眼法。

    你要在客户端就体现出:我做了很多防御,这个东西搭眼一看就知道是一时半会搞不定的东西,还是别浪费时间了。放弃放弃。
    @zero3412 #15
    zephyru
        19
    zephyru  
       178 天前
    @zero3412 分数计算上报只要在前端做,就总会被绕过去/破解,无非是成本问题,真的想解决,只能把操作传给后端,让后端去算,(不知道把这个逻辑丢到 worker 里去会不会更安全些?没试过)
    Nitsuya
        20
    Nitsuya  
       178 天前
    这种直接改 js 逻辑,排除掉错误,加大得分触发率,然后正常的玩儿游戏,最后提交老高的分数....曾经无数个 V 号,试探服务器 ban 上限....这种很难搞,因为根本不从报文入手.
    tomatocici2333
        21
    tomatocici2333  
       178 天前
    转到后端处理才能从根上解决
    neptuno
        22
    neptuno  
       177 天前 via iPhone
    用户手册里面没说刷票作废成绩吗
    a62527776a
        23
    a62527776a  
       177 天前
    前端重放录制 人工审核呗
    laommmm
        24
    laommmm  
       177 天前 via Android
    你有做代码混淆吗?
    买第三方混淆服务,混淆后发上去试下。
    geekdonie
        25
    geekdonie  
       176 天前
    前端防不住的,就算你把代码混淆掉,只抓网络请求一样分析出来。
    真要搞的话就从服务端入手,分析用户的异常行为,人工判定或者训练模型去机器判定。
    所谓的防只是加大破解难度而已,还要考虑一个投入产出比,花 100w 去强化一个只值 10w 的项目那就没必要了。
    我也是做 H5 的小游戏,每个游戏最后提交一个成绩计入榜单,根本不怕刷,因为排名不涉及核心业务。
    zero3412
        26
    zero3412  
    OP
       176 天前
    @geekdonie 如何理解最后这句话 “每个游戏最后提交一个成绩计入榜单,排名不涉及核心业务” 呢?
    seedhk
        27
    seedhk  
       176 天前
    说到 H5 改数据,让我想起阿里月饼事件。。。。。(手动狗头保命)
    geekdonie
        28
    geekdonie  
       168 天前
    @zero3412 其实就是数据随他改,反正和核心业务关系不大。。。躺平了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2805 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:22 · PVG 21:22 · LAX 05:22 · JFK 08:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.