當前位置:首頁 » 安卓系統 » androidapkroot

androidapkroot

發布時間: 2023-03-24 05:55:49

⑴ 怎樣使Android apk 獲取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 許可權。
轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦

⑵ Android應用程序怎樣獲取root許可權

Android應用程序獲取root許可權,前提時設備必須已經破解過,能夠執行su命令之後,就可以使用String apkRoot="chmod 777 "+getPackageCodePath(); RootCommand(apkRoot);方式來給應用程序賦予足夠的root許可權,代碼如下:

一、建一個方法:代碼如下:
package cn.ycmoon.utility;

import java.io.DataOutputStream;

import android.app.Activity;
import android.util.Log;

public class SystemManager extends Activity
{
/**
* 應用程序運行命令獲取 Root許可權,設備必須已破解(獲得ROOT許可權)
* @param command 命令:String apkRoot="chmod 777 "+getPackageCodePath(); RootCommand(apkRoot);
* @return 應用程序是/否獲取Root許可權
*/
public static boolean RootCommand(String command)
{
Process process = null;
DataOutputStream os = null;
try
{
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(command + "\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
} catch (Exception e)
{
Log.d("*** DEBUG ***", "ROOT REE" + e.getMessage());
return false;
} finally
{
try
{
if (os != null)
{
os.close();
}
process.destroy();
} catch (Exception e)
{
}
}
Log.d("*** DEBUG ***", "Root SUC ");
return true;
}
}

二、在應用程序的MainActivity方法中:

public class MainActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String apkRoot="chmod 777 "+getPackageCodePath();
SystemManager.RootCommand(apkRoot);
}
}

⑶ 怎樣使Android apk 獲取root許可權

1,到網路搜SHUAME,下載刷機精靈,安裝;(軟體可用卓大師,甜椒刷機,360一鍵ROOT…)
2,手機按「菜單鍵」,打開「應用程序」,選中「未知來源」,選中孝含亮「開發」下的「USB調試」;
3,電腦用USB連接手機;
4,選擇自動識別下載手機硬體驅動,查看手機信息,能看到手機巧寬界面;
5,點擊「實用工具」,「ROOT破解……」,等待1到2分鍾,自動重啟,,看手機信息,是否成功ROOT。
6,顯示ROOT後,,安裝一個SUPERUSER用於分配許可權的老納軟體就可以了。(可以到UC瀏覽器,必備軟體,搜索下載)……

⑷ 怎樣使Android apk 獲取root許可權

執行shell腳本是做不到獲取root許可權的,目前比較靠譜的辦法有兩個:
一:github有一個開源的第三方庫,可和臘以讓你的app獲取root許可權,需要用戶點擊同意才可以實現
二:linux下有一個busybox的工具,具體你網路一下,研究一下看是否能夠賀棚塌做到,我的圈子裡面還沒有人做到了,可以反編譯一下360root看看。
我以前做應用商城的也要做這個需求,當時沒有實現,也是采禪圓用shell腳本的方法。

⑸ 怎樣使Android apk 獲取root許可權

1)下載騰訊手磨液機管家PC版,安裝完成並成功連接上手機;
2)打開騰訊手機管家PC版----工具箱----第三方工具中,就可以看到kingroot工具;
3)顫散點擊kingroot,手機與電腦連接正瞎洞物常後點擊「一鍵root」,root過程正式開始,期間大約需用1分鍾左右的時間,因部分機型差異,時間可能稍長;顯示「連接正常」 ;整個Root過程完成,點擊「退出Kingroot」即可!
4)ROOT過程中盡量不要觸碰手機的數據線,防止手機與電腦斷開,造成ROOT失敗,基本上只要等候3—5分鍾就搞定了

⑹ 怎樣使Android apk 獲取root許可權

手機明神root之後安裝一個許可權管理軟體,然後其他apk需要root許可權的時候會彈出提示,這時候通過root許可權管理軟體給予apk應用root許可權,即相應的apk獲得了root權激碼虧限。
1.root手模手機系統 2.安裝許可權管理軟體。(通常1,2是一起的)

⑺ 怎樣使Android apk 獲取root許可權

首先手機要root,然後在設譽橡置-開發者選項(不同手機界面不同)開啟root,一般手機apk如果盯擾需要root許可權都會提醒,沒提醒的在安全中心或凱虛旦者supersu等開啟

⑻ apk如何獲取root許可權

在apk中,有時候需要root許可權,例如通過apk更新州洞系統庫等system的文件等,避免升級固件,或者在apk中需要直接訪問某些設備等。下面是在apk中獲取root許可權的方法,前提是設備已經root過了。
關鍵點在於下面這句,通過執行su產生一個具有root許可權的進程:
Process p = Runtime.getRuntime().exec("su");
然後,在向這個進程的寫入要執行的命令,即可達到以root許可權執行命令:
dos = new DataOutputStream(p.getOutputStream());
dos.writeBytes(cmd + " ");
dos.flush();
或者用下面的方式:
Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c", cmd});

經過測試,以root許可權執行命令,只在真機上測試成功,在模擬器上沒有成功過。

第一次運行時,會出現請求root許可權的界面,選中記住,並允許:

主要文件:RootCmd.java
[java]
package org.ckl.root;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

import android.util.Log;

public final class RootCmd {

private static final String TAG = "RootCmd";
private static boolean mHaveRoot = false;

// 判斷機器Android是否已經root,即是否獲取root許可權
public static boolean haveRoot() {
if (!mHaveRoot) {
int ret = execRootCmdSilent("echo test"); // 通過執行測試命令來檢測
if (ret != -1) {
Log.i(TAG, "have root!");
mHaveRoot = true;
} else {
Log.i(TAG, "not root!");
}
} else {
Log.i(TAG, "mHaveRoot = true, have root!");
}
return mHaveRoot;
}

// 執行命令並且輸出結果
public static String execRootCmd(String cmd) {
String result = "";羨跡猛
DataOutputStream dos = null;
DataInputStream dis = null;

try {
Process p = Runtime.getRuntime().exec("su");// 經過Root處理的android系統即有su命令
dos = new DataOutputStream(p.getOutputStream());
dis = new DataInputStream(p.getInputStream());

Log.i(TAG, cmd);
dos.writeBytes(cmd + " ");
dos.flush();
dos.writeBytes("exit ");
dos.flush();
String line = null;
while ((line = dis.readLine()) != null) {
兄橋 Log.d("result", line);
result += line;
}
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (dos != null) {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (dis != null) {
try {
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}

// 執行命令但不關注結果輸出
public static int execRootCmdSilent(String cmd) {
int result = -1;
DataOutputStream dos = null;

try {
Process p = Runtime.getRuntime().exec("su");
dos = new DataOutputStream(p.getOutputStream());

Log.i(TAG, cmd);
dos.writeBytes(cmd + " ");
dos.flush();
dos.writeBytes("exit ");
dos.flush();
p.waitFor();
result = p.exitValue();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (dos != null) {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
}

相關文件:SystemPartition.java,獲取/system分區設備節點,並支持重新mount /system為可讀寫:
[java]
package org.ckl.root;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import android.util.Log;

public class SystemPartition {
private static final String TAG = "SystemMount";
private static String TMP_PATH = "/sdcard/mount.txt";
private static String mMountPiont = null;
private static boolean mWriteable = false;

private SystemPartition() {
Log.i(TAG, "new SystemMount()");
}

private static class SystemPartitionHolder {
private static SystemPartition instance = new SystemPartition();
}

public SystemPartition getInstance() {
return SystemPartitionHolder.instance;
}

public static String getSystemMountPiont() {
DataInputStream dis = null;
if (mMountPiont == null) {
try {
RootCmd.execRootCmd("mount > " + TMP_PATH);
// Runtime.getRuntime().exec("mount > " + TMP_PATH);

dis = new DataInputStream(new FileInputStream(TMP_PATH));

String line = null;
int index = -1;
while ( (line = dis.readLine()) != null ) {
index = line.indexOf(" /system ");
if (index > 0) {
mMountPiont = line.substring(0, index);
if (line.indexOf(" rw") > 0) {
mWriteable = true;
Log.i(TAG, "/system is writeable !");
} else {
mWriteable = false;
Log.i(TAG, "/system is readonly !");
}
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (dis != null) {
try {
dis.close();
} catch (IOException e1) {
e1.printStackTrace();
}
dis = null;
}

File f = new File(TMP_PATH);
if (f.exists()) {
f.delete();
}
}
}

if (mMountPiont != null) {
Log.i(TAG, "/system mount piont: " + mMountPiont);
} else {
Log.i(TAG, "get /system mount piont failed !!!");
}

return mMountPiont;
}

public static boolean isWriteable() {
mMountPiont = null;
getSystemMountPiont();
return mWriteable;
}

public static void remountSystem(boolean writeable) {
String cmd = null;
getSystemMountPiont();
if (mMountPiont != null && RootCmd.haveRoot()) {
if (writeable) {
cmd = "mount -o remount,rw " + mMountPiont + " /system";
} else {
cmd = "mount -o remount,ro " + mMountPiont + " /system";
}
RootCmd.execRootCmdSilent(cmd);

isWriteable();
}
}
}

⑼ android apk 的root 許可權和USB adb 許可權的區別

USB adb 許可權是指,當adb 連接手機時,手機中的守護進程adbd 的許可權為root 許可權,從而它的子進程也具有root 許可權,通常如果adb shell 看到是:
Android 4.0 以後版本:
C:\Users\mtk29\Desktop>adb shell
root@android:/ #
Android 2.3 版本:
C:\Users\mtk29\Desktop>adb shell

即表明adb 的連接是root 許可權的,相反如果看到是$ 即表明是shell 許可權
Android 的APK 本身都是不具備root 許可權的,如果想啟用root 許可權,那麼就必須藉助具有root 許可權的進程或者具有s bit 的文件,目前比較通用的手法是,手機root 後,內置了su到system/bin, 然後普通APP 即可藉助su 命令來達到root 許可權切換。
網路上已經有同仁修改su 命令,並通過一個APK 來控制su 命令的許可權控制。
如常見的Superuser: 這樣即可人為的控制root 許可權的使用。((因很久都沒有更新了,只能用於ICS 以及以前的版本))

綜上所敘,如果adb 已經有root 許可權,那麼讓apk 行使root 許可權就很簡單了。比如在JB 版本或者以前的版本上:
adb remount
adb push su /system/bin
adb push Superuser.apk /system/app
adb shell chmod 0644 /system/app/Superuser.apk
adb shell chmod 6755 /system/bin/su
adb reboot

熱點內容
編譯有哪兩種模式 發布:2024-04-26 17:53:30 瀏覽:870
伺服器電腦上能用嗎 發布:2024-04-26 17:44:42 瀏覽:559
組件式編程 發布:2024-04-26 17:19:57 瀏覽:942
電子兒童存錢罐如何改密碼 發布:2024-04-26 17:19:13 瀏覽:600
什麼安卓手機直播投屏好 發布:2024-04-26 17:18:31 瀏覽:626
linuxhba查看 發布:2024-04-26 16:57:28 瀏覽:903
啟動mongodb服務linux 發布:2024-04-26 16:38:37 瀏覽:553
525標軸選裝哪些配置 發布:2024-04-26 16:34:24 瀏覽:849
機械硬碟的存儲速度優於固態硬碟 發布:2024-04-26 16:02:13 瀏覽:118
訊捷壓縮器 發布:2024-04-26 16:02:08 瀏覽:269