Android 逆向 某視訊直播軟體,破解收費觀看

晴天大帥逼發表於2019-04-23

簡介

      前段時間偶然發現一個直播軟體,裡面的內容嘛Android 逆向 某視訊直播軟體,破解收費觀看Android 逆向 某視訊直播軟體,破解收費觀看Android 逆向 某視訊直播軟體,破解收費觀看,很刺激,就是那種你們懂得。但是好看的全部都提示我需要鑽石觀看,作為一個優秀的好青年,怎麼捨得用自己辛辛苦苦賺的錢去看這種東西,剛好對逆向還是懂些皮毛,於是,便開始了下面的內容,由於該軟體比較Android 逆向 某視訊直播軟體,破解收費觀看Android 逆向 某視訊直播軟體,破解收費觀看Android 逆向 某視訊直播軟體,破解收費觀看,想要測試的夥伴,可以私信我哦

準備工作

       熟悉逆向的小夥伴應該都知道,要破解它首先需要反編譯了,看看原始碼,才有下手的方向。這時候就不得不介紹一下,反編譯的三個好夥伴了。

1.dex2jar  這個是用來把java編譯後的dex檔案重新轉化為jar檔案,這兒普及一下,dex檔案就是能夠被DVM或者Art虛擬機器執行的檔案,記錄了所有類檔案的資訊。說白了就是用這個來提取你能看得懂的java程式碼

下載地址:sourceforge.net/projects/de…

2.jd-gui 這個就是用來開啟上面的jar檔案的工具

下載地址:www.softpedia.com/get/Program…

3.apktool 抄一下百度,GOOGLE提供的APK編譯工具,能夠反編譯及回編譯apk,(很重要)

下載地址: ibotpeaches.github.io/Apktool/

下載好這三個就可以開始逆向之旅了

提取jar檔案

1.把需要破解的apk檔案重新命名,字尾修改為zip,並解壓出來

Android 逆向 某視訊直播軟體,破解收費觀看

Android 逆向 某視訊直播軟體,破解收費觀看

 Android 逆向 某視訊直播軟體,破解收費觀看各個檔案的左右就不說了,相信做android的基本上一看就明白了。今天只用的上三個.dex檔案。把三個檔案拷貝備用。

把dex檔案轉為jar檔案

1.將三個檔案拷貝到dex2jar目錄下

Android 逆向 某視訊直播軟體,破解收費觀看

2.用d2j-dex2jar.bat 檔案,將dex轉為jar(在當前目錄開啟cmd視窗  shift + 滑鼠右鍵)然後執行命令:d2j-dex2jar.bat classes.dex 如下所示

Android 逆向 某視訊直播軟體,破解收費觀看

執行完成之後會生成如下jar檔案,至於error.zip,這是錯誤日誌說明反編譯的時候某些地方報錯了,只要不影響到裡面程式碼的主體結構,可以暫時不要管

Android 逆向 某視訊直播軟體,破解收費觀看

同時別忘了將另外兩個dex檔案也轉換出來

分析原始碼

得到三個jar檔案之後使用jd-jui.exe開啟三個jar檔案,我這兒就只開啟前兩個檔案了,因為我在分析的時候發現第三個檔案對我們分析用處不大,就不管它了。

Android 逆向 某視訊直播軟體,破解收費觀看

上面可以看出,有很多個包,其實很多都是引用的系統程式碼,或者就是第三方架包,我們需要定位到該app的工程目錄,縮小範圍,別還沒開始看到這麼多包就退縮了。這兒講幾個技巧

1.使用apktool反編譯apk檢視AndroidManifest.xml檔案

       這個檔案相信做adnroid開發的都不陌生吧,應用的包名,以及啟動activity等,所有activity都會被註冊在這裡面,通過可以很輕鬆的找到該app的工程目錄

2.直接猜Android 逆向 某視訊直播軟體,破解收費觀看

        先別噴,這兒的猜是有經驗的猜,並不是要你一個一個的開啟看,我們玩開發的都知道,應用的包名基本上都是com.組織名.專案名,結合該應用的名字,也可以很快定位

3.全域性搜

         通過觀察app執行時的一些固定引數,再使用jd-gui的全域性搜尋功能,可以很快定位到檔案。後面也會一直使用他


具體分析過程

到這兒基本上了解的也查不多了,剩下的就是找到目的碼塊了,先分析一下他的效果:

       開啟app檢視,普通的直播可以直接進去觀看,再看看收費直播,可以預覽10秒左右,但是上面會有收費彈窗遮擋。十秒之後視訊會黑屏彈出收費視窗。

可以正向思考一波,自己遇到這種需求應該怎麼做。再結合它的效果,可以推斷一下,他是首先請求伺服器直播列表資料,裡面包含每個直播間的資訊,包括是否收費,推流地址,然後再點選播放,跳轉到一個activity中,當收費直播的話,就彈出收費視窗,並且在預覽十秒之後,停止播放。

分析完之後,再找到程式碼驗證一下我們分析的是不是正確的,先從彈窗入手,可以看到他的彈窗會有固定資訊“收費”兩字,所以全域性搜尋一下“收費”

Android 逆向 某視訊直播軟體,破解收費觀看


看結果,找到了兩個類,點進去觀察一下,很明顯,第一個類對我們來說是有用的,

PayLiveBlackBgView.class 顧明思意,他是該軟體的播放背景view,再看看行明顯的漢字,明白了,這個就是來控制倒數計時的,再往下走走可以看到 

 private int proview_play_time = 15000; 定義了一個變數,預覽時間15s,這時候是不是有種思緒大開的節奏,我們可以延長預覽時間,就可以實現一直看的功能了,這兒我試了一下,把15000多加了兩個0,重新編譯會報錯,因為15000在smail裡面被定義成了一個short多加兩個零會超過長度,就報錯了,當然熟悉smail語法的也可以這樣改試試。

既然上面改時間不行,再往下看看,有個startCountDown(開啟倒數計時)

Android 逆向 某視訊直播軟體,破解收費觀看

看下他的大概邏輯,先停止倒數計時,再判斷parmLong 是否大於 0L ,然後建立計時器,計時結束之後,destoryVideo。

這時候又可以有兩種實現方式了

1.計時結束之後不呼叫destoryVideo  2.乾脆不讓他計時

我選擇第二種方法,實現呢就是在判斷parmLong 是否大於 0L時讓他返回false,自然就不會進入下面的計時方法了。

使用apktool

知道怎麼改之後就需要用到apktool這個東西了。使用方法我介紹一下,先把你要反編譯的apk檔案,和他放在一起,就像下面一樣

Android 逆向 某視訊直播軟體,破解收費觀看

然後在當前資料夾下開啟命令視窗,執行

apktool d huanghou.apk

執行完之後,會在當前目錄下輸入

Android 逆向 某視訊直播軟體,破解收費觀看


開啟資料夾,通過之前的jar檔案路徑,找到對應的smail檔案位置,如下所示

Android 逆向 某視訊直播軟體,破解收費觀看

用記事本或者別的工具開啟檔案,我用的Notepad++,開啟之後你會發現,這尼瑪是什麼玩意,完全看不懂啊,哈哈。其實我也看不懂,不過沒關係,現學現賣就好了,剛才我們找到了個startCountDown方法是吧 ctrl+f 搜尋一下,找到該方法

Android 逆向 某視訊直播軟體,破解收費觀看

看到 if-lez v2 , : cond_0 , 這個if應該就是判斷parmLong 是否大於 0L的了,他的意思大概為

如果vA小於等於0則跳轉到:cond_0 ,只需要把條件改為不成立即可,這兒copy一段:

條件跳轉分支:

"if-eq vA, vB, :cond_**" 如果vA等於vB則跳轉到:cond_**
"if-ne vA, vB, :cond_**" 如果vA不等於vB則跳轉到:cond_**
"if-lt vA, vB, :cond_**" 如果vA小於vB則跳轉到:cond_**
"if-ge vA, vB, :cond_**" 如果vA大於等於vB則跳轉到:cond_**
"if-gt vA, vB, :cond_**" 如果vA大於vB則跳轉到:cond_**
"if-le vA, vB, :cond_**" 如果vA小於等於vB則跳轉到:cond_**
"if-eqz vA, :cond_**" 如果vA等於0則跳轉到:cond_**
"if-nez vA, :cond_**" 如果vA不等於0則跳轉到:cond_**
"if-ltz vA, :cond_**" 如果vA小於0則跳轉到:cond_**
"if-gez vA, :cond_**" 如果vA大於等於0則跳轉到:cond_**
"if-gtz vA, :cond_**" 如果vA大於0則跳轉到:cond_**
"if-lez vA, :cond_**" 如果vA小於等於0則跳轉到:cond_**

挑一個相反的吧,把lez換為gtz。儲存就OK了

回編譯

修改完之後,就該測驗一下,在資料夾下執行

apktool b huanghou

會在huanghou資料夾下生成兩個資料夾

Android 逆向 某視訊直播軟體,破解收費觀看

在dist資料夾下會生成修改後的apk檔案了,這時候先彆著急安裝,還需要給apk簽名,沒有簽名檔案的話先用studio生成一個,或者百度一下生成個簽名檔案

執行命令

jarsigner -verbose -keystore mykey.keystore -signedjar signed_myapp.apk myapp.apk myAlias

-verbose 表示簽名時輸出詳細資訊

-keystore mykey.keystore指明需要使用的簽名檔案

-signedjar signed_myapp.apk指明生成的簽名過的apk的名稱(路徑)

myapp.apk表示未簽名的apk檔案

myAlias表示簽名檔案mykey.keystore的別名(在生成這個簽名檔案的時候配置的屬性)

簽名完成之後就可以直接安裝看效果了,後面的效果我測試了,倒數計時被幹掉了,也就是視訊可以一直觀看,但是上面一直會有收費視窗,你們可以自行思考一下,怎麼把收費視窗也遮蔽掉。成品apk可以私信我,我發給你們,有需要的話,也會出後續。

總結一下

這次逆向還是很簡單的,沒有涉及到混淆,程式碼邏輯也不算太複雜,很適合小白入手,程式碼分析過程很重要,看懂了程式碼才有解決思路。遮蔽方法也多種多樣,再推薦大家可以嘗試用Hook的方法來遮蔽彈窗,當下比較流行的xspoed框架。很多apk都會有簽名驗證,二次打包後不一定能用。好了就到這兒了,覺得還可以的點個贊哦。


相關文章