吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4062|回复: 21
收起左侧

[Android 原创] 某麦演出app分析(三)---无视重试返回上一页

  [复制链接]
6yanfeibiao 发表于 2023-8-14 19:12

前情提要

在上一篇文章写到可以提前选好票档,等待到开售时间直接提交进入订单确认页面.
然而这仅仅是"快人一步",在非常热门的演出情况下,一次提交购票成功的几率还是很低的.
在订单确认页面第一次提交往往会弹出"前方拥挤"的提示,这情况下点击确认有可能会被返回上一页.
现在就想办法在可以重复提交的情况下,停留在订单确认页面,直接提交.

分析

GIF 2023-7-31 15-54-51.gif
这个动作非常影响捡漏速度,有无办法可以去掉呢?
从整个行为过程分析:
调用接口---->返回数据---->弹出窗口---->点击按钮---->关闭页面/返回上一页
所以如果我们可以找到弹出窗口,然后hook按钮点击事件,应该就可以不返回上一页

动手

根据上面的过程分析,首先需要找到"提交订单"调用接口的地方(UltronPresenter):
image-20230801114325694.png
其中的onSuccessonError就是调用接口成功和失败的回调函数.
DmUltronRequestErrorUtils.getInstance()猜测应该是错误弹出窗口的单例.进去看看~
枚举的名字:
image-20230801114853607.png
多个点击事件的设置:
image-20230801115018261.png
都证明这里应该就是错误弹窗点击按钮设置回调的地方.到这个就可以开始暴力hook了

注入

DmUltronRequestErrorUtils中有三个OnClickListener:

  1. DialogInterface$OnClickListenerC4733a
  2. DialogInterface$OnClickListenerC4734b
  3. DialogInterface$OnClickListenerC4735c

暴力hook的方法就是把这三个OnClickListeneronClick事件替换:

let DialogInterface$OnClickListenerC4733a = Java.use(
  "cn.damai.ultron.utils.DmUltronRequestErrorUtils$a"
);
DialogInterface$OnClickListenerC4733a["onClick"].implementation = function (
  dialogInterface,
  i
) {
  console.log(
    `DialogInterface$OnClickListenerC4733a.onClick is called: dialogInterface=${dialogInterface}, i=${i}`
  );
  // this["onClick"](dialogInterface, i);
};

let DialogInterface$OnClickListenerC4734b = Java.use(
  "cn.damai.ultron.utils.DmUltronRequestErrorUtils$b"
);
DialogInterface$OnClickListenerC4734b["onClick"].implementation = function (
  dialogInterface,
  i
) {
  console.log(
    `DialogInterface$OnClickListenerC4734b.onClick is called: dialogInterface=${dialogInterface}, i=${i}`
  );
  // this["onClick"](dialogInterface, i);
};

let DialogInterface$OnClickListenerC4735c = Java.use(
  "cn.damai.ultron.utils.DmUltronRequestErrorUtils$c"
);
DialogInterface$OnClickListenerC4735c["onClick"].implementation = function (
  dialogInterface,
  i
) {
  console.log(
    `DialogInterface$OnClickListenerC4735c.onClick is called: dialogInterface=${dialogInterface}, i=${i}`
  );
  // this["onClick"](dialogInterface, i);
};

这样就能做到无视重试返回上一页:
GIF 2023-8-1 12-06-00.gif

继续进阶

在阅读源码过程中发现了错误处理的工厂函数:
image-20230801164524772.png
发现其中有TOASTerrorType,TOAST在android中是一个自动消失的提示消失,所以在想如果hook这个函数,是否可以做到连dialog都不用弹窗了,就可以疯狂按提交了,于是hook:

let DmUltronRequestErrorUtils = Java.use(
  "cn.damai.ultron.utils.DmUltronRequestErrorUtils"
);
DmUltronRequestErrorUtils["b"].overload(
  "cn.damai.ultron.view.activity.DmOrderActivity",
  "cn.damai.ultron.utils.DmUltronRequestErrorUtils$ErrorType",
  "java.lang.String",
  "java.lang.String",
  "java.lang.String"
).implementation = function (dmOrderActivity, errorType, str, str2, str3) {
  console.log(
    `DmUltronRequestErrorUtils.MMdmOrderActivityApiErrorHandle is called: dmOrderActivity=${dmOrderActivity}, errorType=${errorType}, str=${str}, str2=${str2}, str3=${str3}`
  );
  let ErrorType = Java.use(
    "cn.damai.ultron.utils.DmUltronRequestErrorUtils$ErrorType"
  );
  let TOAST = ErrorType.TOAST;
  console.log(this._a.value);
  this["b"](dmOrderActivity, TOAST.value, str, str2, str3);
  if (this._a.value != "CREATE") {
    //    console.log("build/adjust api , finish");
    dmOrderActivity.finish();
  } else {
        console.log("CREATE api , toast");
  }

  // dmOrderActivity.finish();
};

这里做到的操作效果是,如果是create接口的话,就用toast的形式提示,如果不是的话,就直接返回上一页.当然这里还可以做更多的细化判断.但是我这里就没有继续研究了.

免费评分

参与人数 6吾爱币 +6 热心值 +6 收起 理由
CzMing + 1 + 1 谢谢@Thanks!
loopsn + 1 + 1 谢谢@Thanks!
boycn007 + 1 + 1 用心讨论,共获提升!
叫我小王叔叔 + 1 + 1 很有黄牛的潜力啊
kol + 1 + 1 谢谢@Thanks!
ab19950220 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Langlixiaobao 发表于 2023-9-11 17:56
是不是可以直接组装提交订单的几个接口。  这个接口里的参数规律摸清楚。  能到点了直接通过接口拉起支付。 完全忽略前面的页面元素。
dsr000 发表于 2023-8-15 17:31
不知道是不是手机或者系统问题,我是小米安卓系统,提示前方拥挤后,不点我知道了,点空白地方就不会返回到上一步,依然在提交订单界面
linguo2625469 发表于 2023-8-15 13:55
smaxlyb 发表于 2023-8-15 14:01
牛逼,学习一下
zwmfyy 发表于 2023-8-15 21:19
楼主威武,谢谢分享。
fryant 发表于 2023-8-15 22:05
楼主多余了....一直点右下角就可以了,不过支持楼主的探索精神
nuonichi 发表于 2023-8-16 06:38
学习学习
Wangxiaoyi97 发表于 2023-8-16 07:24
有成品吗大佬
littleworm 发表于 2023-8-16 08:41
楼主威武,谢谢分享。
wfghim 发表于 2023-8-16 09:13
学习一下 看看怎么写成代码,赏楼主鸡腿,另外求成品apk文件和原始apk文件。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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