1. 程式人生 > >Android下的linux指令集

Android下的linux指令集

Android目錄結構

  • data

    • app:使用者安裝的應用
    • data:應用的專屬資料夾
    • system:系統的配置資訊,登錄檔檔案
    • anr:anr異常的記錄資訊(預設是沒有的只有當程式發生anr異常的時候才會生成這個檔案,檔案記錄了發生anr異常的具體資訊)
  • dev:devices的縮寫

    • 存放裝置所對應的檔案
  • mnt:mount的縮寫

    • 掛載在系統上的裝置:sdcard,u盤
  • proc:硬體配置,狀態資訊 (這是一個虛擬的檔案)

    • cpuinfo、meminfo
  • sbin:system bin

    • 系統重要的二進位制執行檔案
    • adbd:伺服器的adb程序
  • system:

    • app:存放系統應用,預設不能刪除
    • bin:Android中可執行的linux指令檔案
    • etc:host:主機名和ip地址的對映
    • fonts:Android中自帶的字型
    • framework:存放谷歌提供的java api
    • lib:核心功能的類庫,C/C++檔案
    • media/audio:存放Android的音效檔案
    • tts:語音發聲引擎,預設不支援中文
    • usr:unix system resrouces 系統應用程式和相關檔案 (鍵盤編碼和按鍵編碼的對映存放在這裡)
    • xbin:是專為開發人員準備的二進位制指令

Android下的Linux指令

  • id:列印當前使用者的id
    • uid=0:root
    • uid=1000:system
    • uid=2000:shell
    • uid=10000+:一般應用程式的id
  • chown 0.0 檔名 修改該檔案的所有者為root
  • mount:掛載檔案系統
    • mount -o remount rw /:掛載當前目錄為可讀可寫許可權
    • mount -o remount rw /system:重新掛載指定目錄

Android中特有的指令

  • am:ActivityManager,可以進行跟activity相關的操作

    • am start -n 應用包名/應用包名.MainActivity:開啟指定Activity
    • am kill 應用包名:結束非前臺程序 (嘗試結束在不影響使用者使用的程序)
    • am force-stop 應用包名:結束程序 (強制結束)
  • pm:PackageManager

    • pm disable 包名:凍結指定應用
    • pm enable 包名:解凍指定應用
  • monkey -p 應用包名 1000:自動點選指定應用1000次

刷機,rom寫檔案(su)

  • 如果想讓真實手機執行這些指令,手機必須要有root許可權
  • 刷root原理:把su二進位制檔案拷貝到/system/bin或者/system/xbin(這裡會出現一個死迴圈,複製su進入/system/bin需要root許可權,而我們就是要獲取root許可權而這樣搞。這時我們可以自己修改rom,把su命令弄進去,此時注意這個su命令的許可權必須是4755。755不用多說就是rwx的三個組合,而前面的4表示SUID許可權。s屬性出現在檔案所有者的x許可權上 如linux系統上:/usr/bin/passwd 是屬性s。作用是:僅在執行該程式的過程中有效.執行者將會具有該程式的所有者(owner)的許可權)
  • Android刷root軟體,工作的原理全部都是利用系統的漏洞實現
  • rom:可以理解為android系統的安裝檔案
  • 刷機的具體過程是把su檔案和superuser.apk寫入ROM的img檔案 (superuser.apk是當某個應用需要root許可權是我們可以通過這個apk來選擇是否允許它擁有root許可權,su檔案寫入到/system/bin或者/system/xbin中,而superuser.apk寫入到系統app的檔案下。兩個檔案的許可權全部寫為4755)
  • 在程式碼中執行指令:已執行su指令為例:

    Runtime.getRuntime().exec("su");
    

小案例:凍結解凍應用(這裡執行指令通過第三方jar包完成RootTools.jar)

  • 凍結和解凍指定的應用

  • RootTools.sendShell(“pm disable ” + package, 300000);
    RootTools.sendShell(“pm enable ” + package, 300000);

小案例:零許可權讀取使用者隱私資料(即不通過內容提供者)

  • 直接修改簡訊資料庫訪問許可權

    RootTools.sendShell("chmod 777 data/data/com.android.providers.telephony/databases/mmssms.db", 300000);
    SQLiteDatabase db = SQLiteDatabase.openDatabase("data/data/com.android.providers.telephony/databases/mmssms.db", null, SQLiteDatabase.OPEN_READONLY);
    Cursor cursor = db.query("sms", new String[]{"body", "address"}, null, null, null, null, null);
    while(cursor.moveToNext()){
        String body = cursor.getString(0);
        String address = cursor.getString(1);
        System.out.println(body + ";" + address);
    }
    RootTools.sendShell("chmod 660 data/data/com.android.providers.telephony/databases/mmssms.db", 300000);
    

靜默安裝

  • 為什麼有靜默安裝的需求
    1. 正規應用。電子市場,方便使用者靜默安裝
    2. 流氓軟體。後臺偷偷下載安裝。
  • 自動下載應用,然後靜默安裝

    //靜默安裝
    RootTools.sendShell("pm install sdcard/flowstat.apk", 30000);
    //開啟
    RootTools.sendShell("am start -n com.jijian.flowstat/com.jijian.flowstat.TrafficWidgetSetting", 30000);
    //解除安裝應用
    RootTools.sendShell("pm uninstall com.jijian.flowstat", 30000);
    //刪除下載的apk包
    RootTools.sendShell("rm sdcard/flowstat.apk", 30000);
    

修改字型

  • 把ttf檔案刷進ROM包img中
  • Android系統預設的中文字型為DroidSansFallBack.ttf
  • 用你想使用的字型ttf檔案替換掉這個檔案即可

修改開機動畫

  • 從真機中得到bootanimation.zip
  • 把bootanimation.zip放入system/media目錄下

刪除鎖屏密碼

  • 刪除data/system下的key檔案
    • 文字密碼為password.key
    • 手勢密碼為gesture.key