前段時間忙于找工作,現在好不容易有個閑暇,思來想去發個帖子活躍一下,在各大論壇潛水多年再不貢獻點東西就太不好意思了。此貼僅作為入門貼,逆向之路萬水千山,荊棘遍野,還需慢慢修煉才能煉成大神。
個人平時喜歡看各種視頻,無奈廣告滿天飛,一怒之下就把愛奇藝廣告去掉了,瞬間舒暢無比,從此看視頻再也不煩躁了。先將破解步驟記錄余下。
當前測試版本為7.7.1,版本號80771
一、簽名校驗
首先將apk包反編譯后不修改任何內容重新打包安裝到模擬器,發現能打開軟件但是不能連接網絡。初步判斷有APK的簽名校驗,但是是在服務器端判斷的,不是在本地判斷的。最終經過各種折騰定位到libprotect.so中的JNI函數getContentJNI,該函數根據APK的簽名經過各種運算得到一個固定的返回值。該值可以直接在調用該函數出添加Log語句輸出獲得。修改內容如下:
此處,直接將該值返回,重新打包安裝測試能正常聯網使用了。
二、更改廣告請求服務器地址
通過抓取數據包分析發現,客戶端播放視頻時,客戶端先向"http://api.cupid.iqiyi.com/mixer"發送GET請求,獲取廣告內容的URL地址,然后再向這些廣告地址發送GET請求獲取廣告視頻的內容。由以上分析獲得思路是直接更改該廣告請求服務器的地址,使其向錯誤的服務器發送請求,這樣它是不可能獲取到廣告的URL地址的,因而也就不會再播放廣告了。修改內容如下:
修改之后在真機測試發現播放視頻時已經沒有廣告了。
三、補充完善
經過以上修改在我的測試機三星Galaxy S3上面已經測試無誤,但是再海馬玩模擬器上面還是回播放廣告。初步猜測,可能是根據硬件平臺信息調用不同的接口函數造成的。因而還是從抓包數據分析,發現客戶端還會向服務器地址"/php/xyz/entry/nebula.php"發送GET請求,但是該請求獲取到的服務器響應的內容是JSON結構的數據,該數據包含視頻地址和廣告地址及其他一些信息。因而不能簡單的將該GET請求地址改掉,這樣就不能播放視頻了。分析該JSON結構發現廣告地址放在以"ad_str"為鍵的數據中,而在代碼中要想獲取廣告地址必須通過該鍵獲取,因而初步思路是將該字符串"ad_str"更改為該JSON結構中不存在的鍵即可,這樣獲取不到廣告地址也就不會播放廣告了。經過查找發現該字符串實在是太多了,也就不在精確定位位置了,直接將能搜索到的smali代碼中的該字符串"ad_str"查找替換為其他字符串即可。
最終,經過以上三步之后,客戶端在真機和模擬器上面基本可以無壓力播放視頻了,再也不擔心廣告的煩擾了。修改后的apk不在此發布,各位有興趣可以自己動手嘗試。
希望多頂貼,多贊,多回復!!!