第三篇 Superuser定製--許可權靜默攔截(想了好久最簡單的方案)

代官山發表於2018-12-19

第三篇 Superuser定製--許可權靜默攔截(想了好久最簡單的方案)

2015年02月12日 10:00:05 重播 閱讀數:1040

(更簡單的做法,是 Acitivity透明法子,真心好用。) 

最近自己晚上在研究Supersuser。apk 許可權控制軟體。當然自己的想法需求很簡單:

1、能攔截任何軟體偷偷許可權請求
2、允許我們自己程式有許可權,其他程式偷偷請求許可權,一律KIll掉,不做響應。
起初,因為su超級許可權,請求是c層的程式碼,當應用通過以下程式碼去請求su

 

String cmd = String.format("echo %s > %s\n", arg, mSwitchUsbFileTextEdit.getText().toString());

        try {

            Process exeEcho = Runtime.getRuntime().exec("su");

            exeEcho.getOutputStream().write(cmd.getBytes());

            exeEcho.getOutputStream().flush();

        } catch (IOException e) {

            showMessage("Excute exception: " + e.getMessage());

        }

 

 的時候,su首先會查詢 Supersuser.apk是否安裝,如果有安裝su將會呼叫sqlite3.c裡面的一個查詢資料庫去查詢 請求許可權的應用是否是許可權允許的。然後確認後,他將會通過am指定跨程式傳送該應用的userId 使用者id 給 Supersuser 讓其去彈出顯示 授權的介面。
也就是su---------->Activity。 
    前面自己的想法是通過修改su.c增加個sqlite3的一個資料庫插入方法,但是迫於對c語法不熟悉,以及JNI之間的呼叫除錯並不是很方便,因此一直擱淺著 。
    今早突然想到,加個中間的Service服務,來做為中間服務。由service是後臺介面,我們即可靜默的去處理攔截。
    具體實現Superuser.apk 請需要的人,自行去同步原始碼,自行編譯。以及NDK 編譯su.c 。 su跟Superuser是一一對應的請熟知。

相關文章