RootExplorer怎么样获取root权限的——续
?
這回說(shuō)一下su程序和Superuser.apk是如何配合讓APK運(yùn)行時(shí)具有root權(quán)限的。看這篇文章之前,先看一下這一篇:
http://blog.csdn.net/a345017062/archive/2011/05/24/6441986.aspx
?
1、APK中調(diào)用su命令
2、su檢索數(shù)據(jù)庫(kù)(/data/data/com.koushikdutta.superuser/databases/superuser.sqlite),如果找到記錄的話,說(shuō)明當(dāng)前進(jìn)程已經(jīng)被用戶允許獲取ROOT權(quán)限,則進(jìn)行第4步。
3、如果沒(méi)有檢索到的話,su會(huì)通過(guò)am start命令打開(kāi)Superuser.apk中的SuperuserRequestActivity:
sprintf(sysCmd, "am start -a android.intent.action.MAIN -n com.koushikdutta.superuser/com.koushikdutta.superuser.SuperuserRequestActivity --ei uid %d --ei pid %d > /dev/null", g_puid, ppid); if (system(sysCmd))return executionFailure("am.");?
然后進(jìn)入循環(huán)等待,每隔一秒檢索一次數(shù)據(jù)庫(kù)是否有更新,等待的時(shí)間是10秒:
for (i = 0; i < 10; i++) {sleep(1);// 0 means waiting for user input// > 0 means yes/always// < 0 means noint checkResult = checkWhitelist();... ... }?
而SuperuserRequestActivity會(huì)顯示界面要求用戶選擇是否同意進(jìn)程獲取ROOT權(quán)限。用戶同意的話,就會(huì)把當(dāng)前進(jìn)程ID加入數(shù)據(jù)庫(kù),并退出Activity。否則,跳到第5步。
4、su在數(shù)據(jù)庫(kù)中檢索到進(jìn)程ID的話,說(shuō)明當(dāng)前進(jìn)程已經(jīng)被用戶允許獲取ROOT權(quán)限,則改變當(dāng)前進(jìn)程的用戶ID和組ID:
if(setgid(gid) || setuid(uid)) return permissionDenied();?
5、命令執(zhí)行完畢,進(jìn)程結(jié)束。
?
另外,安裝在系統(tǒng)中的APK每次運(yùn)行時(shí)所使用的進(jìn)程ID號(hào)是固定的。
?
總結(jié)
以上是生活随笔為你收集整理的RootExplorer怎么样获取root权限的——续的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

- 上一篇: [每日一题] 128. 青蛙过河(数组、
- 下一篇: java aoi 服务器地图_GitHu