日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/1/1 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xposed安卓分析源码破解视频APP的原画特权 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

???????? 本文主要目的是交流學(xué)習(xí)Xposed的使用技巧,以及給大家分享一下分析問題的思路。

???????? 有一天在用某視頻APP看視頻的時候,發(fā)現(xiàn)“高清”的清晰度也很糊,看得腦闊痛,就想選擇更高的清晰度,結(jié)果告訴我需要激活特權(quán)

???????? 可是要軟妹幣啊,本來人就窮,沒辦法,只有自己動手去搞一波。

???????? 因為準備使用xposed去修改代碼執(zhí)行邏輯,所以得需要知道原先的代碼是怎樣的。首先,準備好jadx用于反編譯APK文件,開開心心選擇安裝包。結(jié)果

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

?

?????? 現(xiàn)在拿到了dex源碼,jadx也準備就緒,得先掐住它的七寸,知道它的關(guān)鍵代碼在哪里。

???????? 我的方法是利用Android studio 的Layout Inspector,隨便打開一個項目

這樣就能知道是哪個Activity,而且在后面分析頁面上的控件時用處也很大。

現(xiàn)在打開TVIJKPlayNewActivity:由于是多dex文件,這個Activity可能需要一個一個地用jadx反編譯dex才能找到,反編譯完成后通過jadx File->Save as cradle project,保存下來(我們的安裝包.apk也要執(zhí)行一下此操作,因為dex不包含資源文件,我們后面要使用到這些資源),后面再用Android Studio打開會方便使用。PS:后面在TVIJKPlayNewActivity查找關(guān)鍵方法失敗了,在此記錄下查找過程。

將dex反編譯保存完成后,我們還需要再次jadx反編譯安裝包.apk,

雙擊resources.arsc,把里面的內(nèi)容全選復(fù)制,另外保存到文本中,這里面包含了布局文件、viewId、drawable等元素的id,后面用文本編輯工具可以方便地進行查找,用id查找文件名,或用文件名查找對應(yīng)的id。

現(xiàn)在準備工作完成,可以繼續(xù)下一步。

前面說到,播放頁面是在TVIJKPlayNewActivity,那么我們打開之后,又找不到從何下手,不知道如何才會觸發(fā)到切換清晰度的方法。我的做法是繼續(xù)Layout Inspector生成手機屏幕快照,

可以看到id/tv_projector_video_quality,那我們打開剛剛的記事本,查找tv_projector_video_quality,可以看到記錄是? 0x7f110355 (2131821397) = id.tv_projector_video_quality: false,括號里面的2131821397就是我們需要的真實id,

由此就能知道在這個點擊事件里面有點東西

繼續(xù)找到myMediaController,去尋找它的showQualityLayout()方法。從字面意思就知道,這個方法是展示清晰度的布局,繼續(xù)跟進。

看到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

是阿里的啥代碼,反復(fù)查找都找不到相關(guān)的邏輯處理

?結(jié)果都是

溜了溜了。

剛才通過播放頁面去查找關(guān)鍵代碼的方式失敗,轉(zhuǎn)變思維,想一想它不僅在播放的時候可以切換清晰度,在緩存的時候同樣也可以切換清晰度,那么我們就從緩存去下手。

繼續(xù)用屏幕快照,

打開這個Activity

總代碼不到200行,分析也會方便很多。

一眼就找到關(guān)鍵字tv_quality:清晰度,似乎這個就是選擇清晰度的控件了

映入眼簾的@BindView,這似乎是ButterKnife的風(fēng)格,而且它的可見修飾符是default,那么在同級包下肯定有東西會訪問到這個控件。

果不其然,有一個ViewBinder的類,繼續(xù)打開往下分析:

一眼就看到了showSelectDialog()有點東西,那么繼續(xù)回到DownloadDramaActivity,去尋找這個方法

繼續(xù)往下

到這里就有點東西了,一看就能猜出來點擊清晰度后執(zhí)行的方法是boolean a(int i)。跟進SelectDialogFragment

并找到關(guān)鍵代碼

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

?看到在118行,mPresenter.a(i)還會執(zhí)行操作,繼續(xù)跟進。發(fā)現(xiàn)mPresenter被強轉(zhuǎn)為b類型,那我們就還要找到這個b,

進入b類并找到a()方法

似乎b(i)返回true后,整個方法塊也就返回true了,繼續(xù)找到b(i)

看來還要繼續(xù)往前跟進到utils.b類的e()方法

到此處似乎足夠了,已經(jīng)看到了原畫的影子,如果繼續(xù)走到d里面,那下面的f還會受到影響。先到此處不要走動。我們?nèi)慩posed把這個方法修改一下返回值試試。

?

開始編寫Xposed模塊

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

安裝到手機上,打勾生效重啟手機。

發(fā)現(xiàn)播放可以選擇原畫了

從下載頁去比較,

這是高清畫質(zhì)的文件大小

?這是原畫畫質(zhì)的文件大小

原畫選擇還是成功的。

總結(jié)

以上是生活随笔為你收集整理的xposed安卓分析源码破解视频APP的原画特权的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。