吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1103|回复: 17
上一主题 下一主题
收起左侧

[Android 原创] mx player 逆向教程之禁止外部打开后返回主界面

  [复制链接]
跳转到指定楼层
楼主
芽衣 发表于 2026-4-10 16:35 回帖奖励
本帖最后由 芽衣 于 2026-4-10 16:38 编辑
这个播放器被收购以后,经过三哥的调教,变得越来越烂了,真不愧是用左手写的代码。

有些看似不合理的地方,实际上就是想给你塞广告,毕竟pro版砍掉以后,就只剩下这个ad版了。
不知从何时开始,从外部打开视频,返回时不再是原来的界面了,而是mx播放器的主界面,比如我从三方文件管理器打开一个视频,默认mx播放器打开,结果返回的时候不是文件管理器,而是mx播放器的主页。官方这么做实际上就是想给你多看点广告,所以不停地返回主界面,我实实在在被这种行为恶心到了。

不知道有多少人已经发现这个问题了,去年的时候好像还不是这样的。
既然官方非要这么搞,那就只能干掉这种毒瘤行为。

使用工具
1、MX_Player_ad 2.11.4
2、jadxgui
3、mt,np,pc等




过程比较简单,第一步直接抓播放视频的Activity,发现是mxtech/videoplayer/ad/ActivityScreen,返回时退到了主界面,直接去拍onBackPressed的门

public final void onBackPressed() {
                        xjb xjbVar = this.o5;
                        if (xjbVar == null || !xjb.r) {
                                        super.onBackPressed();
                                        return;
                        }
                        View view = xjbVar.k;
                        if (view == null || view.getVisibility() == 0) {
                                        return;
                        }
                        n0e.w2("playerRewardedScreenBackClick");
                        View view2 = xjbVar.k;
                        if (view2 != null) {
                                        view2.setVisibility(0);
                        }
        }






继续跟进,来到com.mxtech.videoplayer.ActivityScreen,

public void onBackPressed() {
                        enc encVar = this.H1;
                        if (encVar != null && encVar.e()) {
                                        ArrayList<Integer> arrayList = encVar.i;
                                        if (arrayList.size() == 1) {
                                                        encVar.g();
                                                        return;
                                        }
                                        arrayList.remove(arrayList.size() - 1);
                                        Fragment fragmentD = encVar.l.getSupportFragmentManager().D(bjf.container);
                                        if (fragmentD != null && (fragmentD instanceof yjc)) {
                                                        ((yjc) fragmentD).T9();
                                        }
                                        encVar.n = 0;
                        }
                        if (!l91.a(this) && n8(false)) {
                                        va(-1, LogSubCategory.Action.USER);
                                        try {
                                                        super.onBackPressed();
                                        } catch (IllegalStateException unused) {
                                                        finish();
                                        }
                        }
        }


代码末尾也有个super.onBackPressed(),但不要继续跟了,如果此处方法代码全删,直接去执行super.onBackPressed(),就可以实现外部打开不返回主界面。但这样感觉不是很完美,继续看执行流程。上方有个if (!l91.a(this) && n8(false)),a看过了没什么东西,看看n8,传入了一个布尔值。



这个是双击返回,double_tap_back_key,两次点击的间隔小于2秒钟执行返回,否则取消。从传入的布尔值来看,!v9()大概率有问题,继续跟进。


[Java] 纯文本查看 复制代码
    public final boolean v9() {
        if (getIntent() == null || !isTaskRoot() || getIntent().getBooleanExtra("return_result", false)) {
            return false;
        }
        startActivity(new Intent(this, ((com.mxtech.videoplayer.f) getApplication()).P()));
        finish();
        return true;
    }


外部播放总回到主界面的原因也比较明显了,startActivity,设计之初返回的时候就是故意启动程序的,果然三哥还是懂开发的。
修改思路就是直接在这里加判断,利用action.VIEW判断是否从外部打开,如果app运行时打开视频可正常返回主界面。

.method public final v9()Z
    .registers 7

    invoke-virtual {p0}, Landroid/app/Activity;->getIntent()Landroid/content/Intent;

    move-result-object v0

    invoke-virtual {v0}, Landroid/content/Intent;->getAction()Ljava/lang/String;

    move-result-object v1

    const-string v2, "android.intent.action.VIEW"

    invoke-virtual {v1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v3

    const/4 v1, 0x0

    if-nez v3, :cond_40

    invoke-virtual {p0}, Landroid/app/Activity;->getIntent()Landroid/content/Intent;

    move-result-object v0

    if-eqz v0, :cond_40

    invoke-virtual {p0}, Landroid/app/Activity;->isTaskRoot()Z

    move-result v0

    if-eqz v0, :cond_40

    invoke-virtual {p0}, Landroid/app/Activity;->getIntent()Landroid/content/Intent;

    move-result-object v0

    const-string v2, "return_result"

    invoke-virtual {v0, v2, v1}, Landroid/content/Intent;->getBooleanExtra(Ljava/lang/String;Z)Z

    move-result v0

    if-nez v0, :cond_40

    new-instance v0, Landroid/content/Intent;

    invoke-virtual {p0}, Landroid/app/Activity;->getApplication()Landroid/app/Application;

    move-result-object v1

    check-cast v1, Lcom/mxtech/videoplayer/f;

    invoke-virtual {v1}, Lcom/mxtech/videoplayer/f;->P()Ljava/lang/Class;

    move-result-object v1

    invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V

    invoke-virtual {p0, v0}, Lavb;->startActivity(Landroid/content/Intent;)V

    invoke-virtual {p0}, Lcom/mxtech/videoplayer/ActivityScreen;->finish()V

    const/4 v0, 0x1

    return v0

    :cond_40
    return v1
.end method


因为新加入的代码和下面的代码跳转地址都一样是:cond_40,所以v1的赋值得往上移。


改好以后试了一下,瞬间感觉舒服多了


免费评分

参与人数 5吾爱币 +5 热心值 +5 收起 理由
Carinx + 1 + 1 用心讨论,共获提升!
Courser + 1 + 1 谢谢@Thanks!
woodjecket + 1 + 1 我很赞同!
ku-yu + 1 + 1 我很赞同!
adama + 1 + 1 用心讨论,共获提升!

查看全部评分

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

沙发
YmSo 发表于 2026-4-10 17:47
芽大威武,期待成品……
3#
beyond0729 发表于 2026-4-10 17:50
4#
158096969 发表于 2026-4-10 19:07
5#
smshiwadai 发表于 2026-4-10 19:48
YmSo 发表于 2026-4-10 17:47
芽大威武,期待成品……

人家源码都给了,你还要成品,我真的是无语
6#
戰龍在野 发表于 2026-4-10 21:04
老大VW,期待分享成品!!
7#
MarleyCats 发表于 2026-4-10 21:11
买的Pro版直接下架了,只能从内购下载,三天两头提示授权失败,真的是吃相难看
8#
wwb66668 发表于 2026-4-10 22:10
感谢楼主的分享
9#
seetheplanet 发表于 2026-4-11 00:38
感谢分享。
10#
WYQY 发表于 2026-4-11 01:23
学习了,这个思路还是很清楚的,谢谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-4-13 00:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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