2017-09-01 120 views
0

我最近跳入Android開發教程併爲了學習而自己開發應用程序。我想以適當的方式在我的代碼中獲得root權限。所以不要致電/system/xbin/su,而是使用類似seteuid(0)的東西。不幸的seteuid方法不適合我。在本機代碼中獲取Android應用程序的root權限

我是一個真正的設備,這是我紮根,啓用調試模式下測試應用程序,以及我清楚地看到,通過調用/system/xbin/su當我的應用程序從系統中,不與個seteuid和seteguid發生(的setuid請求root權限並且setguid也不起作用,但我不希望這樣做,因爲它們只能降低權限)。

請給出建議,在哪裏尋找合適的代碼實現來請求root權限,就像它會做一流的開發人員一樣。也許一些本地API調用?或者,每個人都只需撥打su即可獲得所需的訪問權限?

回答

0

在提升權限的Linux的常用方法 - 即,運行具有大於特權的應用程序登錄的用戶 - 是設置SUID標誌上的可執行(例如,文件模式微克+ S .. )。這將使進程取得二進制所有者(通常是root)的身份,而不是登錄用戶。

即使在植根設備上,在Android上執行操作也很棘手。首先,您將無法使用包含具有SUID權限的二進制文件的常用(APK)機制來安裝應用程序。其次,Android應用程序通常不是可執行文件 - 單個可執行文件處理啓動所有應用程序。

不過,如果你想嘗試在命令行上,它應該是可以設置SUID標誌上的二進制文件,至少在某些文件系統中的位置。

如果你有一個紮根的Android,那麼很可能已經有一些基礎設施來控制特權提升。最有可能的是,「su」命令將起作用(因爲會有內核mod來使其工作),並且它將提供憑證或其他方式來控制哪些應用程序可以使用它。我相信,正如你所建議的那樣,調用「su」是在根用戶的Android上進行特權提升的常用方式。但是,這是充滿困難的。有一個文檔https://su.chainfire.eu/,它解釋瞭如何在有根的Android設備中實現「su」,並就如何正確使用它提供了一些指導。

+0

謝謝,我已經通過調用應用程序中蘇流程解決我的問題,所以基本上通過創建的「su」過程來處理受保護的內容。它工作正常,穩定和快速。此外,我檢查了Android的su實現,嘗試過,但失敗可能是因爲apt不是你說的可執行文件。好吧,謝謝! –

1

萬一張貼我的解決方案,而我在Java中沒有(在此不再本機代碼)的問題:

protected void hideRoot() throws IOException, InterruptedException { 
    Process p = Runtime.getRuntime().exec("su"); 
    DataOutputStream dos = new DataOutputStream(p.getOutputStream()); 
    dos.writeBytes("mount -o remount,rw /system\n"); 
    dos.writeBytes("mv /system/xbin/su /system/xbin/suhidden\n"); 
    dos.writeBytes("exit\n"); 
    dos.flush(); 
    p.waitFor(); 
} 
相關問題