android編譯root許可權
Ⅰ 怎麼用代碼判斷android手機是否開啟了ROOT許可權
android手機開啟了root許可權,主要是根據root之後,獲取了手機的最高許可權,底層linux系統就會生成一個以su結尾的文件,su代表super超級許可權,如下代碼:
/**
* 判斷當前手機是否有ROOT許可權
* @return
*/
public boolean isRoot(){
boolean bool = false;
try{
if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbin/su").exists())){
bool = false;
} else {
bool = true;
}
Log.d(TAG, "bool = " + bool);
} catch (Exception e) {
}
return bool;
}
android底層是使用linux進行編譯和一些驅動、網路管理的,所以可以根據linux的許可權特性來判斷是否root,許可權的管理在linux裡面很多,包括讀寫、刪除文件的許可權,也有關於訪問網路的許可權,這些許可權都需要開通才能有。
Ⅱ Android aosp源碼編譯後root許可權問題
ROOT獲得最高許可權是刪除這些應用的唯一途徑
實際手動操作的流程非常復雜,並且有版本限制
我推薦你款不錯的手機ROOT工具吧,
我一直都是在用的,很不錯
使用應用寶獲取手機root許可權在工具
選項里找到一鍵ROOT即可或者KINGROOT也行。
Ⅲ Android 的提權 (Root) 原理是什麼
Android的內核就是Linux,所以Android獲取root其實和Linux獲取root許可權是一回事兒。
你想在Linux下獲取root許可權的時候就是執行sudo或者su,接下來系統會提示你輸入root用戶的密碼,密碼正確就獲得root許可權了。Android本身就不想讓你獲得Root許可權,大部分手機出廠的時候根本就沒有su這個程序。所以你想獲得Android的root許可權,第一步就是要把編譯好的su文件拷貝到Android手機的/system/bin或者/system/xbin/目錄下。我們先假設你可以把su放在bin下,接下來你可以在Android手機的adb shell或者串口下輸入su了。上面說了,執行su,系統會提示你輸入root用戶密碼,但你怎麼可能知道密碼呢?暴力破解嗎?破解root的黑客當然不會這么做,這就涉及到第二個問題。
一般我們在Linux的console下輸入 ls -l 會列出所有文件的許可權。
比如:-rwxr-xr-x,用過Linux的人都知道r代表該文件可讀,w代表可寫,x代表可執行,-就代表沒有該許可權。第一個rwx代表文件所有者的許可權,第二個rwx代表和所有者同組人的許可權,第三個rwx代表其他用戶對該文件的許可權。但下面這個文件就比較特殊。
rws,它的執行許可權標志位是一個s,s代表當任何一個用戶執行該文件的時候都擁有文件所有者的許可權,這文件的所有者是root,簡單點說就是不管誰執行這個文件,他執行的時候都是以root身份執行的。那root用戶執行任何文件都是不需要密碼的。
這個時候如果你把su文件的許可權置成-rwsr-xr-x會發生什麼?su這個程序本來就是賦予執行者root許可權的,但執行的時候又不需要密碼,所以執行一下這個文件就自動成root身份了。
問題都清楚了,就是你需要把su拷貝到Android手機上,並且把su許可權標志位置成-rwsr-xr-x。能把這個事情搞定你就成功root了一個手機。
大概意思就是兩行代碼
cp /data/tmp/su /system/bin/ # su 到/system/分區
chmod 1775 /system/bin/su #把su置成-rwsr-xr-x
那怎麼搞定這個事情呢?Android的system分區本身不可寫,只有是root的許可權才能改動它,執行不了啊。
一個辦法就是找一個本身已經有root許可權的進程來啟動我上面的兩行代碼,那我這兩行代碼一啟動就是root許可權,就可以順利執行了。但是已經有root許可權的進程都是出廠時候就裝到手機上的,代碼寫死了,你沒法控制它執行你自己的代碼啊。這個時候就需要你找漏洞了,比如用來破解Android2.3 root許可權的zergRush漏洞就是利用一個擁有root許可權的進程棧溢出漏洞,棧溢出說白了就是這個進程讀到了自有內存之外的地址空間,這段內存空間沒分配給它,誰都能寫這段內存,那我就可以把自己的兩行代碼預先寫到這里,運行zergRush代碼,然後等那個倒霉的進程執行我就行了。
如果各位有一定基礎,能看懂我上面講的,就基本知道原理其實並不難,難點在於找到漏洞。
zergRush的代碼在這兒:
revolutionary/zergRush · GitHub
Ⅳ 在android源碼下編譯apk能有root許可權嗎
編譯apk和root許可權沒有聯系,apk是應用程序,root許可權是android系統里的設置,android系統不給root許可權,在源碼下編譯apk也是無用的
Ⅳ Android 手機如何獲得 root 許可權
Android 手機獲得 root 許可權
要想獲取root許可權就需要使用root工具,現在網路root、卓大師、騰訊管家等常用工具都有獲取root許可權的功能。不過有的工具支持的機型不多。 這里卓大師的感覺支持的機型多點, 大家可以下載自己喜歡的工具來使用!或者使用網路這樣大公司研發的工具。
Ⅵ Android 程序如何通過編程獲取 root 許可權運行
Android是基於linux,在linux系統里,想通過root許可權運行程序,需要使用su命令先切換到root用戶,然而在Android系統里沒有預置su命令,因此如果使用root許可權,需要在linux系統中進行非法提權,俗稱就是破解ROOT,一般情況下都是通過發現內核漏洞,讓系統執行一小塊代碼,這段代碼能充分利用該漏洞,從而非法獲取ROOT許可權。
獲取了ROOT許可權之後,就可以為所欲為,植入su命令到系統就可以了。
因此,對於已經破解ROOT的android系統,想通過ROOT許可權運行,先執行su即可。
如果尚未破解ROOT,需要在程序中先破解ROOT,通常情況下,不同版本的android的系統,使用的破解代碼也不一樣。Ⅶ 對安卓手機進行root的原理是什麼
Android的內核就是Linux,所以Android獲取root其實和Linux獲取root許可權是一回事兒。想在Linux下獲取root許可權的時候就是執行sudo或者su,接下來系統會提示輸入root用戶的密碼,密碼正確就獲得root許可權了。
Android本身就不想讓獲得Root許可權,大部分手機出廠的時候根本就沒有su這個程序。所以想獲得Android的root許可權,第一步就是要把編譯好的su文件拷貝到Android手機的/system/bin或者/system/xbin/目錄下。先假設可以把su放在xbin下,接下來可以在Android手機的adb shell或者串口下輸入su了。
Linux下su以後輸入密碼就可以root了,但Android里的su和Linux里的su是不一樣的,Android里的su不是靠驗證密碼的,而是看原來的許可權是什麼。意思就是如果是root,那可以通過su切換到別的用戶,比如說shell,wifi,audio什麼的。但如果是root之外的其他用戶,就不能切換回root了,會提示permission denied。
Ⅷ 有android源碼的情況下怎麼開放系統的root許可權
編譯的時候選debug版本 然後編譯完成之後通過adb remout和adb root就可以了
Ⅸ 如何讓android 程序 獲得 root許可權
一般來說, Android 下的應用程序可以「直接」得到的最大的許可權為 system ,但是如果我們需要在程序中執行某些需要 root 許可權的命令,如 ifconfig 等,就需要 root 許可權了。按照 Simon 的文章中提到的,應用程序有以下兩種辦法臨時獲得 root 許可權:
1) 實現一個 init 實現一個 Service ,來幫助 Android 應用程序執行 root 許可權的命令。
2) 實現一個虛擬設備,這個設備幫助 Android 應用程序執行 root 許可權的命令。
第二種辦法我這里沒有嘗試,暫時也不會。這里講講我在實現第一種辦法的過程和遇到的一些問題。
1. 將我們要執行的命令寫成腳本,或者可執行程序。
下面是我的腳本 ifconfig_test.sh :
# ! /system/bin/sh
ifconfig
注意: 腳本的第一行必須為 # ! /system/bin/sh ,否則無法執行,通過 dmesg 可以查看到信息內容為 cannot execve ./ifconfig_test.sh: Exec format error
也可以採用 C/C++ 編寫需要執行的命令或者程序,並在編譯 image 的時候編譯成可執行程序。
2. 在 init.rc 中注冊 service
Android 中的 service 需要在 init.rc 中注冊, Init.rc 中定義的 Service 將會被 init 進程創建,這樣將可以獲得 root 許可權。當得到相應的通知(通過屬性設置)後, init 進程會啟動該 service 。
本文中注冊的內容如下:
service ifconfig_test /system/etc/ifconfig_test.sh
oneshot
disabled
其中, oneshot 表示程序退出後不再重新啟動, disabled 表示不在系統啟動時啟動。
注意: 這里 service name 不能超過 16 個字元。我之前的 service name 由於定義的比較長, 18 個字元,設置屬性通知 service 啟動後查看 dmesg 可以看到提示: init: no such service 。查看 /system/core/init/parser.c 的源代碼,在 parse_service->valid_name 函數中可以看到如下內容: if (strlen(name) > 16) { return 0; } ,證明 service 的名字的確不能超過 16 個字元。
3. 將 Android 應用程序提升為 system 許可權
既然應用程序可以通過啟動 service 獲得 root 許可權,那麼豈不是很不安全。 Android 考慮到了這點,規定只有 system 許可權的應用程序才能設置屬性,通知 service 啟動。關於提升 system 許可權的文章網上已有很多,這里就不再細說,
4. 在應用程序中添加屬性設置代碼
前面已經提到,對於 Android 來說,應用程序通知 init 啟動 service 是通過設置系統屬性來完成的,具體為設置 System 系統屬性 「ctl.start」 為 「ifconfig_test」 ,這樣 Android 系統將會幫我們運行 ifconfig_test 這個 service 了。
對該系統屬性的設置有三種方法,分別對應三種不同的應用程序:
1) Java 代碼
Android 在 Java 庫中提供 System.getProperty 和 System.setProperty 方法, Java 程序可以通過他們來設置和獲得屬性。代碼如下:
SystemProperties.set("ctl.start", "ifconfig_test");
上面的代碼是通知 Android 執行 ifconfig_test service ,如果需要查詢當前 service 執行的狀態,如是否執行完畢,可以通過如下代碼查詢:
ret = SystemProperties.get("init.svc. ifconfig_test ", "");
if(ret != null && ret.equals("stopped"))
{
return true;
}
2) JNI 代碼
當編寫 NDK 的程序時,可以使用 property_get 和 property_set 這兩個 API 來獲得和設置屬性。使用這兩個 API 必須要包含頭文件 cutils/properties.h 和鏈接 libcutil 庫。
3) Shell 腳本
Android 提供了命令行 setprop 和 getprop 來設置和獲取屬性,他們可以在腳本中被使用。
由於我的程序是在 JNI 中調用腳本,腳本中又執行 ifconfig ,因此我將設置屬性的部分放在了腳本中完成,代碼如下:
setprop ctl.start ifconfig_test
#wait for the service until it stops
ret=1
while [ $ret -ne 0 ]
do
getprop | grep "$ENABLE_MAPPER_SRV" | grep stopped
ret=$?
done
通過上面 4 個步驟, Android 應用程序就獲得了 root 許可權,更具體的說,是在執行我們需要執行的命令時臨時獲得了 root 許可權。
轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦