谷歌手机user-debug

本发明涉及计算机软件应用领域,尤其涉及一种安卓user版本在selinux强制模式下获取root特权的方法及系统。

android4.4版本之前,android系统的底层的权限管理使用的是dac模式,android4.4版本之后,使用的是mac+dac模式,尽管有些版本不是完全的mac控制,但是随着安全性能越来越高,在最新的android系统当中,已经使用了完全的mac来控制权限,也就是说如果android系统内部没有许可获得特权,那么用户几乎是不能获得root权限的,即使用户获得dac的root权限,在实际操作过程中,还是会被mac拒绝而失败。而mac的控制就是使用selinux来实现的。

其中,dac为discretionaryaccesscontrol的简称,代表自主访问控制。访问控制模式是rwxrwxrwx,r代表read,w代表write,x代表execute,没有对应权限以-代替,每三个字符一组,这三个组分别是:所有者用户-所有者组-其他。

正是因为这样严格的权限管理,我们在有些情况下就会遇到问题,比如:客户在使用user版本遇到了重大的必须解决的问题后,需要将系统里面的一些数据获取出来或通过设置手机里面的参数来调试的时候,却被权限管理挡在门外了,也就是需要一种在selinux正常工作的情况下,依然可以在user版本上获取特权的机制,方便临时调试。现存在的几种方案是根据系统属性值将selinux临时关闭,但这种方案的弊端是google认证会不定期检查user版本关闭selinux的情况,一旦google检测到这种情况,就会要求厂商更新软件,否者,google认证不与通过,这增加了后期维护的成本。现存的还有一种方案是为用户编译可调试版本,让客户或者售后重新下载软件,然后一直测试直到问题重现,再来调试,时间成本太高,并且本身版本性质不同也有一些差异,问题能否重现也不得而知。

其中,申请号:.9,专利名称为《安卓应用程序永久获取root权限的方法》的专利未考虑selinux在强制模式下的情况,在此模式下,此方案行不通,在获取root权限上会失败;并且,此方案依赖已经root好的系统作为前置条件,其运行在应用层面,在设置suid会被root检测程序检测出,从而无法获取root权限。

为解决现有技术中的问题,本发明提供一种安卓user版本在selinux强制模式下获取root特权的方法,还提供一种实现该方法的系统。

本发明方法包括如下步骤:

s1:设置两个属性,其中,第一属性用来标识安卓系统是否需要启动特权root;第二属性用来通知init进程执行selinux配置文件的重新加载;

s2:修改selinux的编译规则文件,使安卓系统编译时生成特权selinux配置文件,

s3:编写可执行文件,完成selinux配置文件的切换;

s4:编写可执行文件对应的rc文件;

本发明作进一步改进,还包括步骤s6:编写root开关应用程序,设置root特权启动方式。

本发明作进一步改进,在步骤s2中,修改后的编译规则文件,使系统生成两套配置文件,一套是原来android标准的配置文件,另外一套是特权selinux配置文件。

本发明作进一步改进,所述selinux的配置处理过程为:

a202:判断设定目录下是否有配置文件,如果有,执行该配置文件,如果没有,执行系统默认配置。

本发明作进一步改进,步骤s3中,所述可执行文件的处理方法为:根据系统root特权需求选择将selinux配置文件拷贝入设定目录,或者删除设定目录下的selinux配置文件,然后,通知init进程重新加载selinux配置文件。

本发明作进一步改进,在步骤s5中,adbd处理方法为:

s52:执行adbd主循环,adbd服务结束。

本发明还提供一种实现该方法的系统,包括设置模块:用于设置两个属性,其中,第一属性用来标识安卓系统是否需要启动特权root;第二属性用来通知init进程执行selinux配置文件的重新加载;第一修改模块:用于修改selinux的编译规则文件,使安卓系统编译时生成特权selinux配置文件;第一编写模块:用于编写可执行文件,完成selinux配置文件的切换;第二编写模块:用于编写可执行文件对应的rc文件;第二修改模块:用于修改adbd源代码,使adbdfork出来的子进程shell有root权限。

本发明作进一步改进,还包括第三编写模块:编写root开关应用程序,设置root特权启动方式。

与现有技术相比,本发明的有益效果是:解决了需要调试等一些特殊问题,在不破坏现场环境的情况下,提供了有力的帮助,大大缩短了时间成本。

图1为本发明方法流程图;

图2为selinux标准配置方法流程图;

图3为可执行文件的处理方法流程图;

图4为dbb系统服务在针对系统请求服务的逻辑处理流程图。

下面结合附图和实施例对本发明做进一步详细说明。

本发明是android(安卓)系统user版本在selinuxenforcing(强制模式)的环境下,能获取root特权的方案。selinux在user版本状态下,一般的都是使用了系统默认配置。而本申请另辟蹊径,让系统可以使用预先定义好的特权配置文件,让selinux策略给特定的程序以特定的权利,本申请在现有的androidselinux的基础上,只需少量代码配置即可实现,在不违背标准selinux策略配置的情况下,根据请求特权与否,将预置的特权配置文件放到系统特定的目录/data/security/current/下面,或将系统特定目录/data/security/current/目录下的配置文件全部删除,然后通知init进程重新加载selinux配置文件,从而形成新的权限策略。

其中,android是谷歌公司基于linux开发的一套开源系统,称为安卓。user版本:是android在发布软件的可选项之一,android在发布软件有以下三种可选项:

3.user版本;--用于量产版本,不能调试,没有root权限。

root则是linux系统的最高权限。

具体地,如图1所示,作为本发明的一个实施例,本发明方法包括如下步骤:

步骤s1:定义两个persist属性,一个用来标识系统是否需要启动特权root,本发明以persist.hipad.root为例;另外一个用来通知init进程执行selinux配置文件的重新加载,本发明以sys.selinux.reload为例,使用这个属性的主要目的是android系统不允许除init以外的进程修改selinux.reload_policy属性,如果不这样,就不能触发init重新加载selinux的配置文件。

步骤s2:修改selinux的android.mk文件,其位于目录system/sepolicy/下(不同android版本,位置可能不同,有些放在external/sepolicy/),使系统生成两套配置文件,一套是原来android标准的配置文件,另外一套是需要特权的配置文件,特权配置文件放在镜像文件系统/system/etc/security/目录下,以备后续使用。

如图2所示,所述selinux的配置处理过程为:

然后,通过init进程配置selinux,具体实现方法为:

步骤102是当前版本是否是user版本的判定,一般是user版本,也就是出货版本,selinux必须是enforcing模式。

步骤103:判断设定目录下是否有配置文件,如果有,执行该配置文件,如果没有,执行系统默认配置。步骤103是最为关键的节点,user版本/data/security/current/目录下一般是没有任何配置文件的,也不能往这个地方写入任何东西。

步骤s3:编写可执行文件,完成selinux配置文件的切换。

具体地,编写一个可执行文件,根据persist.hipad.root属性值来处理,完成其主要功能:

a)当persist.hipad.root的值真时,则将步骤s2生成的6个文件复制到特定的目录/data/security/current/,android的selinux库规定了这个目录,确保文件模式,所有者,访问存储时间等属性都需要全部拷贝过来.保持一致性;

如图3所示,步骤s3是是本发明的关键部分,主要目的是使将之前预置的特权配置文件生效。

步骤201是根据特权需求决定不同的操作,拷贝还是删除来控制/data/security/current/目录下的文件。

步骤s4:编写步骤s3对应的rc文件,主要是配置:

a)步骤s3生成的可执行程序作为系统服务,配置好执行的用户、组、时机和方式,本例的用户为一般用户,组为root,时机配置为classlate_start。

如图4所示,adbd具体处理方法为:

adbd服务启动,判断是否请求root特权,如果是,adbd不降权,设置selinux环境上下文,使adbdfork出来的子进程shell为特权shell,如果否,adbd降权,adbdfork出来的子进程shell为普通shell,fork为计算机程序设计中的分叉函数。然后执行adbd主循环,adbd服务结束。

其中,步骤301在不降权的时候,adbd会切换上下文为u:r:su:s0,这是特权的关键。步骤302这里列举的是不同权限的shell,普通的shell上下文的是u:r:shell:s0,而特权的shell上下文是u:r:su:s0。

步骤s6:编写root开关应用程序

具体地,编写简单的apk应用,用platform签名,完成对persist.hipad.root的设置,true或false.应用以系统暗菜单或者是暗码形式启动,一般不出现在主菜单中。设置好之后,重启手机即可;如果不想重启手机,需要在rc文件里面配置属性persist.hipad.root改变时,对adbd和步骤s4自定义服务重新启动即可。

本发明还提供一种实现该方法的系统,包括设置模块:用于设置两个属性,其中,第一属性用来标识安卓系统是否需要启动特权root;第二属性用来通知init进程执行selinux配置文件的重新加载;第一修改模块:用于修改selinux的编译规则文件,使安卓系统编译时生成特权selinux配置文件;第一编写模块:用于编写可执行文件,完成selinux配置文件的切换;第二编写模块:用于编写可执行文件对应的rc文件;第二修改模块:用于修改adbd源代码,使adbdfork出来的子进程shell有root权限。

本发明作进一步改进,还包括第三编写模块:编写root开关应用程序,设置root特权启动方式。

本例用到的术语解释如下:

rc文件:供init进程解析并执行对应操作的脚本文件;

shell:伪终端的称呼;

以上所述之具体实施方式为本发明的较佳实施方式,并非以此限定本发明的具体实施范围,本发明的范围包括并不限于本具体实施方式,凡依照本发明所作的等效变化均在本发明的保护范围内。

}

我正在使用谷歌方向Api ......但我面临着阅读Json响应的问题......有人知道这个Api并可以帮助我吗? 我需要获取所有路线点以绘制我的折线......哪些数据很重要?我如何接收和解析它?

这是一个JSON作为例子

我的代码不能正常工作......

我真的需要帮助 我已搜查,并在不是招结果” T还帮我 它的一个Xamarin表格项目 谢谢

}

没有解锁或者root的,需要先解锁和root哦。虽然目前华为官方关闭了解锁通道,但是大部分机型淘宝上都是能解的,非常方便,也就十几块钱。

我修改ro.debuggable的目的是为了调试所有程序

前两种是临时修改,修改后需要重启adb,并且重启机子后会失效。

1、使用mprop修改(第一种方法 亲测成功)

3、使用magisk命令修改(第三种方法 亲测成功)

  1. su #切换至超级用户

4、提取手机boot.img,修改default.prop中的配置重新打包刷回(第四种方法 亲测成功)

二、配置USB端口设置

这一步不用操作好像也是可以的

2.1、进入华为工程菜单

如果是平板(比如我的华为M3),没有拨号界面的话,用自带的计算器输入()()2846579()()

点击“后台设置”->“USB端口设置”,选择Google模式

2.3、开启verbose、debug等级别的日志输出(和本主题无关)

在工程菜单中,进入“后台设置”,在“LOG设置”里面选中“AP日志”

测试手机是红米3s,刷了原生第三方rom,安卓9.0

在刷了magisk获取root权限后,adb调试无法获取root权限。

1.在手机上,装上安卓终端软件,直接在本地系统上root是可以的

2.远程调试,不管是有线adb还是wifi adb,都无法通过adb root提权,但是可以在进入shell后再通过su切换到root

谷歌了下,发现是安卓9的限制以及magisk的问题,

关闭magisk的hide模式,然后重启手机,解决。但也失去了hide功能

或者可以修改magisk的配置文件ro.debuggable为1,因为安卓9默认在正式版是不支持adb root的,需要手动打开

原理跟上面的一样,改debuggabel为许可。但这个方法我尝试了没效果

重新编译adbd,修改为可以调试,比较高级,我就不尝试了。

最简单不用修改任何文件的方法,直接在进入adb shell后,开启su

但对于某些特殊需求,比如需要在PC上写一个脚本,一开始获取root权限,然后逐条执行adb命令,就麻烦了

 
}

我要回帖

更多关于 谷歌手机调试模式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信