吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1803|回复: 5
收起左侧

[Android 分享] 浅分析某k小说绑定弹窗和会员

[复制链接]
seventeenJoy 发表于 2026-2-4 18:23
本帖最后由 seventeenJoy 于 2026-2-5 10:56 编辑

声明.png
应用是某k小说


准备:
1.MT/NP管理器
2.root手机
3.jadx反编译工具
4.Frida 16及以下环境(推荐)
5.算法助手



注意:
1.旧版有腾讯加固,新版(7.9.6)没有;想尝试脱壳的可以选择某豆荚下载(都不是最新版),最新版则网页搜索一下或者看自带商店有没有,腾讯加固如何脱壳可以看论坛,很多大佬都有讲,也可以看我上一篇帖子:https://www.52pojie.cn/thread-2089927-1-1.html
2.没有签名校验
3.使用Frida加强版,安卓10最好是Frida 16以下,这个app我使用Frida 16去hook页面会卡死,我换成15.1.17版本好一点;Frida增强版(hluda/florida)链接:https://github.com/hzzheyang/strongR-frida-android/releases?page=13


打开应用,选择游客登录

1.png

在主页点击会员页面的时候,有一个强制绑定手机号的弹窗
2.png 3.png

我使用算法助手和objection去打印调用栈,发现是一个Activity,且调用栈有用信息只有这一个app Activity
4.png
5.png

于是我寻思是不是直接在onCreate里面判断了我是否有无绑定手机号,但是里面啥都没有,只有绑定操作这些
[Java] 纯文本查看 复制代码
package com.chineseall.reader.ui.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.TextView;
import com.chineseall.reader.R;
import com.sensorsdata.analytics.android.sdk.SensorsDataInstrumented;
import com.sensorsdata.analytics.android.sdk.aop.push.PushAutoTrackHelper;
import d.g.b.D.P0;
import e.a.Y.g;

/* loaded from: classes.dex */
public class CommonDialogActivity extends Activity {
    public static final String COMMENT_NEED = "根据相关网络安全条例,发布评论需绑定你的手机号";
    public static final String SECURITE_NEED = "为了您的账号安全,\n建议您进行手机号验证";
    public TextView tv_update;
    public TextView tv_updateCancel;
    public TextView tv_updateContent;

    private void init() {
        this.tv_updateContent = (TextView) findViewById(R.id.tv_updateContent);
        this.tv_updateCancel = (TextView) findViewById(R.id.tv_updateCancel);
        this.tv_update = (TextView) findViewById(R.id.tv_update);
    }

    public /* synthetic */ void a(Object obj) throws Exception {
        BindMobileActivity.startActivity(this);
        finish();
    }


    public /* synthetic */ void b(Object obj) throws Exception {
        finish();
    }

    @Override // android.app.Activity
    public void onCreate(Bundle bundle) {
        requestWindowFeature(1);
        super.onCreate(bundle);
        setContentView(R.layout.activity_common_dialog);
        init();
        String stringExtra = getIntent().getStringExtra("content");
        if (TextUtils.isEmpty(stringExtra)) {
            this.tv_updateContent.setText(SECURITE_NEED);
        } else {
            this.tv_updateContent.setText(stringExtra);
        }
        P0.a(this.tv_update, new g() { // from class: d.g.b.C.a.R0
            @Override // e.a.Y.g
            public final void accept(Object obj) throws Exception {
                this.a.a(obj);
            }
        });
        P0.a(this.tv_updateCancel, new g() { // from class: d.g.b.C.a.S0
            @Override // e.a.Y.g
            public final void accept(Object obj) throws Exception {
                this.a.b(obj);
            }
        });
    }

    @Override // android.app.Activity
    @SensorsDataInstrumented
    public void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        PushAutoTrackHelper.onNewIntent(this, intent);
    }
}



那为什么调用栈没有其他类的方法信息?很纳闷,后面让AI给我写了一个Frida hook脚本,才捕捉到了完整的调用栈;
[JavaScript] 纯文本查看 复制代码
Java.perform(function() {
    var Activity = Java.use("android.app.Activity");

    Activity.startActivity.overload('android.content.Intent').implementation = function(intent) {
        var component = intent.getComponent();
        if (component && component.getClassName().indexOf("CommonDialogActivity") !== -1) {
            console.log("[+] Attempting to start CommonDialogActivity!");
            console.log("Intent Details: " + intent);
            console.log("--- Call Stack ---");
            // 打印调用栈,找出是哪个类和方法触发了启动
            console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));
            console.log("------------------");
        }
        // 调用原始方法
        return this.startActivity(intent);
    };
});


6.png

7.png

后面就是去对应的smali修改这个语句了,我这里直接让它调用后返回
8.png

最后也是成功过掉了弹窗,但有时候页面和正常手机号绑定后的不一样,会少了超级会员切换界面,这个就不知道怎么回事了
9.png 10.png
说一下调用栈的问题,AI的解释是:
11.png
然后我们继续改逻辑成为超会,在jadx或MT/NP管理器搜索,找到如下方法:
12.png

后面发现是网络请求返回的数据,请求地址是:https://api.17k.com/user/monthDetail,
部分请求参数如下:
13.png

返回如下,我觉得重点的地方已标注:
14.png

利用HTTPCanary修改返回,如下:
16.png


15.png

17.png

着实也不知道具体应该怎么样返回给它解析,这样修改后页面倒是有写超级会员,也是设置的过期时间,但页面获取请求失败了;后续尝试发现好像是它服务器就有点问题(大概),有时候正常打开不抓包也这样,这个无法考究了。至于说我是不是真的修改成了超会也没找到可以验证的地方,就当个学习HTTPCanary改包测试的练习了

免费评分

参与人数 4吾爱币 +3 热心值 +3 收起 理由
Rabbit1124 + 1 用心讨论,共获提升!
fei0415 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
2022313 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
昧光 + 1 + 1 用心讨论,共获提升!

查看全部评分

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

nisang9 发表于 2026-2-6 17:46
来了来了,来学习一下~
执念的鱼 发表于 2026-2-7 13:40
Rabbit1124 发表于 2026-2-7 20:14
还好,并不是所有的读书APP,都需要绑定会员。
qig123 发表于 2026-2-9 16:31

来了来了,来学习一下~
wqra1 发表于 2026-2-27 23:25
学习学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-5-27 13:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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