Android逆向之旅---靜態方式分析破解視頻編輯應用「Vue」浮水印問題

來源:互聯網
上載者:User

標籤:先來   sso   ffmpeg   需要   加浮水印   修改   方法   fill   資料   

一、故事背景

現在很多人都喜歡玩文藝,特別是我身邊的UI們,拍照一分鐘修圖半小時。就是為了能夠在朋友圈顯得逼格高,不過的確是挺好看的,修圖的軟體太多了就不多說了,而且一般都沒有浮水印啥的。相比較短視頻有一個比較有逼格的編輯工具「Vue」個人已經用了很長時間了,拍出來的視頻藉助強大濾鏡真的很好看,顯得逼格也高,更重要的是他有我最喜歡的功能就是可以添加視頻背景音樂,選擇自己喜歡的音樂,然後還可以編輯這段背景音樂,反正我個人覺的這個是我最喜歡用的產品了。但是好用的東西必定有它不好的地方,因為他真的很強大所以應用就把視頻加上了浮水印,為了更好的宣傳作用。

其實有很多視頻都是有浮水印的,比如抖音視頻,不過這裡順便說一下抖音視頻其實傳到伺服器上是沒有浮水印的,而在我們儲存到本地的時候有浮水印的。因為開發過視頻的人都知道,一般就是藉助ffmpeg庫添加浮水印,浮水印一般都是一張圖片。如果抖音後台把視頻加上浮水印一方面是設計著作權問題,因為現在很多原創作者一個作品視頻會在很多平台發放,那麼同樣的視頻有抖音浮水印,西瓜浮水印,快手浮水印等。再者就是添加浮水印是有點消耗效能的,抖音現在每天上傳視頻數量巨大,每個都添加浮水印伺服器壓力會很大的。介於這兩點抖音沒有選擇給伺服器背景視頻添加浮水印,只有使用者儲存到本地的時候把浮水印在本地添加,所以網上很多人都想去除抖音浮水印,其實很簡單直接抓包然後擷取視頻原始地址就可以了。不瞭解抖音的資料協議,可以看這篇文章:Android中分析某音視頻協議資料。

 

二、逆向分析應用

說的有點遠了,接著回來看看我們這款應用給的浮水印問題,其實這個應用沒有視頻上傳功能,就是把本地視頻編輯加上濾鏡和背景音樂然後在儲存到本地,而儲存的過程中就把浮水印給添加上了,所以我們的目的去除浮水印,那麼就在這個過程做手腳就可以了。關於視頻添加浮水印的功能其實網上很多資料,大部分都是藉助ffmpeg的庫進行操作。先來看看這個應用添加的浮水印效果吧:

然後我們看看應用的使用過程:

他是通過分段拍攝處理然後合并的操作,直接跳到後面看看儲存的地方:

看到這裡就在儲存視頻了,那麼添加浮水印的地方就很有可能在這個地方了,我們藉助UI工具直接提取這個進度條的id作為突破口資訊:

看到了控制項的resid值,然後去jadx中直接搜尋R.id.video_view,以後大家都這麼搜,如果搜不到在去public.xml中轉化成十進位搜尋,這裡的應用就兩個dex不是很大,但是資源很多,大家可以用壓縮公用程式開啟apk把res檔案夾刪了,因為Jadx卡需要解析res下的資源。這裡我們不查看res下的東東就直接刪除,然後直接開啟apk即可,這樣也不用多開jadx開啟多個dex了:

找到之後點擊進入查看詳情:

果然看到用到了最常用的TextureVideoView這個是用來處理視頻濾鏡效果結合ffmpeg的常用手法,不過我們關心的是進度,因為儲存肯定有進度的。網上看到自訂了一個矩形動畫進度控制項,點進去看看:

的確查看到了他有一個更新進度的方法,然後右鍵查看這個方法的調用地方:

點進去查看詳情即可:

看到這裡是a.n.a方法通過回調更新進度的,不過這裡有個問題就是這個a方法點擊跳轉失敗的,這個之前說過了,因為Jadx可能解析類失敗,所以我們需要手動去找這個方法,查看n類型:

有了包名類名就好辦了,直接去查看這個類資訊:

找到了a方法,看到這裡感覺遊戲了,儲存本地視頻的檔案有了,繼續往下跟進:

這裡有斷片了,方法點擊失敗,而且發現多層調用按照包名變數尋找太費勁了,直接查看smali代碼比較直接,這裡記住這個小技巧,當在Jadx中查看一個方法失敗可以去查看smali代碼:

最後調用的是h類的a方法,再去Jadx中找這個h類:

到這裡,就開始豁然開朗了因為我們已經找到最關鍵的地方了,就是這個執行ffmpeg命令的方法,因為我之前做過視頻應用,用ffmpeg做過濾鏡效果。所以看到這種代碼瞬間就眼前一亮。不過你沒做過也沒關係,這裡可以直接hook操作了:

直接攔截方法,列印參數看結果即可,這裡順便就把我去除浮水印的幾個方法介紹一下吧:

首先我想到的第一個方案是:過濾添加浮水印的命令參數,因為添加浮水印的命令網上很多:

那麼我就把相關的四個命令給刪除了。所以看到我上面的處理命令代碼比較簡單自己看就好了。不過可惜的是這個方案我執行失敗了,我猜想可能是哪個-filter_complex還有其他用途不能直接刪除,但是這個命令的參數值太複雜了看得我頭疼,所以放棄用了第二個方案:就是在-filter_complex命令參數中修改浮水印圖片的位置,讓其超過手機螢幕,這樣就看不到浮水印了,這個方案肯定靠譜的,我們運行這個Xposed模組,然後看看日誌:

看到命令被列印出來了,而且看到了預設的浮水印圖片,這個圖片地址一定要記住,後面會給出一個更加巧妙的破解方案就是要用到這個地址。看到浮水印的xy座標值,我們直接修改:

然後在操作Vue錄製視頻,發現視頻的確沒有浮水印效果了,這裡不方便上次視頻,大家可以自己操作看效果就好了。

 

三、解決方案

那麼到這裡我們大致就搞清楚了這個應用添加浮水印的流程和技術,主要就是藉助ffmpeg庫利用命令進行添加浮水印,我們去除浮水印的方式比較粗暴就是直接修改浮水印圖片位置。但是到這裡就結束了嗎?肯定不是因為我們想讓每個人都能用到無浮水印效果的Vue,所以得弄出一個成品apk檔案。那麼這裡有很多思路:

第一個思路:修改smali代碼,修改xy值,然後回編譯。這個的確是個思路但是我覺得修改smali代碼有點費勁。

第二個思路:弄一個空白的浮水印圖片,放在手機的sd卡,然後修改smali代碼,替換預設的浮水印圖片地址,這個思路靠譜但是還是需要修改smali代碼不方便。

第三個思路:從上面的命令看到那個預設的浮水印圖片存在sd卡的目錄,可以直接用空白圖片替換這個有浮水印的圖片,這個思路可以,不過可惜的是不可信,因為我們去查看這個目錄:

我操作了三次,就產生三張圖片,也就說這裡每次編輯視頻都會從一個地方弄個浮水印圖片後面的數字是變化的,所以這種方案我們沒法提前預知圖片名字無法完成提前替換。

第四個思路:這個是在第三個思路基礎上想到的,也是最終方案。我們從第三個思路中可以看到這個浮水印圖片肯定不是本地用代碼產生的,從網上下載下來的可能性也很低,因為是同樣的圖片,而且沒必要從網上擷取,所以想了一下發現這圖片肯定在本地apk中,那麼不多猜想直接解壓apk去res下尋找:

皇天不負有心人總算被我找到了,也驗證了我的猜想,我們對比這個和sd卡中的預設浮水印圖片:

完全一樣,肉眼沒法辨別了。好了到這裡我們就開始大膽嘗試吧,弄個空白圖片,直接替換res下的浮水印圖片,這樣應用內部在使用多個地方使用浮水印圖片都是我們替換之後的空白圖片,這個思路還是很巧妙的。

 

四、二次打包

下面就怎麼產生一個空白圖片呢?這個不難,誰叫我們會PS呢?開啟PS軟體,通過上面查看那個res圖片的大小尺寸是132*40的:

記得一定要選擇透明的,尺寸也是注意是像素單位,然後確定就好了:

然後儲存為png格式即可。直接替換原來的浮水印圖片:

這裡就替換成功了,開始回編譯吧,可惜的是回編譯失敗。一般現在很多都會回編譯失敗問題,這類問題我一般都是避免,因為解決的話沒個頭了。那麼我們怎麼不反編譯就能替換這個檔案呢?有的同學會想到直接用解壓工具解壓apk,然後替換會壓縮修改尾碼名apk即可。這個你們可以去嘗試一下會發現壓縮成apk是有問題的,因為路徑問題沒法這麼做的,那麼我們該怎麼辦呢?這個就要藉助我的逆向大黃書「Android應用安全防護和逆向分析」的第三章中介紹的aapt命令用法了,還沒有購買的同學趕緊入手吧。aapt命令可以用來操作apk檔案的,比如查看apk的xml檔案,添加刪除一個檔案到apk中。用aapt命令添加無需解壓apk檔案的,比如這裡我們替換這個檔案,可以先刪除這個檔案,命令如下:aapt remove -v vue.apk res\drawable- www.120xh.cn   xxhdpi-v4\ www.taohuayuan178.com stamp_logo.png;這樣就把原始的浮水印圖片刪除了,然後在用命令添加我們的空白浮水印圖片:aapt add -v vue.apk res/drawable-xxhdpi-v4/stamp_logo. www.jypt178.cn png 這裡有個小小的坑,就是這個命令執行的路徑一定要包含res/drawable-xxhdpi-v4/stamp_logo.png檔案,而命令中的這個路徑是不能變化的,不然添加是失敗的。

 

就這樣我們用aapt命令巧妙的替換了浮水印圖片,當然要二次簽名了,因為我們替換檔案了。二次簽名簡單不多解釋了,這樣我們就安裝弄好之後的應用,運行都是成功的,這個有點出乎我的意料,應用沒做簽名校正防止二次打包嗎?正當我懷疑的時候,發現問題了,視頻濾鏡失效了,所以這個應用還是做了檢測了。不過沒關係,這時候第一眼就要想到我寫的爆破工具kstools,不瞭解這個工具的同學可以查看這裡:Android中爆破簽名校正問題工具kstools原理解析,這裡要注意得先用工具擷取正確的原始簽名,不然還是失敗的,好了這裡在繼續操作安裝吧,這下就可以愉快的操作無浮水印的高逼格視頻編輯工作了。到這裡我們就把所有的流程都說完了,內容還是很多的,下面來總結一下本文擷取的知識點:

  • 第一、瞭解了視頻添加浮水印一般都採用ffmpeg庫的命令方式添加一張浮水印圖片
  • 第二、使用ps造一個空白png圖片
  • 第三、使用aapt命令實現apk包檔案的原始操作

Android逆向之旅---靜態方式分析破解視頻編輯應用「Vue」浮水印問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.