之所以发是因为由于更新内购,原方法不适用了。
第一步:拖入jadx中,查看代码,搜索9000、支付相关关键词。修改smail文件使返回值满足9000的逻辑。修改后能够显示支付成功。
[C] 纯文本查看 复制代码public static k b(int i) {
if (i != 4001) {
if (i != 5000) {
if (i != 8000) {
if (i == 9000) {
return SUCCEEDED;
}
switch (i) {
case GamesStatusCodes.STATUS_MULTIPLAYER_ERROR_NOT_TRUSTED_TESTER /* 6001 */:
return CANCELED;
case GamesStatusCodes.STATUS_MULTIPLAYER_ERROR_INVALID_MULTIPLAYER_TYPE /* 6002 */:
return NETWORK_ERROR;
default:
return FAILED;
}
}
return PAY_WAITTING;
}
return DOUBLE_REQUEST;
}
return PARAMS_ERROR;
}
}
第二步:虽然第一步支付成功了,但是回到游戏会显示支付失败,通过打开debug查看日志,看到支付成功后,失败的关键词 “玩家放弃等待...........”
jadx定位代码,发现这里有个支付的callback会判断一个参数,这个参数应该和某宝的支付返回无关,像是一个服务器上的校验,但是没关系,直接在smail中修改逻辑即可,修改后的源码效果如下:
[C] 纯文本查看 复制代码PayImpl.checkOrderStatus(activity, str7, Assembly.isPortrait, new CheckPayOrderStatusCallback() { // from class: com.ghomesdk.gameplus.pay.PayImpl.1.1
@Override // com.ghomesdk.gameplus.pay.CheckPayOrderStatusCallback
public void callback(int i2, String str8) {
if (payCallback != null) {
if (0 == 0) {
StringUtils.isNotEmpty(orderModel.getCodeKey());
if (0 != 0) {
payCallback.callback(Integer.valueOf("-10869638").intValue(), "扫码支付成功。", hashMap);
} else {
payCallback.callback(Integer.valueOf("0").intValue(), "支付成功。", hashMap);
}
} else if (0 == -1) {
Log.debug(PayImpl.TAG, "玩家放弃等待...........");
payCallback.callback(Integer.valueOf("-10869604").intValue(), ErrorCodeUtil.getMessageByErrorCode("-10869604", "支付失败,请稍后再试"), hashMap);
} else {
payCallback.callback(Integer.valueOf("-10869604").intValue(), ErrorCodeUtil.getMessageByErrorCode("-10869604", "支付失败,请稍后再试"), hashMap);
}
}
}
});
第三步:重新打包编译,安装,支付成功后,礼包也顺利到账,破解完成。但是经过查看debug信息发现,会有一些onload的信息上传,所以怀疑是有服务器收集信息,虽然能玩爽了,但是容易被人家抓到白嫖,仅当做学习使用。