個人nexus 7平板,到手後天然是root了。平時也不會去開SuperSu,然而某一天,我無心打開SuperSu,竟然看到有兩個遊戲被授予的root權限,心中感到有點不妙。估計是小孩玩的時候,遊戲中的惡意插件請求root權限,小孩順手贊成了。 android
哎,這兩個遊戲是google play上下的,立即把這兩個遊戲刪除,root權限許可也刪除。沒多久,一個android.process.acore的進程開始請求root權限。好吧,從名字上來看應該是個系統進程,應該是能夠相信的。然而稍微細想一下,要知道原廠出的ROM都是沒有root過的,那麼原廠ROM裏的進程請求root權限是一件奇怪的事。我斷然拒絕了這個進程的請求,到了次日發現電量離奇的沒了,看到一個叫「RC Services」的應用消耗了許多的電量。SuperSu裏的日誌顯示android.process.acore這個進程開始每過十幾分鍾到半小時請求一次root權限,顯然平板電腦不能正常sleep,致使電量消耗巨大。 shell
平板電腦顯然中招了。一段時間以來,只要平板電腦一聯網,就會出廣告,甚至正在使用時,自動彈出廣告的現象也有合理解釋了。上網搜索android.process.acore和RC Services都沒有什麼有用的信息。到google play上下載了360平板衛士也沒有查出個毛來。只有本身動手了。先治標,既然android.process.acore不斷請求root權限,Y的我把SuperSu和/system/xbin/su刪除掉,沒的root權限了,耗電的問題是暫時解決了。 app
週末有時間,開始進一步的清理。先進入recovery模式(由於正常模式沒root權限了),把記錄系統安裝的應用的文件抓下來。 編輯器
adb pull /data/system/packages.xml . adb pull /data/system/packages.list .在這兩個文件裏搜索了一下,沒有RC Services和 android.process.acore的信息。有點犯傻了,不知道該怎麼進一步進行,想起在系統的應用程序信息裏看到RC Services是內置應用,因此到/system/app目錄了胡亂翻了一下,發現有幾個apk文件沒有對應的odex文件,以爲可疑。由於我用的是原廠ROM,沒有deodex,因此通常而言系統內置的apk會有一個對應的odex文件(後來發現,原廠ROM裏也有少數幾個不帶odex文件的apk)。無論怎麼說,縮小了檢查範圍,隨便挑了一個,SystemServices.apk,到packages.xml裏竟然沒找到對應的記錄。總算有點蛛絲馬跡了,因而弄個腳本,看看/system/app下有幾個apk沒有在packages.xml裏記錄,
#!/sbin/sh for f in `ls /system/app/*.apk`; do i=`grep "$f" /data/system/packages.xml` if test -z "$i"; then echo $f fi done for f in `ls /data/app`; do i=`grep "$f" /data/system/packages.xml` if test -z "$i"; then echo $f fi done保存爲f.sh,把他push到平板上,執行。使用前先把system分區mount上。
adb push ./f.sh /tmp/ adb shell cd /tmp chmod 777 ./f.sh ./f.sh
找到了3個文件: google
/system/app/MediaUtil.apk /system/app/SystemServices.apk /system/app/VPST-3.apk
第三個文件,根本就不是apk應用,而是假裝成apk的su程序。好吧,su不是木馬,咱們熱衷於的root,核心就是它。正常的su文件是放在/system/xbin下,放在/system/app下,且假裝成apk,就是別有用心了。用文件編輯器能夠看到SuperSu和其做者Chainfire的字樣。 spa
餘下的兩個MediaUtil.apk和SystemServices.apk用apktool反編譯,看看包裏的AndroidManifest.xml描述信息。反編譯後,能夠看到SystemServices.apk的package名字爲: android.process.core.daemon.services,進程名爲: android.process.acore 插件
<manifest android:versionCode="20012" android:versionName="1.03" package="android.process.core.daemon.services" xmlns:android="http://schemas.android.com/apk/res/android"> ..... <application android:label="System Daemon" android:name="android.process.core.daemon.services.CoreApp" android:persistent="true" android:process="android.process.acore">找到一個元兇了,用包名 android.process.core.daemon.services,到packages.xml裏查找,發現包android.process.core.daemon.services,又是由另一個apk安裝而來,
<package name="android.process.core.daemon.services" codePath="/system/app/MediaDaemon.apk" nativeLibraryPath="/data/app-lib/MediaDaemon" flags="573005" ft="13d71addae0" it="13d71addae0" ut="13d71addae0" version="20012" userId="10153">
好的,又抓到一個元兇MediaDaemon.apk。一樣的分析MediaUtil.apk,其包名爲com.android.phone.daemon.services,進程名爲com.android.phone,而這個包又是指向另外一個apk文件,SettingsAvrcp.apk。 3d
到目前爲止抓到5個文件,可是RC Services仍是沒有找到來源。想起之前用CyanogenMod時有一個Dev Tools能夠看到應用程序的實際package名,因而從其餘ROM裏抽取了一個Development.apk,安裝上,用Packages Browse功能,找到RC Services對於的包名爲:com.skd.bowling,到packages.xml裏找到了對應的apk文件爲SystemAvrcp.apk。 日誌
/system/app/MediaUtil.apk /system/app/SystemServices.apk /system/app/VPST-3.apk /system/app/MediaDaemon.apk /system/app/SettingsAvrcp.apk /system/app/SystemAvrcp.apk
遂把這幾個文件刪除之。 code