游戏充值订单金额修改思路与实践

一、目的

修改游戏中元宝充值订单金额,如下图将3000元订单改为一元

 二、思路与实践

首先我们先了解一下微信和支付宝在app中的调用流程(图片来源网络,侵删):

上图中可以看到, 商户app请求订单 -> 商户Server返回支付参数 -> 商户app调起第三方支付。(微信,支付宝同理)

那么我们是否可以在app调起第三方支付时将商户Server返回的参数中的订单金额修改掉。

上一篇中我们已经解密了传奇手游的lua脚本代码,这里不在赘述。

在手游脚本中搜索“支付”关键字,有很多脚本,最后我们锁定“CallFCommand.lua”

第一次尝试时,找错了代码,所以没有成功,这个文章后面我会讲。我们先讲成功修改的方法。

锁定代码:

        local jData         = {}
        jData.productPrice  = tostring( price )
        jData.productId     = tostring( requestID )
        jData.productName   = tostring( name )
        jData.productCoin   = tostring( game_coin )
        jData.roleName      = propertyProxy:GetName()
        jData.roleId        = loginProxy:GetSelectedRoleID()
        jData.serverId      = loginProxy:GetSelectedServerId()
        jData.serverName    = loginProxy:GetSelectedServerName()
        jData.userId        = tostring( AuthProxy:GetUsername() )
        jData.srvDomain     = tostring( loginProxy:GetSelectedServerDomain() )
        jData.ext           = string.format("%s|%s|%s", serverip, platform, jsonData.order_no)
        jData.order_no      = jsonData.order_no
        jData.roleCreate    = tostring( loginProxy:GetSelectedRoleCTime() )                         -- 创建时间
        jData.rolePower     = tostring( propertyProxy:GetMainPlayerPower() )                        -- 战力
        jData.roleJob       = tostring( GetJobName(propertyProxy:GetRoleJob()) )                    -- 职业 战/法/道
        jData.roleSex       = tostring( propertyProxy:GetRoleSex() + 1 )                            -- 性别 1男 2女
        jData.vipLevel      = tostring( 0 )                                                         -- vip等级
        jData.roleVIPLev    = tostring( 0 )                                                         -- vip等级
        jData.roleLevel     = tostring( propertyProxy:GetRoleLevel() )                              -- 角色等级
        jData.roleBalance   = tostring( MoneyProxy:GetMoneyCountById(4, true, true) )               -- 当前元宝数量
        dump(jData)

        -- on call of father
        global.L_NativeBridgeManager:GN_onCallOF(jData)

观察代码,price变量在其他位置的代码注释中标注为付款金额(元),我们猜测这里有可能是商户server返回的订单信息,并且方法结尾有一个Native层的方法调用。

我们先输出一下price

release_print("test测试".. tostring( price ))

可以看到这里是我们调起10元充值的金额数。 

我们直接将此处的price改为固定值为1

jData.productPrice  = tostring( 1 )

 这里我们重新加密.lua文件后不能按前一篇的方法,MT管理器直接覆盖掉apk目录下的同名文件。

因为apk安装之后路径下是没有“CallFCommand.lua”文件的,我搜索了整个手机文件都没有找到。(有知道的朋友欢迎交流)

所以我们这次采用重新打包apk。

apktool -b {路径}

打包后记得签名,如果对apktool命令不熟练,可以使用androidkiller中的apk签名。

安装后调起支付如下图,抓取到的支付信息是档位8,3000元的支付信息。

 

到这里我们已经修改成功,此方法只适用于商户server不校验真实充值金额的场景。商户server可以拿到充值后的订单详情,如果校验真实充值金额,那么可能会收不到充值的游戏道具。

第一次我锁定了这段错误代码,因为它的注释很清楚的有金额

    local suffixTable = 
    {
        ["actor_id"]    = loginProxy:GetSelectedRoleID(),           -- 角色id
        ["ext"]         = tostring(os.time()),                      -- 透传参数
        ["game_coin"]   = tostring(game_coin),                      -- 游戏币数量
        ["game_id"]     = tostring(moduleID),                       -- 游戏id
        ["money"]       = tostring(price),                          -- 付款金额(元)
        ["product_id"]  = tostring(id),                             -- 充值档位
        ["sid"]         = loginProxy:GetSelectedServerId(),         -- 区服id
        ["subject"]     = tostring(name),                           -- 物品描述
        ["uid"]         = tostring(AuthProxy:GetUsername()),        -- 用户账号
        ["platform"]    = platform,                                 -- 渠道id
        ["sChrName"]    = envProxy:GetAPKPackageName(),             -- 包名
        ["actid"]       = actID,                                    -- 活动ID
    }

 我们将付款金额改为固定值1

["money"]       = tostring(1),                          -- 付款金额(元)

我们看它返回的money还是10,我们尝试修改这个返回值,看是否可以

点击链接右键 -> save Response -> Map local Settings

但依然没有成功修改数值,此时我再次查看lua代码时才发现另一处代码。应该就是商户server返回信息调起支付的代码。跳转文章开头。

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人工智能-肥鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值