日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

android手機root后的安全問題 (二)

 richsky 2012-09-05

android手機root后的安全問題 (一)

android手機root后的安全問題 (二)


導(dǎo)讀:

本文介紹殺毒軟件和病毒是如何獲取通知欄上的所有通知,并且利用其信息殺死應(yīng)用。


上一篇將過如何利用root權(quán)限來做一次靜默安裝,有的人會說,安裝apk就安裝唄,反正哥有金山手機衛(wèi)士,哥有360主動防御……他們都會彈出通知告訴我的!

安裝了新的應(yīng)用,手機會發(fā)送廣播,這些所謂的殺毒軟件監(jiān)聽這些廣播,然后彈出通知

好吧,我承認(rèn),他們在一定意義上還是有點用處的,我們先把這個問題放一放,先來說兩句題外話


360和和金山手機衛(wèi)士都有一個讓廣大android開發(fā)者比較蛋疼的一個功能:那就是檢查廣告通知!

當(dāng)有通知欄有廣告的時候,運行360執(zhí)行檢查,它會告訴你是哪個應(yīng)用程序的廣告(當(dāng)然,這里并不局限于廣告,他們是獲得所有通知,然后過濾),然后他會讓用戶選擇:不處理;關(guān)閉通知(實際上是把這個進(jìn)程kill掉,整個軟件停止運行);卸載此軟件。


雖然我沒有發(fā)布過android應(yīng)用,但是我知道,靠軟件賺錢的各位,本來收入已經(jīng)夠?qū)擂蔚牧耍偌由线@些操蛋的軟件提供這些操蛋的功能……哎

大家不喜歡收費軟件那咱們就免費,點點廣告支持一下總行吧,就是不點,你就放在那唄(當(dāng)然,有的軟件發(fā)起廣告來沒玩沒了也挺操蛋)


說了這么多廢話,我們就來看看那些所謂的殺毒軟件是如何對付大家的

到了關(guān)鍵的地方,實際也就那么一行代碼……又讓大家失望了。。。

adb shell dumpsys notification

比如,我現(xiàn)在在我機器上面執(zhí)行一下,輸出的結(jié)果為

Current Notification Manager state:
  Notification List:
    NotificationRecord{41453c70 pkg=com.zdworks.android.toolbox id=7f090092 tag=null pri=0}
      icon=0x0 / <name unknown>
      contentIntent=null
      deleteIntent=null
      tickerText=null
      contentView=null
      defaults=0x0
      flags=0x62
      sound=null
      vibrate=null
      ledARGB=0x0 ledOnMS=0 ledOffMS=0
    NotificationRecord{415f48e8 pkg=com.zdworks.android.toolbox id=7f090080 tag=null pri=100}
      icon=0x7f0200fd / com.zdworks.android.toolbox:drawable/barttery_notify_icon
      contentIntent=PendingIntent{41949028: PendingIntentRecord{412e3c20 com.zdworks.android.toolbox startActivity}}
      deleteIntent=null
      tickerText=電量提示
      contentView=android.widget.RemoteViews@416e7b90
      defaults=0x0
      flags=0x22
      sound=null
      vibrate=null
      ledARGB=0x0 ledOnMS=0 ledOffMS=0
    NotificationRecord{416db3e0 pkg=android id=1040414 tag=null pri=100}
      icon=0x10804f5 / android:drawable/stat_sys_adb
      contentIntent=PendingIntent{41275de8: PendingIntentRecord{416dade8 android startActivity}}
      deleteIntent=null
      tickerText=USB 調(diào)試已連接
      contentView=android.widget.RemoteViews@416daf40
      defaults=0x0
      flags=0x2
      sound=null
      vibrate=null
      ledARGB=0x0 ledOnMS=0 ledOffMS=0
    NotificationRecord{41790de8 pkg=com.htc.android.psclient id=7f020010 tag=null pri=100}
      icon=0x7f020010 / com.htc.android.psclient:drawable/usb_to_pc_notify
      contentIntent=PendingIntent{416c3e38: PendingIntentRecord{417bc968 com.htc.android.psclient startActivity}}
      deleteIntent=null
      tickerText=null
      contentView=android.widget.RemoteViews@4169d128
      defaults=0x0
      flags=0x2
      sound=null
      vibrate=null
      ledARGB=0x0 ledOnMS=0 ledOffMS=0
  
  mSoundNotification=null
  mSound=com.android.server.NotificationPlayer@413e73b8
  mVibrateNotification=null
  mDisabledNotifications=0x0
  mSystemReady=true

現(xiàn)在大家知道了吧,這么簡單就把咱們給搞定了

下面的事情就簡單

1.想辦法獲取這段log

2.提取包名

3.根據(jù)數(shù)據(jù)庫中的黑名單白名單不同處理

4.你的應(yīng)用很可能在黑名單中,最后的結(jié)果也基本是進(jìn)程被殺死

(這里就不演示3、4部分了,只演示1、2)


  1. testButton = (Button)findViewById(R.id.exec);  
  2. testButton.setOnClickListener(new View.OnClickListener() {  
  3.     public void onClick(View v) {  
  4.         String[] commands = {"dumpsys notification"};  
  5.         Process process = null;  
  6.         DataOutputStream dataOutputStream = null;  
  7.   
  8.         try {  
  9.             process = Runtime.getRuntime().exec("su");  
  10.             dataOutputStream = new DataOutputStream(process.getOutputStream());  
  11.             int length = commands.length;  
  12.             for (int i = 0; i < length; i++) {  
  13.                 Log.e(TAG, "commands[" + i + "]:" + commands[i]);  
  14.                 dataOutputStream.writeBytes(commands[i] + "\n");  
  15.             }  
  16.             dataOutputStream.writeBytes("exit\n");  
  17.             dataOutputStream.flush();  
  18.               
  19.             process.waitFor();  
  20.               
  21.             BufferedReader reader = null;  
  22.             reader = new BufferedReader(new InputStreamReader(process.getInputStream()));    
  23.             String line = "";  
  24.             List<String> lineList = new ArrayList<String>();  
  25.             final StringBuilder log = new StringBuilder();    
  26.             String separator = System.getProperty("line.separator");  
  27.             Pattern pattern = Pattern.compile("pkg=[^\\s]+");  
  28.             while ((line = reader.readLine()) != null) {  
  29.                 if(line != null && line.trim().startsWith("NotificationRecord")){  
  30.                     Matcher matcher = pattern.matcher(line);  
  31.                     if(matcher.find()){  
  32.                         lineList.add(matcher.group());  
  33.                     }else{  
  34.                         Log.e(TAG, "what's this?!");  
  35.                     }  
  36.                 }  
  37.                   
  38.                 log.append(line);  
  39.                 log.append(separator);  
  40.             }  
  41.             Log.v(TAG, "log:" + log.toString());  
  42.               
  43.             int size = lineList.size();  
  44.             for (int i = 0; i < size; i++) {  
  45.                 Log.i(TAG, "app:" + lineList.get(i));  
  46.             }  
  47.         } catch (Exception e) {  
  48.             Log.e(TAG, "copy fail", e);  
  49.         } finally {  
  50.             try {  
  51.                 if (dataOutputStream != null) {  
  52.                     dataOutputStream.close();  
  53.                 }  
  54.                 process.destroy();  
  55.             } catch (Exception e) {  
  56.             }  
  57.         }  
  58.         Log.v(TAG, "finish");  
  59.         }  
  60.     });  
  61. }  

上面的這段代碼實在沒什么技術(shù)含量,讓給位網(wǎng)友見笑了

按順序簡單解釋一下

首先,我們先執(zhí)行dumpsys notification這條命令,這在上一期的代碼中已經(jīng)有了

然后通過process.getInputStream()獲得其輸出按行讀取,這里只關(guān)心類似于下面這種的log

NotificationRecord{40dacad8 pkg=com.htc.android.psclient id=7f020010 tag=null pri=100}

然后從中提取出包名即可

其中的正則就是為了提取包名用的,想了解正則的同學(xué)可以看我的正則教程

深入入門正則表達(dá)式(java)


這里我執(zhí)行的結(jié)果為(看來有一個應(yīng)用提示了兩個通知)

  1. app:pkg=com.zdworks.android.toolbox  
  2. app:pkg=com.zdworks.android.toolbox  
  3. app:pkg=android  
  4. app:pkg=com.htc.android.psclient   

之后的工作就是把這個list展示給用戶,讓用戶去選擇了

既然360可以這樣,病毒為什么不可以呢?病毒Fake.apk可以在半夜偷偷安裝應(yīng)用Real.apk,幾秒鐘后,F(xiàn)ake.apk執(zhí)行上面的這些操作,獲取360,然后kill!爽!

大家有興趣可以反編譯一下金山和360,他們基本就是這么干的,我發(fā)現(xiàn)360比較壞,至于為什么這么說,大家自己去發(fā)現(xiàn)吧



ps:我使用的是卡巴斯基免費版,殺毒軟件是不會去管有沒有廣告推送的,廣告不是病毒,殺毒軟件也不應(yīng)該干一些不該干的事!



請大家不要用root的手機隨意下載軟件,更不要以任何借口制造任何病毒!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多