本文主要目的是交流学习Xposed的使用技巧,以及给大家分享一下分析问题的思路。

有一天在用某视频APP看视频的时候,发现“高清”的清晰度也很糊,看得脑阔痛,就想选择更高的清晰度,结果告诉我需要激活特权

可是要软妹币啊,本来人就穷,没办法,只有自己动手去搞一波。

因为准备使用xposed去修改代码执行逻辑,所以得需要知道原先的代码是怎样的。首先,准备好jadx用于反编译APK文件,开开心心选择安装包。结果

用了360加固,瞬间懵逼。只得google一下:https://blog.csdn.net/u014476720/article/details/83383659,一番折腾后,终于拿到了它的dex源码

       现在拿到了dex源码,jadx也准备就绪,得先掐住它的七寸,知道它的关键代码在哪里。

我的方法是利用Android studio 的Layout Inspector,随便打开一个项目

这样就能知道是哪个Activity,而且在后面分析页面上的控件时用处也很大。

现在打开TVIJKPlayNewActivity:由于是多dex文件,这个Activity可能需要一个一个地用jadx反编译dex才能找到,反编译完成后通过jadx File->Save as cradle project,保存下来(我们的安装包.apk也要执行一下此操作,因为dex不包含资源文件,我们后面要使用到这些资源),后面再用Android Studio打开会方便使用。PS:后面在TVIJKPlayNewActivity查找关键方法失败了,在此记录下查找过程。

将dex反编译保存完成后,我们还需要再次jadx反编译安装包.apk,

双击resources.arsc,把里面的内容全选复制,另外保存到文本中,这里面包含了布局文件、viewId、drawable等元素的id,后面用文本编辑工具可以方便地进行查找,用id查找文件名,或用文件名查找对应的id。

现在准备工作完成,可以继续下一步。

前面说到,播放页面是在TVIJKPlayNewActivity,那么我们打开之后,又找不到从何下手,不知道如何才会触发到切换清晰度的方法。我的做法是继续Layout Inspector生成手机屏幕快照,

可以看到id/tv_projector_video_quality,那我们打开刚刚的记事本,查找tv_projector_video_quality,可以看到记录是  0x7f110355 (2131821397) = id.tv_projector_video_quality: false,括号里面的2131821397就是我们需要的真实id,

由此就能知道在这个点击事件里面有点东西

继续找到myMediaController,去寻找它的showQualityLayout()方法。从字面意思就知道,这个方法是展示清晰度的布局,继续跟进。

看到2052行的view.setVisibility(0),0是代表显示,那猜测this.llQuality就是清晰度在的地方。

找到它被初始化的地方

反推出这个控件的布局id就是2130969697

去记事本查找2130969697,找到  0x7f040461 (2130969697) = layout.player_controller_full: res/layout/player_controller_full.xml,知道它的布局文件名为player_controller_full。这个布局文件里面的mediacontroller_ll_quality就是包含清晰度的控件( 查找2131823211, 0x7f110a6b (2131823211) = id.mediacontroller_ll_quality: false)

胡乱都能猜测出mediacontroller_tv_quality_super是原画的控件。

知道是这个控件后,回到IjkMediaController,找到这个控件的点击  0x7f110a6c (2131823212) = id.mediacontroller_tv_quality_super: false,id为2131823212,

找到点击事件为qualitySuperListener,在

分析在365行,进入PlayerAction查看

,但是后面的d.b

是阿里的啥代码,反复查找都找不到相关的逻辑处理

结果都是

溜了溜了。

刚才通过播放页面去查找关键代码的方式失败,转变思维,想一想它不仅在播放的时候可以切换清晰度,在缓存的时候同样也可以切换清晰度,那么我们就从缓存去下手。

继续用屏幕快照,

打开这个Activity

总代码不到200行,分析也会方便很多。

一眼就找到关键字tv_quality:清晰度,似乎这个就是选择清晰度的控件了

映入眼帘的@BindView,这似乎是ButterKnife的风格,而且它的可见修饰符是default,那么在同级包下肯定有东西会访问到这个控件。

果不其然,有一个ViewBinder的类,继续打开往下分析:

一眼就看到了showSelectDialog()有点东西,那么继续回到DownloadDramaActivity,去寻找这个方法

继续往下

到这里就有点东西了,一看就能猜出来点击清晰度后执行的方法是boolean a(int i)。跟进SelectDialogFragment

并找到关键代码

Boolean a(int i)返回 true就切换成功,反之就切换失败,那回到showSelectQualityDialog,

看到在118行,mPresenter.a(i)还会执行操作,继续跟进。发现mPresenter被强转为b类型,那我们就还要找到这个b,

进入b类并找到a()方法

似乎b(i)返回true后,整个方法块也就返回true了,继续找到b(i)

看来还要继续往前跟进到utils.b类的e()方法

到此处似乎足够了,已经看到了原画的影子,如果继续走到d里面,那下面的f还会受到影响。先到此处不要走动。我们去写Xposed把这个方法修改一下返回值试试。

开始编写Xposed模块

由于安装包.apk是使用过360加固过的,要注意它的classLoader不能直接使用https://blog.csdn.net/qq_21051503/article/details/53870621,需要从Application中获取,我这里是通过ᵢˋ(context)方法去拿到context,再通过context.getClassLoader()取到classLoader,完整代码如下

安装到手机上,打勾生效重启手机。

发现播放可以选择原画了

从下载页去比较,

这是高清画质的文件大小

这是原画画质的文件大小

原画选择还是成功的。

xposed安卓分析源码破解视频APP的原画特权相关推荐

  1. TVMovie JAVA源代码1.2.4版原生安卓tv源码电视盒子APP开源全前端无后台

    b站视频教程:高清版可点击进入观看>> 高清演示视频看下方: 原生安卓tv源码电视盒子app TVMovie JAVA源代码 APP开源全前端无需后台 AndroidTV.机顶盒.电影 ...

  2. 查看安卓APK源码破解

    原文:查看安卓APK源码破解 工具准备: <1>.android4me的AXMLPrinter2工具 <2>dex2jar <3>jd-gui 工具下载:http: ...

  3. 安卓10源码开发定制(29)手电筒控制源码分析

    一.前言 最近突发奇想,想做一个项目.将闲置手机变成可以利用的智能家居设备,比如在家里面通过手机App控制另一台手机的手电筒开和关(当做电灯泡)等等操作.先从最简单的功能开始研究,控制手电筒开始. 二 ...

  4. 【安卓系统源码学习之permission】 系统源代码AndroidManifest.xml分析之permission解读

    上一节,我们讲到了怎么去查找安卓源码中AndroidManifest.xml文件,打开这个文件,你会发现里面有很多<permission ... />的标签,如下图所示: 这个是用来做什么 ...

  5. 360影视php视频系统源码,全新360影视2.0完整源码 双端APP+三级分销 附视频搭建教程...

    源码资源说明: 演示环境Linux+mysql+PHP5.6+伪静态支持这个程序基本环境要求不是很大,但有的地方还是要注意一下说一下需要的东西: 1.主机 2.域名 3.源码(会给大家打包,包含前后端 ...

  6. 全新 安卓项目源码 校园跑腿帮APP android stu dio项目可调试 附说明文档

    全新 安卓项目源码 校园跑腿帮APP android stu dio项目可调试 附说明文档,录屏 基于Bmob后端云,material design风格设计,支持登录注册,任务发布,修改,上拉加载,下 ...

  7. python 抓取解析接口数据_[干货]用python抓取摩拜单车API数据并做可视化分析(源码)...

    原标题:[干货]用python抓取摩拜单车API数据并做可视化分析(源码) 在APP中能看到很多单车,但走到那里的时候,才发现车并不在那里.有些车不知道藏到了哪里:有些车或许是在高楼的后面,由于有GP ...

  8. android 自定义相机源码,Android 自定义相机及分析源码

    Android 自定义相机及分析源码 使用Android 系统相机的方法: 要想让应用有相机的action,咱们就必须在清单文件中做一些声明,好让系统知道,如下 action的作用就是声明action ...

  9. Android自定义底部弹出窗-dialog(2种实现分析+源码)

    Android自定义底部弹出窗-dialog(2种实现分析+源码) 上线项目功能抽取,在项目开发中,我们会在许多地方会用到底部自定义弹窗,比如设置:个人账户退出,切换,照片的拍照或者相册的调出,或者一 ...

最新文章

  1. phpStudy for Linux (lnmp+lamp一键安装包)
  2. c语言中count的头文件,求助C语言大佬 , 只会写到一个.c文件里 ,不会用.h头文件...
  3. Qt Creator管理C ++后端对象
  4. 智能音箱 之 麦克风参数介绍
  5. android中的BitMap(二)从网络和资源文件中获得一个BitMap
  6. 机器学习XGBoost 算法概述
  7. java宠物商店管理系统
  8. 关于在tomcat9中配置server.xml中URIEncoding=UTF-8无效的解决方法
  9. PID参数调节的经验
  10. android 倒水动画,Android 模拟圆形水杯倒水的效果
  11. kindle paper white部分优化
  12. iOS学习之路-简单汤姆猫
  13. oracle 删除原有的数据,oracle数据库删除数据的两种方式
  14. Python数据分析 2.Matplotlib绘图—常用统计图
  15. c语言程序设计医院就医,C语言程序设计(医院信息管理系统)附源代码[精品].doc...
  16. 宝塔安装nextcloud
  17. 256种编程语言的大清单
  18. java计算机毕业设计教学互动跟踪系统源码+mysql数据库+系统+lw文档+部署
  19. 排查链接是否失效_锅炉主保护系统隐患排查与治理
  20. 读书笔记-别说你懂写网文

热门文章

  1. 那些没有听过且很火概念(持续更新)
  2. 软件测试方案设计-模板
  3. 快速排序原理及Java实现
  4. 如何从当前窗口界面切换到另一个窗口界面
  5. python2.7交通标志识别图_(四)深度学习初探:基于LeNet-5卷积神经网络的交通标志识别...
  6. Linux 使用openssl ca方式签发证书
  7. 华为OD机试Golang解题 - 机器人走迷宫
  8. 肠道菌群与蛋白质代谢
  9. 第一章 仿真器的工作原理
  10. Tomcat启动后闪退系列问题