关于真机测试root权限问题

sunshinekimi sunshinekimi     2023-04-23     238

关键词:

技术图片

 

 普通用户好像也无伤大雅:

技术图片

 

 

输入后看到这样的有个美元符号,说明你的虚拟机获取不了权限,有权限的应该是root和#都有,这个时候你输入su 如果还是没有变化,看看你的虚拟机是不是android7.0,Android 7.0的模拟器是没有root权限的,你再换个6.0的设备运行,输入adb shell后就显示正常。,因为真机是不给提供root权限的,如果只是测试不必,开发的话建议用模拟器比如Genymotion可以直接root权限。

关于安卓root原理实现,回到先有鸡还是先有蛋的问题

 

前言
一直很好奇Android Root的原理,恰好最近碰到了一个跟Android默认带Root权限的问题,这里顺便记录一下Android系统root的原理。

原理
Android是基于Llinux内核的开源操作系统,与Ubuntu系统类似,所以在Android里获取root权限其实和在Linux系统下获取root权限是一回事。在Linux系统下获取root权限的方法是在命令行执行sudo或者su,接下来输入提权密码就可以获取root权限了。Android系统其实也是这样,例如应用层程序开发,在root过的手机上运行root权限的代码如下所示:

1
2
3
4
5
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
......
os.writeBytes("HelloWorld! ");
os.flush();

我们可以看到,Android应用程序获取root权限也是需要执行su命令,因此Android能够root的密码都在su程序上。但是,Android本身是不想让你获取root权限的,因此大部分手机出厂都是user版本,默认是不带su这个二进制程序的。所以你想获取Android的root权限,第一步就是要把编译好的su文件拷贝到Android手机的/system/bin或/system/xbin目录下(为什么要拷贝到/system目录下,是因为这个分区是没有nosuid限制的,同时/system/bin和/system/xbin又都是系统环境变量PATH里的路径,可以直接执行su)。我们先假设你可以把编译好的su程序放在xbin或者bin目录下,接下来你可以在Android手机的adb shell或者串口下输入su提权了。
Linux命令行下输入su之后,是需要输入root密码才能够提权的,但是Android里的su和Linux里的su是不一样的,Android里的su是不靠验证密码的,而且需要验证你之前的权限是什么。意思是,如果你是root用户,那你可以通过su切换到别的用户,比如shell、wifi、audio等。但是如果你是root之外的其他用户,就不能切换到root了,会提示你permission denied。也就是说,用root运行su才有用,但是这个时候我没还有root权限怎么办?这就是接下来要讨论的问题。
我们在Ubuntu下查看/usr/bin/passwd文件的权限,如下图所示:

技术图片

这个文件的权限比较特殊,Linux用户一般都知道文件分为r、w、x权限,那这个s是神马意思呢?这里回答一下,s代表当任何一个用户执行该文件的时候都拥有文件所有者的权限,这文件所有者是root。简单来说,就是不管谁执行这个文件,他执行的时候都是以root身份来执行的。
看到这里,大家是不是都有思路了,也就是说,即使我不是root用户也可能以root用户的身份来执行程序,那么我把一个所有者是root的su程序权限标志位设置为-rwsr-xr-x,那么不管是谁执行它,都是以root身份执行。这就牛逼了,su果断可以执行成功,那你也就可以顺利的获取root权限了。

破解
原理都清楚了,那root的过程其实就是分两步:
1. 把一个所有者是root的su拷贝到Android手机上。
2. 把su的权限标志位设置成-rwsr-xr-x。
写成代码大概如下所示:

1
2
3
cp /sdcard/su /system/xbin/
chown root:root /system/xbin/su
chmod 4755 /system/xbin/su

代码看起来很简单,但是想真正的运行成功,以上代码每一句都需要root权限执行。我擦,一下回到解放前,跟先有鸡还是先有蛋的问题类似,代码运行需要root权限,而代码本身的目的就是获取root权限,成了一个封闭的死循环了。但是所幸Android系统有Bug,因此就给了你打破这个死循环的机会。
打破的方法就是找一个本身已经有root权限的进程来运行这个3行的shell脚本,这样脚本就可以顺利执行了。但是已经有root权限的进程都是出厂时候就装到手机上的,代码写死了,你没法控制它执行自己的代码啊,这个时候就需要查找漏洞了。例如Android2.3 root权限的zergRush漏洞就是利用一个拥有root权限的进程栈溢出漏洞。具体利用漏洞的方法大家就可以自行google了。

防止root
通过上述分析,我们可以简单的理解,解决Android系统能够su提权的方法就是把su文件干掉就可以了

 

配上经典的一句话’With great power, comes great responsibility.”

root是很危险的。但不代表root之后你的手机就很危险,安全与危险全部取决在你自己的手里,一些恶意软件肆意要求各种权限,或许软件根本用不到,这时候你就要提防一下了,如果你给了它权限就是把你家钥匙交给他了。所以准备好去承担一个超级用户责任再去成为一个超级用户。

享受方便的同时,你的风险也越大。如果root带给你的便利远远大于root带来的风险,去吧!

1.如果处理不当,你的手机可能会变成一块砖,当然也有很多补救措施。也就是如果你搞乱了root的过程,代码的修改,你的手机软件你严重受损这时候你的手机就和砖没啥两样了。

2.没有保修。root是合法的,但是一旦root就脱离保修。不论软件还是硬件故障,制造商都不会负责。

3.恶意软件很轻易的就能打破你手机安全。root权限会绕过安卓OS设置的安全限制。病毒蠕虫恶意软件都可以从根源上感染。但目前没有大范围的类似现象发生。一旦发生他就全权接管你的手机,银行卡社交各种,即裸奔。

最重要的是第三点,所以给手机一些安全防护也是必要的。鉴于没有大范围时间发生,这个领域好像还挺ok。很多人喜欢安装xposed上的一些模块,需要长一个心眼,不乏有一些模块开发者图谋不轨。

一些建议:

root过后的手机下载一些金融理财等软件要慎重。

root手机最好当副机使用,做做开发,刷刷命令,体验安卓.......

有条件的使用原生安卓,没错,原生安卓才是最好的安卓。没毛病。如果google原生态,在Google play上下载所需,国外这方面相较国内还是安全很多,开发者和用户对隐私方面都很看重。

切忌随便使用国内一些乱七八糟的软件下载助手。

总之root过后,你必须确保每一步操作都在干嘛,仅此而已。安全和危险都是相对的。你能获取root就证明整个安卓系统都是有漏洞的。不耸人听闻,360最近发现的水滴漏洞,有兴趣可以了解。

关于bitcode的问题

今天用真机测试,出现了Youmustrebuilditwithbitcodeenabled(XcodesettingENABLE_BITCODE),obtainanupdatedlibraryfromthevendor,ordisablebitcodeforthistarget.forarchitecturearm64爆红测试不出,不能进行真机测试,百度了 查看详情

android用真机测试用不了sqlite3,push的时候一直提示read-onlyfilesystem,求帮助

android用真机测试用不了sqlite3,push的时候一直提示Read-onlyfilesystem。可是我已经给权限了求大神帮忙,不好教的话远程协助也是可以的,这问题困扰我一天了。Q:1270507593参考技术A应该是因为你的文件的权限是只读吧?你试试改成... 查看详情

解决真机调试时eclipseddms上打不开/data目录的问题

一般真机调试时DDMS里面的FileExplorer是不能打开/data目录的,不过也很容易解决。1、首先手机要root。这个很简单,网上一大堆资料和软件。2、仅仅root之后还不行,下载一个ES文件浏览器(或类似的软件),授予该软件root权限。3、... 查看详情

关于adbd进程的root权限问题

adbd源码位于system/core/adb/目录下,可执行文件位于/sbin/adbd。通过adb执行ps命令,结果如下:USER  PID PPID VSIZE RSS  WCHAN  PC    NAMEroot   1  0  296  212 c00b01240000d9ecS/init......shell  2183 1  3372 184 查看详情

关于安卓adbshell的问题:mount:operationnotpermitted

我输入:adbshellmount-oremount,rw/system。然后报错:mount:operationnotpermitted手机已经root。对于usr模式Android手机1.usr模式,可以使用adbpull把手机文件放到电脑上2.usr模式但是不可以把电脑中文件push到手机上:提示权限不够方法:(1)adbshell... 查看详情

reactnative关于真机调试问题

  p.p1{margin:0.0px0.0px0.0px0.0px;font:11.0pxMenlo}span.s1{}SDKlocationnotfound.Definelocationwithsdk.dirinthelocal.propertiesfileorwithanANDROID_HOMEenvironmentvariable. 环境变量的问题的话,可以在 查看详情

移动端web开发真机测试

关于移动端WEB开发真机测试亲身实验的一些体会。之前的开发都用Chrom的模拟,但是效果毕竟不如真机,总结几点吧,至于详细的安装过程网上都有教程http://www.cnblogs.com/xiaohuochai/p/5512051.html,这里就不在赘述。BrowserSync是基于Node... 查看详情

关于mysql3306端口不通的问题(代码片段)

今天部署完Mysql时,发现root用户无法从公网连接Mysql,从其他机器可以ping通这台机器,telnet3306端口却不通。1.查询了mysql中root用户的访问权限usemysql;selecthost,userfromuser;发现root用户的权限是%,表示可以从任何机器... 查看详情

关于debian的一些简记

参考技术A通过capabilities可以不用setuid,让普通用户运行一个需要root权限才能运行的程序,而且不会用到他/她不需要的root权限。比如/bin/ping,它需要使用raw-socket,这是需要root权限的。传统意义下,需要使用#chmod+s/bin/ping将/bin/pi... 查看详情

关于deepin修改root密码或切换到root及普通用户的问题

问题:安装deepin系统时,版本为deepin15.4.1桌面版,没有设置root用户,仅设置了普通用户和密码,进入终端后,也是进入普能用户,那么如何进入root用户呢?su-或su-root却没有root密码,这该如何解决?解决:系统默认给安装系统... 查看详情

第四章appium真机运行测试用例讲解

...化测试用例虽然可以在模拟器上运行,可是模拟器毕竟和真机还是有区别的。在第二章我们讲到了模拟器上运行测试用例后,我又花了两天的时间,研究了一下真机运行测试用例。只有在真机上运行,才能真正发现出问题。期间... 查看详情

关于docker时的权限问题解决dialunix/var/run/docker.sock:connect:`permissiondenied`(代码片段)

多种方法解决docker无权限问题/var/run/docker.sock:connect:permissiondenied问题:无权限使用docker命令报错信息[test@pri00~]$dockerpsGotpermissiondeniedwhiletryingtoconnecttotheDockerdaemonsocketatunix:///var/run/docker.sock:Get"http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers... 查看详情

关于linux下set位权限问题

如题:修改file1的权限为“rwsr-sr-x”一教师给出的参考答案是:[root@bogondoc1]#chmod7755file1后面的三位755我可以理解,意思是属主有可读、可写、可操作(可执行)权限,属组有可读、可操作权限,其他用户有可读、可操作权限但是... 查看详情

获取vi中文件的root权限? [关闭]

...我似乎记得不久前在查找有关vi的一些内容时看到了一些关于此的内容,但现在我找 查看详情

小程序背景图,真机测试图片丢失

问题:在开发者工具中显示正常,手机测试图片丢失解决:wxml----js--- 查看详情

真机设备(android手机或android平板)测试的相关操作

...要以下几步操作:1.1.1   设备接入电脑的设置关于Android设备接入电脑,像应用宝或手机助手之类都有图片教程之类,类似下图: 1.1.2   查看设备将手机用数据线连接到电脑,并授权USB调试模式。查看连... 查看详情

关于mysql帐号设置问题

mysql中已经有ROOT了,我想再设置一个帐号,只读.怎么设置,需要详细说明问题是权限我已经设置好了,现在我要改密码,而且不是PHPmyadmin的...单独的那种MYSQL...修改帐号密码老是出错...显示为:mysqladmin:connecttoserverat'localhost'failederr... 查看详情

关于ios免证书真机安装的过程和问题

由于本人是边工作边转的IOS,所以一直都没怎么使用过免证书安装过程,通常都是公司申请的99美元的账号直接开发。但是前两天有个朋友需要在展会上用的Ipad上安装内网应用,申请一个苹果账号还要审核前后加起来需要一个月... 查看详情