【笔记】Android手机root的概念

摘要:
关于Android手机USB连接电脑的相关内容,可参考:《Android应用.三星i9000系列.版本选择与USB连接电脑》四、SuperOneClick提取Root权限的基本步骤F:/Own/Phone/Samsung/Tools/SuperOneClick的目录下所有文件2010/10/1622:04577,335adb.exe2010/10/1811:27339,885adblinux2010/10/1811:26171,656adbmac2010/10/1622:0496,256AdbWinApi.dll2010/10/1622:0460,928AdbWinUsbApi.dll2010/10/1623:291,062,992busybox2010/10/1622:045,392rageagainstthecage//步骤一2010/10/1622:0424,120sqlite32010/10/1622:0426,264su//步骤二2010/11/0421:21379,392SuperOneClick.exe2010/10/1622:04196,521Superuser.apk//步骤三手机USB调试方法连接好电脑后,在电脑上运行SuperOneClick.exe,在弹出的界面上,点击Root按钮,便开始了Root权限提取的自动操作!命令如下:F:/Own/Phone/Samsung/Tools/SuperOneClick˃adbpushrageagainstthecage/data/local/tmp2)使用adbshell,修改rageagainstthecage文件权限F:/Own/Phone/Samsung/Tools/SuperOneClick˃adbshell$cd/data/local/tmpcd/data/local/tmp$chmod777rageagainstthecage3)使用adbshell,运行rageagainstthecage$./rageagainstthecage[*]CVE-2010-EASYAndroidlocalrootexploit2010by743C[*]checkingNPROClimit…

----設法拿到 root 權限(gingerbreak orrageagainstthecage)-> 更改系統為可讀寫狀態 -> 把修改版的 su 放進 /system/bin -> 安裝 Superuser.apk (擺進 /system/app 裡) -> 回復系統狀態 -> 收工

在linux下面,当我们需要用管理员的身份来运行程序的时候,我们可以通过su来切换到root用户下。但官方的手机系统里面,为了安全起见,是不带有这个命令文件的,使得我们无法得到系统管理员的高级权限。

既然官方没有给我们提供这样的便利条件,我们可以自己来创造。前面的文章介绍过,手机的ROM就相当于电脑的硬盘,也有自己的目录和各种文件,而我们把su放进rom的相关目录下(比如system/xbin/)的这个过程就叫做rooting,大家经常在论坛里看到的,说要把手机root,其实就是说的这个过程,我们称之为rooting似乎更为恰当些。把su放进手机里面的同时,我们也就具备了通过su来切换到root用户的条件。
为了防止不良软件也取得root用户的权限,当我们在rooting的过程中,还会给系统装一个程序,用来作为运行提示,由用户来决定,是否给予最高权限。这个程序的名字通常叫做superuser。
当某些程序执行su指令想取得系统最高权限的时候,superuser就会自动启动,拦截该动作并作出询问,当用户认为该程序可以安全使用的时候,那么我们就选择允许,否则,可以禁止该程序继续取得最高权限。
所以,rooting的过程,其实就是往系统里拷贝su和superuser两个程序的过程。当然,卸载掉这两个程序,手机也就失去了切换到管理员用户root的条件。
讲到这里,你应该已经清楚什么是root了吧。root只是一个用户账号,它具备在linux世界里最高的权限,我们平时所谓的root,其实应该叫rooting,他是一个过程,是把su和superuser这两个程序放到手机相应目录的这样一个过程。而通常,厂商是不会允许我们随便这么去做的,我们就需要利用操作系统的各种漏洞,来完成这个过程。由于手机型号不同,品牌不同,对应的漏洞自然也会不同,那么,rooting的过程也就会有所不同,所以前面说,没有一个固定的rooting操作流程就是这个原因了。做完这个工作了,也就可以说:你的手机已经root了。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

http://blog.csdn.net/liwei_cmg/article/details/6313944

root方法与Linux的内核版本相关。

有关Root权限的获取方法可参考《Android应用.三星i9000系列(3).无需刷机轻松获取Root权限》

本系列文章:http://blog.csdn.net/liwei_cmg/category/241839.aspx

原理简介

我们已经知道adb(Android Debug Bridge)这个概念,不管是Moto的,还是Samsung
的,Android手机通过USB连接电脑后,安装好驱动,在设备管理器里都会看到Android
Composite ADB Interface这样的东东。SuperOneClick就是调用的adb这样的接口。
同样豌豆荚,91手机助手这样的软件也是使用了adb。

关于Android手机USB连接电脑的相关内容,可参考:
《Android应用.三星i9000系列(1).版本选择与USB连接电脑》

四、SuperOneClick提取Root权限的基本步骤

F:/Own/Phone/Samsung/Tools/SuperOneClick 的目录下所有文件

2010/10/16 22:04 577,335 adb.exe
2010/10/18 11:27 339,885 adblinux
2010/10/18 11:26 171,656 adbmac
2010/10/16 22:04 96,256 AdbWinApi.dll
2010/10/16 22:04 60,928 AdbWinUsbApi.dll
2010/10/16 23:29 1,062,992 busybox
2010/10/16 22:04 5,392 rageagainstthecage //步骤一
2010/10/16 22:04 24,120 sqlite3
2010/10/16 22:04 26,264 su //步骤二
2010/11/04 21:21 379,392 SuperOneClick.exe
2010/10/16 22:04 196,521 Superuser.apk //步骤三

手机USB调试方法连接好电脑后,在电脑上运行SuperOneClick.exe,在弹出的
界面上,点击Root按钮,便开始了Root权限提取的自动操作!

其实它的步骤是这样的:

步骤一:将rageagainstthecage文件存放在手机/data/local/tmp下,并执行
——————————————————————————–

1) 将文件放在/data/local/tmp下,其他目录无法执行。命令如下:
F:/Own/Phone/Samsung/Tools/SuperOneClick>adb push rageagainstthecage /data/local/tmp

2) 使用adb shell,修改rageagainstthecage文件权限
F:/Own/Phone/Samsung/Tools/SuperOneClick>adb shell
$ cd /data/local/tmp
cd /data/local/tmp
$ chmod 777 rageagainstthecage

3) 使用adb shell,运行rageagainstthecage
$ ./rageagainstthecage

[*] CVE-2010-EASY Android local root exploit (C) 2010 by 743C

[*] checking NPROC limit …
[+] RLIMIT_NPROC={2410, 2410}
[*] Searching for adb …
[+] Found adb as PID 19374
[*] Spawning children. Dont type anything and wait for reset!
[*]
[*] If you like what we are doing you can send us PayPal money to
[*]7-4-3-C@web.deso we can compensate time, effort and HW costs.
[*] If you are a company and feel like you profit from our work,
[*] we also accept donations > 1000 USD!
[*]
[*] adb connection will be reset. restart adb server on desktop and re-login.
$

此时退出shell,再次使用adb shell,会发现提示符为#,已经在电脑Shell
上获取了Root权限。如果不是#,重复执行(./rageagainstthecage),
直到提示#。

F:/Own/Phone/Samsung/Tools/SuperOneClick>adb shell
#

步骤二:将/system修改为可读写,把su复制到/system/bin/
——————————————————————————–

1)上步骤一成功出现的#号提示符下,修改/system
# mount -o remount rw /system
#

2)另开一个命令行窗口,复制su至/system/bin
F:/Own/Phone/Samsung/Tools/SuperOneClick>adb push su /system/bin

su这个文件的功能,便是实现:普通用户至root超级用户的权限切换!

步骤三:将授权管理的标准Android软件包(Superuser.apk)复制到手机并安装
——————————————————————————–

这个过程很简单,不再赘述,就是adb push与adb install。授权管理其实
就是管理哪些程序能够使用su。也就意味着对超级用户权限的使用进行管理。

步骤四:重启手机
——————————————————————————–

其实就是重启测试一下。

五、总结
在提取Root权限过程中,只有两个重要的文件:

rageagainstthecage
su

rageagainstthecage负责直接破解获取Root权限,然后才能修改/system/。
su如果只放在/data/local/tmp目录下,是没有权限运行的。

$ ls -l su
ls -l su
-rwxrwxrwx shell shell 26264 2010-10-16 22:04 su
$ ./su
./su
Permission denied
$

所以需要把su放在/system/bin目录下。以供以后的手机应用程序使用

--------------------------------------------------------------------------------------------------------

Android的应用程序入口肯定是Java程序。应用程序的启动者是由系统临时根据Androidmanifest.xml中定义的权限而创建的临时用户。而不像linux那样是使用登陆者的身份启动,从而使得进程具有登陆者的所有权限。这也是Android的安全机制之一。
新的权限机制也带来新的问题,Android给应用程序的权限是按功能来分,java虽然可以访问文件系统。但由于应用程序本身是临时用户启动,这个临时用户权限十分有限。因此诞生了<越狱/root机器>这样的产物。
其实root机器不是真正能让你的应用程序具有root权限。它原理就跟linux下的像sudo这样的命令。在系统的bin目录下放个su程序并属主是root并有suid权限。则通过su执行的命令都具有Android root权限。
Su的源代码网上也有,有兴趣的同学去google下。
当然使用临时用户权限想把su拷贝的/system/bin目录并改属性并不是一件容易的事情。这里用到2个工具跟2个命令。工具就是busybox。不熟悉的同学可以去网上google下。这个太有名了我就不多说了。
把busybox拷贝到你有权限访问的目录然后给他赋予4755权限,你就可以用它做很多事了。
当然busybox只能不能提升权限,真正提升权限的是ratc这个程序,这个程序中一键root包里面可以找到,作用是rooting在adb的shell。
网上介绍Ratc的文章不多,它是rage against the cage 的缩写。是真正的提升权限的破解程序。虽然我没看过源代码,但估计是利用adb源代码部分内容来实现的,原理估计跟模拟器使用adb shell登陆可以获得root shell差不多。(因为它运行需要adb连接才会成功)。
使用busybox前先运行ratc,这样运行busybox的UID将是0,也就是root。
首先把system目录改成可读性的:busybox mount -o remount,rw /system,
当然你还不能改下面的文件,因为system下文件的所有者都不是你。
但你可以偷梁换柱把system下的目录给换掉。
使用命令Busybox mount -t tmpfs none /system/xbin,呵呵这下xbin目录你随便写了。
将su跟busybox弄过去cp /data/data/xxx/su /system/xbin。然后赋权限chmod 4755 /system/xbin/su。
然后使目录生效busybox --install -s /system/xbin,
别忘善后busybox mount -o remount,ro /system去掉system可写。
这样只是临时的,只能用su跟busybox能执行一些原来系统没有权限执行的命令而已。当然我们不是搞破解的没必要去改别人的机器,我们只是想让自己应用程序具有root权限而已。所以临时的su就可以了。我们用c++写一个可执行文件。使用socket可以跟java的程序通讯。然后将需要使用root权限才能执行的代码放在c++程序里,然后java程序中创建新的su进程,将c++程序带全路径作为参数1。启动后就可以通过socket调用c++函数去执行你想干的事了。
最后程序执行完了别忘了善后busybox umount /system/xbin。

------------------------------------------------------------------------------------------------------------------------------------------

http://changyy.pixnet.net/blog/post/29026097-%5Bandroid%5D-root-%E5%8E%9F%E7%90%86%E8%88%87%E6%89%8B%E5%8B%95-root-%E8%A9%B3%E7%B4%B0%E9%81%8E%E7%A8%8B-@-nexus-one

[Android] Root 原理與手動 Root 詳細過程 @ Nexus One、Android 2.3.3、Ubuntu 10.04

之前幫 SE X8 with Android 2.1 做過一次 root ([Android] Sony Ericsson XPERIA X8 - Root 教學、關閉拍照聲音),使用的是SuperOneClick,僅需抓一下手機驅動程式、連接好 micro usb 線,執行程式並按下按鈕,整個過程就結束了。隨後我開始研究到底 root 做了啥事,因為我總覺得好像只要把 su 這隻程式擺進 Android 系統中 ( /system/bin 和 /system/xbin ) ,似乎就完成動作了??

幾番研究後,追了一些文章,其中看到這篇寫得滿仔細的:Simple SDK setup and manual root guide (Windows),經測試也算正常 work 啦,不過有一些過程並不一樣,就順手記一下好了。除此之外,經過這幾篇的操作,稍微明瞭也修正一些觀念:

重灌:

[Android] 第一次使用實體手機 + 清乾淨 + 重裝系統 @ Nexus One中,自以為透過 "重設為原廠設定" 和 "Recovery from update.zip" 可以回到最乾淨的系統狀態,事後我發現當我把手機 root 後並安裝 Superuser 後,經過上述兩者並不會移除 Superuser 程式,也讓我想起來看到 update.zip 裡頭的 script 事情,是的,上述兩者只能說依照 script 去做事,所以 script 上頭沒提到的就不會做。所以真正要清乾淨系統的方式,應該是要透過 flashboot 去重刷整個系統,如[Android] Building AOSP & Back to Original Shipping Image @ Nexus One 、Ubuntu 10.04 x86 & Mac OSX 10.6.7這篇中間所提到,完整清除資料並刷回原廠等動作。這樣也就很清楚為啥想要回復到原廠狀態需要 "原廠 ROM" 囉。

Root 原理:

整個流程目的是將修改後的 su 指令擺進 /system/bin 目錄中(有的還會提到 /system/xbin),然而,預設系統是 Read Only 的,所以想辦法取得 root 權限,接著將系統弄成 Writable 後,把修改過的 su 擺好位置,除此之外,則是將 Superuser.apk 擺進 /system/app ,對 /system/app 目錄進行動作,等於安裝一套軟體,同理把程式移出去就代表移除,實際例子可參考[Android] Sony Ericsson XPERIA X8 - 刪除內建程式。而 Superuser 這是一款可以管理 root 權限的程式,可以在 Android 手機上操作使用,常常被用來判斷你的手機是否 root 過,因為修改過的 su 版本都是搭配此程式使用的,故一般有 root 過的手機應該都會裝 Superuser 囉

總結流程:

設法拿到 root 權限 -> 更改系統為可讀寫狀態 -> 把修改版的 su 放進 /system/bin -> 安裝 Superuser.apk (擺進 /system/app 裡) -> 回復系統狀態 -> 收工

Root 方式:

手動處理

使用 Android SDK 之 adb 程式,透過 adb push 把檔案移到手機內,並透過 adb shell 連進手機,後續動作如 root 原理流程

透過 SuperOneClick.exe 代勞

實例參考:[Android] Sony Ericsson XPERIA X8 - Root 教學、關閉拍照聲音,仔細看程式的輸出的每一步,就是上述 root 原理的流程啦

透過安裝某個程式 (*.apk)

透過他搶到執行權限,接著把程式內偽裝成圖檔的程式執行(副檔名皆為 png 或 jpg 類的),如此一來也能搞定

透過 update.zip 進行系統回復

仔細去看 script 就可以看到 root 原理的流程喔

在此以 Nexus One with Android 2.3.3 為例,在 Ubuntu 10.04 進行手動 root 流程:

以下是以 Nexus One with Android 2.3.3 進行測試的,不確定是否適用於其他手機環境,並且 root 手機存在風險,其自行評估負責,在此僅供個人筆記使用

Step 0:取得 Android SDK (此步驟可以跳過,因為接下來所需的檔案都在 GingerBreak.zip 裡都有)

只需從Android SDK - http://developer.android.com/sdk/index.html下載 Android SDK 後,並更新 SDK 即可。(執行 Android SDK 需要 Java 執行環境,別忘了抓一下 Java SDK 啦)

若在 Windows XP 則需要更新 Android SDK 以取得驅動程式,驅動程式擺在 C:\Program Files\android-sdk\extras\google\usb_driver\ 裡,記得 Nexus One 有普通模式(Google, Inc. Nexus One)和 fastboot 模式(htc, Inc. Android 1.0),兩者所使用的驅動程式不同,但資料都在上述的目錄中。

Step 1:使用 GingerBreak.zip 為例,在Simple SDK setup and manual root guide (Windows)下載

裡頭有兩個目錄,一個是有 adb 程式,另一個有 Nexus One 之 Windows 上的驅動程式。

Step 2:在 Ubuntu 10.04 上,設定 USB 對應;在 Windows 上,則是安裝驅動程式(當設備接時,透過指定驅動程式的目錄來安裝)

此為 Ubuntu 10.04 的設置,若是 Windows 可跳過

$ sudo vim /etc/udev/rules.d/51-android.rules

# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"

別忘了將 <username> 替換掉。

$ sudo service udev restart

Step 3:正式進入 root 流程,使用 adb 指令與 Nexus One 互動

首先,將 Nexus One 啟動 USB Debug 模式,在 [設定] -> [應用程式] -> [開發] -> [USB 偵錯] 後,並使用 micro usb 與 PC 連接

使用 adb devices 確認是否有連到機器,應該要可以看到 HT##### 的東西:

$ adb devices

使用 adb push 將 GingerBreak.zip 裡的 su 、 Superuser.apk 、GingerBreak 和 busybox 複製到 /data/local/tmp 中:

$ adb /path/GingerBreak/su /data/local/tmp/
$ adb /path/GingerBreak/Superuser.apk /data/local/tmp/
$ adb /path/GingerBreak/GingerBreak/data/local/tmp/
$ adb /path/GingerBreak/busybox /data/local/tmp/

關於 busybox 的東西,其實,主因是 Android 手機內的環境沒有 cp 指令,所以上述作者透過 busybox 來做 copy 的動作。

使用 adb shell 連進手機查看:

$ adb shell
$ cd /data/local/tmp
$ ls -l
busybox
Superuser.apk
GingerBreak
su

透過 GingerBreak 取得 root 權限:

$ cd /data/local/tmp
$ chmod 755 GingerBreak
$ ./GingerBreak

[**] Gingerbreak/Honeybomb -- android 2.[2,3], 3.0 softbreak
[**] (C) 2010-2011 The Android Exploid Crew. All rights reserved.
[**] Kudos to jenzi, the #brownpants-party, the Open Source folks,
[**] Zynamics for ARM skills and Onkel Budi

[**] donate to 7-4-3-C@web.de if you like
[**] Exploit may take a while!

[+] Plain Gingerbread mode!
[+] Found system: 0x######## strcmp: 0x########
[+] Found PT_DYNAMIC of size 232 (29 entries)
[+] Found GOT: 0x########
[+] Using device /devices/platform/goldfish_mmc.0
[*] vold: 0063 GOT start: 0x########GOT end: 0x########
[*] vold: 0063 idx: -#### fault addr: 0x########
[+] fault address in range (0x########,idx=-####)
[+] Calculated idx: -####
[*] vold: 0635 idx: -000####
[*] vold: 0635 idx: -000####
[*] vold: 0635 idx: -000####
[*] vold: 0635 idx: -000####
[*] vold: 0635 idx: -000####
[*] vold: 0635 idx: -000####
[*] vold: 0635 idx: -000####
[*] vold: 0635 idx: -000####
[*] vold: 0635 idx: -000####
[*] vold: 0635 idx: -000####

[!] dance forever my only one
#

當看到 "dance forever my only one" 以及提示符號從 "$" 換成 "#" 時,代表取得"暫時性"的 root 權限了。依照 GingerBreak 的執行過程,感覺有點類似透過 Buffer Overflow 去取的 root 權限,但細節不清楚還需研究。

趁著 root 權限時,將系統設定為可讀寫:

# mount
...
/dev/block/mtdblock3 /system yaffs2ro,relatime 0 0
...
#mount -oremount,rw /dev/block/mtdblock3 /system
# mount
...
/dev/block/mtdblock3 /system yaffs2rw,relatime 0 0
...

將 su 和 Superuser.apk 移到特定位置:

# cd /data/local/tmp
# chmod 755 busybox
# chmod 777 /system/bin /system/app
# ./busybox cp /data/local/tmp/su /system/bin/
# ./busybox cp /data/local/tmp/busybox /system/bin/
# ./busybox cp/data/local/tmp/Superuser.apk /system/app
# chown root /system/bin/su /system/bin/busybox
# chmod 4755 /system/bin/su
# chmod 755 /system/bin /system/app

回復系統狀態:

# mount
...
/dev/block/mtdblock3 /system yaffs2rw,relatime 0 0
...
#mount -oremount,ro /dev/block/mtdblock3 /system
# mount
...
/dev/block/mtdblock3 /system yaffs2ro,relatime 0 0
...

清除垃圾:

# cd /data/local/tmp
# ls
busybox
sh
boomsh
Superuser.apk
GingerBreak
su
# rm busybox sh boomsh Superuser.apk GingerBreak su
# ls
#

收工!此時可以在手機上看到 Superuser 程式,接著離開 root 環境、adb shell:

# exit
$ exit

別忘了把手機重開,就完成 root 動作!

以 adb shell 測試 root:

重開機後,使用 adb shell 與手機連線,並使用 su 指令切換成 root,可以看見手機畫面有訊息:

$ adb shell
$ su

device-adb-shell-su

如果沒有動作,隨著倒數時間一樣會被拒絕,而按下拒絕的結果,那就是熟悉的拒絕句子:

su: permission denied

若按下允許,自然就會從 "$" 換成 "#" 並取得 root 權限。

以 app 測試 root:

從 Android Market 安裝 SSHDroid 這程式,這是 SSH Server ,把他的預設開啟的 port 調到 22 (<1024也可),接著選 Start 後,可以看到詢問頁面:

device-app-su

一樣按下拒絕程式就會顯示相關錯誤訊息,若按下允許,那就會正常執行,並可以看到服務成功綁在 22 port:

device-app-sshdroid

接著可以透過 ssh root@10.0.2.3 的方式登入 Android 手機,此時就是以 root 權限執行任何動作囉!


最後,來提提上述重要程式的細節,先來說說 GingerBreak 這隻程式,總共才 550 行上下,但使用的系統觀念很多,我也還不太了解,稍微筆記:

  1. 複製一份 /proc/self/exe和 /system/bin/sh擺在 /data/local/tmp 中,分別為 boomsh 和 sh
  2. 依照系統編譯的版本,決定等會要使用的策略
  3. 從 /proc/net/netlink 中,取出執行中的 vold 資訊(pid)
  4. 從 /system/libc/libc.so 找尋 system 和 strcmp 相關的特徵
  5. 從 /system/bin/vold 中,找尋相關資訊(還不太懂,晚點再看)
  6. 從 /etc/vold.fstab、/system/etc/vold.fstab 中,找尋一個 dev_mount 裝置,若都找不到改用 /devices/platform/msm_sdcc.2/mmc_host/mmc1 。
  7. 透過 socket 不斷寫資訊給執行中的 vold (在 vold src 中可看到 process_config函數),類似請他掛載裝置。
  8. 一直重複動作 7 直到系統出錯而拿到 root 權限。

關於 GingerBreak 的部分還不太懂,上述極可能有誤,有空再仔細查看。

接著提提 su 的部分,原版 su 部份,在 http://android.git.kernel.org/?p=platform/system/extras.git;a=blob;f=su/su.c 可看到 line 60 的片段:

/* Until we have something better, only root and the shell can use su. */
myuid = getuid();
if (myuid != AID_ROOT&&myuid != AID_SHELL) {
fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
return 1;
}

可知當執行的 uid 必須是 AID_ROOT 或 AID_SHELL 時,才能取得權限。看看修改後的 su,在 https://github.com/ChainsDD/su-binary 可取得 su.c、su.h 和 activity.cpp 三程式,其中 main 寫在 su.c,稍微研究一下流程:

  1. 取得等待使用 root 權限的程式指令
  2. 如果運行身份是 AID_ROOT 就讓他通過,結束A
  3. 從資料庫的紀錄中,判斷該程式指令是否已經被設定成允許或拒絕,如果資料庫裡有資料,那馬上回應 allow 或 deny,結束B
  4. 如果資料庫中沒資料,接著開啟一個 socket 連線,並且隨後叫起 Superuser 管理介面,詢問使用者是否要允許或拒絕
  5. 從 Superuser 介面得知使用者的回應,透過 sockect 回傳,而 su 將依照結果給予 allow 或 deny,結束C

上述共有 3 種正常的結束方式,不正常的結束就不多提。因此,這個 su 程式,整體上須搭配 Superuser.apk 來使用,依需求叫起 com.noshufou.android.su.REQUEST 或 com.noshufou.android.su.NOTIFICATION 出來,並把使用者決定的結果回傳至 socket 連線。除此之外,若使用者勾選記憶目前的設定,代表以後將默認為允許或拒絕,那 Superuser 介面上還會把允許或拒絕的結果一同紀錄到 databases 中。

那 root 的安全問題?

Q1:惡意程式若直接先改寫資料庫資料,不就可以安然通行?

由 su.h 中得知,資料庫擺在 /data/data/com.noshufou.android.su/databases/permissions.sqlite位置,該路徑上的存取是需要 root 權限,因為惡意程式還沒取得 root 權限,所以無法變更資料庫內容。但他也還是可以走 GingerBreak 流程,透過漏洞取得 root 權限。

Q2:只要都透過 Superuser 管理,這樣就十分安全嗎?

不。假設有 A, B 兩個程式,其中 A 是介面上看起來超讚超方便的便利程式,但他在使用時需要 root 權限,而使用者也給予並默認後,以後他就用 root 權限一直運行。結果 B 是惡意程式,雖然他無法拿到 root 權限,但 A 可以幫他啊(幫 B 更新資料至資料庫中),所以,一隻惡意程式無法自行運行,但如果有搭配套餐的模式,那麼 B 就有機會取得。整體上這個權限機制並非十分安全,但對一般情況來說,算是夠了。

Q3:如何安全使用?

定期去查看 Superuser 上的紀錄,請盡可能搞懂給予 root 權限的程式到底做了什麼事。隨意下載的程式,沒有使用要記得移除。

結論:

記得去年就看 iOS app 相關文章,隨著 app 的量大,就曾聽到別人提過,以後使用者可能都只使用大廠軟體,就像現實生活中,人會有追求名牌的行為,這個現象將導致名牌廠會越做越好越大,在加上商譽影響,名牌廠就比較不會有惡意程式的行為,雖然仍不可保證就絕對不會有惡意。此外,其他無名程式,依舊存在惡意程式的機會,為了降低風險,資安意識下,就比較會去用 open source 或原廠軟體,以通訊軟體來說,有 MSN、Mail 等類,與帳號、隱私有高度相關性,雖然原廠不見得做的好或方便操作等,但基於資安方面,還是建議安裝原廠程式,不然就是使用有用原廠公開 API 的開發程式。

參考資料:

https://github.com/ChainsDD/su-binary/blob/master/su.h
https://github.com/ChainsDD/su-binary/blob/master/su.c
https://github.com/ChainsDD/su-binary/blob/master/activity.cpp

https://github.com/ChainsDD/Superuser/blob/master/AndroidManifest.xml
https://github.com/ChainsDD/Superuser/blob/master/src/com/noshufou/android/su/SuRequest.java
https://github.com/ChainsDD/Superuser/blob/master/src/com/noshufou/android/su/SuNotificationReceiver.java

http://rootzwiki.com/wiki/index.php/Gingerbreak
http://wikifilez.com/Root%20Files/gbreak/GingerBreak.tgz
http://wikifilez.com/Root%20Files/gbreak/GingerBreak-v1.00.apk
http://wikifilez.com/Root%20Files/gbreak/GingerBreak-v1.10.apk

http://android.git.kernel.org/?p=platform/system/vold.git;a=tree
http://android.git.kernel.org/?p=platform/system/vold.git;a=blob;f=main.cpp

免责声明:文章转载自《【笔记】Android手机root的概念》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql 8.0之后关于group by 语句报错问题HTML Img标签 src为网络地址无法显示图片问题解决(https)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

配置文件入门 WebConfig.config常用配置节点介绍

  一、配置文件入门   .Net提供了一种保存项目配置信息的办法,就是利用配置文件,配置文件的后缀一般是.config。在WinForm程序中配置文件一般是App.config。在Asp.net中一般默认是web.config。   一个.config配置文件都是基于XML的文本文件,并且可以保存到Web应用程序中的任何目录中。在发布Web应用程序时we...

ArcGIS Pro 中文(简体)语言包-指定路径为空

在电脑上安装了ArcGIS Pro 2.5,在安装中文(简体)语言包的时候,报错:指定路径为空。解决方法如下:打开注册表,定位到计算机HKEY_LOCAL_MACHINESOFTWAREESRIArcGISPro,如果中文包安装不了,肯定是没有Chinese_CN这个文件夹的,因此找不到路径。因此,新建立一个Chinese_CN项即可。点击Chinese_...

百度大脑远场语音开发套件评测—快速上手,超赞语音交互体验

近年来,人工智能话题越来越热,受到了更多人的关注。百度从2010年开始人工智能技术开发,到现在已有8年多的时间,目前百度AI技术专利在中国甚至世界上都是名列前茅。 我大概在18年末开始接触到百度AI社区,通过使用文字识别、图像识别等百度AI技术,逐步感受到了AI技术的强大,同时也感觉到了百度AI技术的进步:AI技术领域范围越来越广泛,识别速度越来越快,识别...

[IOS微信] 查看微信原始数据(含沙盒中的数据)

1、下载PP助手,将苹果手机连接到电脑上, 2、备份数据   备份还原——备份数据——全新备份 3、导出数据   备份还原——还原数据,在右边的列表中找到备份记录,点击“查看”,   在弹出窗口的右侧,找到“AppDomain-com.tencent.xin”,选中,点击“导出”。 导出的数据中,包含有微信缓存的所有数据。如下图,在“Documents”文...

深入浅出Node.js(上)

(一):什么是Node.js Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹。从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,再到今年发布Windows移植版本,Node.js的前景获得了技术社区的肯定。InfoQ一直在关注Node.js的发展,在今年的两次...

[转]ODAC 应用技巧 (一)使用 ODAC 的 Net 方式

原文地址:ODAC 应用技巧 (一)使用 ODAC 的 Net 方式 使用 ODAC 的 Net 方式 nxyc_twz@163.com 大多数应用程序使用 OCI 的ODAC 标准方式来连接 Oracle 数据库服务器。这是使用第三方开发语言设计 Oracle 应用程序最常用的方法。 所有的 OCI 接口都作为内部库来使用,使得编译生成的应用程序非常小...