在創維E900-S悅Me盒子上安裝第三方軟件


0x00 不甘寂寞

創維E900-S這款悅Me盒子功能還算可以,但不能接受它禁止安裝第三方軟件這一點。網上搜了半天,可能是比較新的機型沒人關注,找不到任何方法,只好自己動手試試。

0x01 Fiddler尋路

請出小伙伴Fiddler,盒子上Wifi掛代理。在高級設置的WLAN中,在已連接的SSID上按住確認鍵幾秒鍾會出現修改網絡選項,設置好代理服務器(運行Fiddler的機器)的IP和端口。

在應用市場里面安裝幾個軟件,抓包看到一些APK下載地址。在Fiddler的AutoResponder中替換為需要安裝的apk,比如電視貓。再次安裝會出現下載不完整的錯誤提示,初步猜測對文件大小或者Hash值進行了校驗。下載原始文件,修改一個字節,AutoResponder替換,發現還是同樣的錯誤,基本判定是對文件Hash進行校驗。請求的文件名包含一個32字節的16進制串,估計是MD5,但是經過計算,與文件實際MD5值並不相同。懷疑是經過加了Salt或者其他處理方式得出的最終結果,不知道算法的話無法偽造。而且Url也不是通過網絡請求獲取,估計是在應用市場里面內置的數據。

想劫持應用市場的路不通,只能換條路走。還是開着代理,重啟盒子,逐條觀察Http請求。發現了一個更新應用的請求 http://appStoreRrc.cnitv.net:8090/tv/updater2?userId=&mac=&brand=YUEME&model=E900-S&areaNo=null&osver=990104900.1008000000.10000000200&applist=[{"pkgName":"com.keylab.speech.core.yueme","version":"3.02.008"},{"pkgName":"com.keylab.speech.view.yueme","version":"3.01.008"},{"pkgName":"com.hisense.bluetooth","version":"3.01.008"}] ,返回的Json格式化之后如下:

[
    {
        "result": {
            "code": 0,
            "description": "成功獲取升級信息",
            "appURL": [
                {
                    "pkgName": "com.keylab.speech.core.yueme",
                    "version": "3.02.008",
                    "isUpdate": false,
                    "url": ""
                },
                {
                    "fileName": "aiView_YueMe.apk",
                    "appName": "語音助手view",
                    "pkgName": "com.keylab.speech.view.yueme",
                    "version": "3.02.008",
                    "isUpdate": true,
                    "url": "http://RSAppStore.cnitv.net/TV_appation/ctviptv/AD/aiView_YueMe.apk",
                    "md5": "a5e7af5648aa6d2a6d34ffdc925857c0"
                },
                {
                    "pkgName": "com.hisense.bluetooth",
                    "version": "3.01.008",
                    "isUpdate": false,
                    "url": ""
                }
            ]
        }
    }
]

於是打算在此做文章。同樣的,在Fiddler中攔截替換該請求,保證有一個應用的isUpdate值為true,它就會自動嘗試下載安裝該apk。AutoResponder中替換所有*.apk請求指向本地apk文件,重啟盒子。Fiddler里面看到的確下載了我替換的apk文件,再到盒子里面看一下,安裝成功!!

至此,基本有比較清晰的思路了。攔截update請求,將返回的JSON中isUpdate值置為true,url替換為真正需要安裝的apk的地址。url如果不是可以直接訪問下載的互聯網地址,而是本地apk文件的話,進一步在Fiddler中進行攔截替換。

經過測試,一般系統啟動時會檢查3個內置軟件的版本更新情況,如果返回的JSON中應用列表數量小於3的話,則不會下載安裝。如果返回數量大於3,則只下載安裝前3個應用。所以這種方法盒子每次啟動安裝的軟件數量是有限制的。

0x02 Go小程序

按照前面的方法,已經可以正常安裝第三方軟件了。但是,還是嫌步驟復雜了一些,尤其是要幫很多朋友大量安裝的話就太麻煩。

簡單用Go語言實現了一個小程序E900-S-proxy,實現代理和數據替換功能。只要把待安裝的apk文件放到同一目錄下,啟動程序,即可在電腦上啟動一個默認端口為8080的代理服務器。在盒子上設置HTTP代理指向這台電腦的IP,重啟設備就可以實現自動安裝,大大簡化了操作過程,降低門檻。存在的局限是每次最多只能安裝3個軟件。

需要Windows下編譯好的exe文件的朋友,請移步我在高清范發的帖子

最后,軟件安裝完畢后,別忘了把HTTP代理取消。

0x03 更多……

除了設置HTTP代理服務器IP端口意外,其實根據HTTP代理的本質,還可以通過DNS劫持來實現。具體而言,可以在路由器上將域名appStoreRrc.cnitv.net和PROXY都指向運行程序的電腦,當然代理端口要改為8090才行。

嘗試了3款不同一鍵Root工具,都沒能搞定這款機器。更多玩法,期待高手們分享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM