android繞過permission驗證及fork進程許可權提升

來源:互聯網
上載者:User

標籤:

脫殼時寫patch補丁時Native代碼並沒有太高的許可權,以至於如檔案IO、網路IO等基本的C函數都無法使用,提示許可權不足。在網上搜尋了資料大致進行以下幾種嘗試:

1、APK在安裝時會在/data/system/packages.xml記錄當前app需要申請的許可權,如下:

 <package name="com.example.unpacker" codePath="/data/app/com.example.unpacker-1.apk" nativeLibraryPath="/data/app-lib/com.example.unpacker-1" flags="572998" ft="1504bc58f90" it="1504bad7c65" ut="1504bc5913e" version="1" userId="10078">        <sigs count="1">            <cert index="9" key="xxx" />        </sigs>        <perms>            <item name="android.permission.ACCESS_WIFI_STATE" />            <item name="android.permission.CHANGE_NETWORK_STATE" />            <item name="android.permission.ACCESS_NETWORK_STATE" />            <item name="android.permission.INTERNET" />            <item name="android.permission.CHANGE_WIFI_STATE" />        </perms>        <signing-keyset identifier="1" />    </package>

嘗試將所有許可權添加到此packages.xml裡沒有作用,測試失敗,具體原因以後再看

2、直接繞過permission驗證修改framework代碼,相關參考http://www.cnblogs.com/GnagWang/archive/2011/03/21/1990507.html

ActivityManagerService.java (frameworks\base\services\java\com\android\server\am)中將checkPermission、checkCallingPermission、enforceCallingPermission函數傳回值修改為PERMISSION_GRANTED,修改後編譯framework.jar、framework2.jar、services.jar然後刷入機器測試發現此修改容易造成系統起不來,不穩定,具體原因以後再看;

3、修改zygote fork後的進程的許可權,zygote fork進程最終會調用forkAndSpecializeCommon函數,在forkAndSpecializeCommon中會判斷是不是啟動systemserver進程還是其它app進程,其它進程的話permittedCapabilities和effectiveCapabilities將設定成0

if (isSystemServer) {        /*         * Don‘t use GET_ARG_LONG here for now.  gcc is generating code         * that uses register d8 as a temporary, and that‘s coming out         * scrambled in the child process.  b/3138621         */        //permittedCapabilities = GET_ARG_LONG(args, 5);        //effectiveCapabilities = GET_ARG_LONG(args, 7);        permittedCapabilities = args[5] | (int64_t) args[6] << 32;        effectiveCapabilities = args[7] | (int64_t) args[8] << 32;} else {        mountMode = args[5];        permittedCapabilities = effectiveCapabilities = 0;   //其它app進程則允許許可權和有將許可權清o        //將上一行修改為 permittedCapabilities = effectiveCapabilities = 125910048;        StringObject* seInfoObj = (StringObject*)args[6];        if (seInfoObj) {            seInfo = dvmCreateCstrFromString(seInfoObj);            if (!seInfo) {                ALOGE("seInfo dvmCreateCstrFromString failed");                dvmAbort();            }        }        StringObject* niceNameObj = (StringObject*)args[7];        if (niceNameObj) {            niceName = dvmCreateCstrFromString(niceNameObj);            if (!niceName) {                ALOGE("niceName dvmCreateCstrFromString failed");                dvmAbort();            }        }    }

因此直接強制將app啟動進程時的允許許可權和有效許可權全設定成固定的就可以實現許可權繞過:

編譯Libdvm.so拷貝到手機發現現在進程許可權已經和system_server許可權一樣了。


android繞過permission驗證及fork進程許可權提升

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.