著录项信息
专利名称 | 安卓应用程序永久获取Root权限的方法 |
申请号 | CN201210436649.9 | 申请日期 | 2012-11-02 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2013-03-20 | 公开/公告号 | CN102981835A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/44 | IPC分类号 | G;0;6;F;9;/;4;4;;;G;0;6;F;9;/;4;4;5查看分类表>
|
申请人 | 福州博远无线网络科技有限公司 | 申请人地址 | 北京市海淀区东北旺西路8号中关村软件园17号楼二层A2
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 百度时代网络技术(北京)有限公司 | 当前权利人 | 百度时代网络技术(北京)有限公司 |
发明人 | 张长安;刘德建;陈宏展;罗上清;潘运武 |
代理机构 | 福州市鼓楼区京华专利事务所(普通合伙) | 代理人 | 宋连梅 |
摘要
本发明提供一种安卓应用程序永久获取Root权限的方法,将需要用到Root权限的操作进行编写,并编译成一可执行程序文件,将该文件包含在应用程序中,应用程序通过一次su程序授权,将文件拷贝到/system/bin的目录下,并修改其所有者和所属分组为root,并设置其suid标识位;如此,就能够使该文件每次执行都拥有Root权限,从而避免再次弹出授权框。由于需求的变动,该文件程序可能会需要升级,因此文件需要实现自我升级的功能,以避免更新时需要再次弹出授权框。本发明通过该文件以Root的身份执行各种操作,就算应用程序被重装、升级,也无需再进行重复的su程序授权操作,给用户的使用带来极大方便。
1.一种安卓应用程序永久获取Root权限的方法,其特征在于:包括如下步骤:
步骤1、将安卓应用程序中需要用到Root权限的操作通过C/C++语言进行编写,并编译成一安卓系统可执行程序文件,且所述可执行程序文件能实现自我升级功能和与安卓应用程序的通信的功能;将可执行程序文件打包集成在安卓应用程序中;
步骤2、在安卓系统下判断/system/bin的目录下是否存在所述可执行程序文件,否,则进入步骤3;是,则判断可执行程序文件是否需要升级,要升级,则安卓应用程序与该可执行程序文件建立通信,并调用自我升级功能,对该可执行程序文件进行升级处理,并转入步骤8;不升级,则直接进入步骤8;
步骤3、安卓应用程序运行安卓系统的su程序对操作用户进行第一次授权;
步骤4、将安卓系统的/system目录进行重挂载为可写状态;
步骤5、将安卓系统的/system/bin目录的权限进行设置,以保证安卓应用程序对/system/bin的目录拥有写的权限;
步骤6、将所述可执行程序文件拷贝到所述/system/bin的目录下,并修改该可执行程序文件权限分类的所有者和所属分组为Root;
步骤7、设置可执行程序文件的suid标识位,设置suid标识位后,可执行程序文件就能以所有者的身份被安卓应用程序所执行,即拥有Root权限的操作;
步骤8、安卓应用程序执行可执行程序文件并与其建立通信,此时安卓应用程序需要用到Root权限的操作只要通过可执行程序文件进行执行即可,无需通过安卓系统的su程序进行重复授权。
2.根据权利要求1所述的安卓应用程序永久获取Root权限的方法,其特征在于:所述Root权限的操作包括:获取文件目录、静默安装程序以及 卸载程序。
3.根据权利要求1所述的安卓应用程序永久获取Root权限的方法,其特征在于:所述步骤3具体为:安卓应用程序运行安卓系统的su程序,并获取su程序的输出流,之后的su命令可直接往输出流写入命令并执行,此时,往su程序的输出流写入一任意的字符命令,安卓系统的SuperUser会弹出授权对话框,操作用户点击允许,则继续执行所述步骤4,操作用户点击拒绝,则结束流程。
4.根据权利要求1所述的安卓应用程序永久获取Root权限的方法,其特征在于:所述步骤4具体为:往su程序的输出流写入第一命令,将安卓系统的/system目录进行重挂载为可写状态,该第一命令为:“mount–o remount–w–t [type] [device] /system”,其中[type]为要挂载的文件系统类型,[device]为要挂载的设备,此两项为/system目录挂载的相应参数,是通过执行安卓系统的shell命令来获取的。
5.根据权利要求1所述的安卓应用程序永久获取Root权限的方法,其特征在于:所述步骤5具体为:往su程序的输出流写入第二命令,将安卓系统的/system/bin目录的权限改为777,以保证安卓应用程序对/system/bin的目录拥有写的权限,该第二命令为:
“chmod 777 /system/bin”。
6.根据权利要求1所述的安卓应用程序永久获取Root权限的方法,其特征在于:所述步骤6具体为:往su程序的输出流写入第三命令,将可执行程序文件拷贝到所述/system/bin的目录下,该第三命令为“dd if=[fromPath] of=[toPath]”,其中[fromPath]为可执行程序文件此时所在的路径,[toPath]为要拷贝到的路径,即/system/bin/可执行程序文件的名称;并往su程序的输出流写入第四命令,修改该可执行程序文件权限分类的所有者和所属分组为root,第四命令为“chown root:root /system/bin/可执行程序文件的名称 ”。
7.根据权利要求1所述的安卓应用程序永久获取Root权限的方法,其特征在于:所述步骤7具体为:往su程序的输出流写入第五命令,设置可执行程序文件的suid标识位,并将可执行程序文件权限设置为可读可执行,即可执行程序文件权限设置为4755,其中“4”是suid标识位,可执行程序文件就能以所有者的身份被安卓应用程序所执行,即拥有Root权限的操作; 该第五命令为:“chmod 4755 /system/bin/可执行程序文件的名称”。
安卓应用程序永久获取Root权限的方法\n【技术领域】\n[0001] 本发明涉及安卓系统上的应用程序权限管理技术领域,尤其涉及一种已经Root的安卓手机上,安卓应用程序永久获取Root权限的方法。\n【背景技术】\n[0002] 安卓Android系统中,第三方应用程序是以临时用户的身份进行运行的,这就使得该应用程序的权限受限制,如应用程序要访问或者修改安卓系统文件时,就会因为权限不足而失败。现在有的安卓手机已经进行了Root设置,该Root是Linux等类UNIX系统中的超级管理员用户帐户。对于Android手机,平常所说的Root,其实就是通过各种方法,将系统的su程序文件拷贝到/system/bin目录下,并安装SuperUser授权管理,第三方应用程序可以通过su程序(su程序是权限管理文件)执行需要Root权限的操作。但已经Root设置的手机,第三方应用程序就能直接拥有Root权限的操作吗?其实不然,Root的手机上,会在/system/bin目录下存放一个名为su程序的文件,并且安装有SuperUser(授权管理)应用程序。其他应用程序想要以Root权限执行,就必须通过su程序执行shell命令,而此时,SuperUser就会弹出授权对话框,用户必须点击允许,命令才能成功被执行。点击允许时,如果没有选择“记住”选项,那么应用每次通过su程序执行shell命令时,都会弹出授权提醒的对话框。另外,如果应用程序升级了,那么就算之前已经记住允许操作了,再通过su程序执行shell命令时,也要重新通过su程序进行重复授权。\n[0003] 另外弹出的授权提醒的对话框会带来如下问题:对于用户在手机的一个界面上操作手机上的第三方应用时,授权框的弹出并没有太大问题,因为此时用户肯定是看着手机在执行某些操作,用户能够及时的发现授权对话框弹出并确认,只是操作比较繁琐而已。但是,有些应用程序的操作界面并不再手机上,而是在pc机上,用户将手机连接到pc机,然后通过pc机来管理手机,此时,用户并不会去关注手机屏幕,如此,在授权对话框弹出时用户就不能及时发现并确认,而且会因为手机进入屏保,授权框无法显示,这样就导致授权失败。当然,用户在第一次授权时,可以勾选“记住”选项,下次就不用再授权,但是应用程序是会经常更新版本的,更新后,又得重新进行授权,给用户的使用带来极大不便。\n[0004] 现有技术中提供了一种“Android平台下的应用程序动态权限管理方法”,见公开号为:CN102289633A,公开日为:2011.12.21的中国专利,包括应用程序安装时动态选择保存自身系统权限表;安装后,用户通过人机接口动态选择修改所述系统权限表;访问需要权限的API时,Android平台根据该应用程序的系统权限表中的记录判断是否该API被禁用;当所述API被禁用时,该应用程序通过人机接口提示用户是否选择修改;若用户选择修改权限,Android平台允许该应用程序访问所述API,否则该应用程序退出访问。这种权限管理方法,用户能根据需要及个人经验随时修改应用程序的权限,从而能很大程度上防止应用程序的恶意访问资源,修改、窃取个人信息等危险行为。但该方法要是Android平台下的应用程序有更新时,该设置的权限管理将失效,还要重新进配置,操作麻烦。\n[0005] 为了更容易理解本发明这里需要指出的是:\n[0006] 1、Linux中,文件权限的问题:\n[0007] 文件权限:每个Linux文件具有四种访问权限:可读(r)、可写(w)、可执行(x),无权限(-)。\n[0008] 权限分类:所有者,组成员,其他用户。每类的权限可以用字母表示,如rwxrwxr-x表示:即所有者及组成员拥有读、写、执行的权限,其他用户只拥有读和执行的权限(即rwx‘所有者’rwx‘组成员’r-x‘其他用户’)。数字表示法:所谓数字表示法,是指将r、w和x分别用4、2、1来代表,没有授予权限(-)的则为0,然后把权限相加,如下:文件权限为rwxr-xr-x,转换为数字为(421)(401)(401),相加后表示为755。\n[0009] 2、Linux用户及分组:\n[0010] Linux是一个多任务多用户操作系统。\n[0011] 多任务:多个前台应用程序和后台服务程序宏观上的同时运行。\n[0012] 多用户:多个用户同时登录系统作业;为保证用户的私密性而建立的保护和限制机制。\n[0013] 通常的多用户系统中都存在一个超级用户,例如Linux中的root用户,Windows系统中的administrator等,系统中可以存在若干个具有不同的权限分类等级的其他用户,例如由超级用户建立的普通用户等,目前大多Linux发行版在安装时都要求建立一个普通用户,并使用该用户登陆。\n[0014] 3、用户组:\n[0015] 可以对用户进行分组,一个用户组可包含多个用户,一个用户也可以同时属于多个分组。\n[0016] 例如,有以下分组及用户:\n[0017] 分组group1,包含用户user1,user2\n[0018] 分组group2,包含用户user2\n[0019] 现在由group1中的user1创建一个文件f,指定其权限为775,那么user1及user2对文件f都有读、写、执行的权限,而group2中的user2则只有读和执行的权限[0020] 4、系统中的标识位suid:\n[0021] suid是Set User ID的意思\n[0022] 如果一个文件被设置了suid标识位,会表现在所有者的权限的可执行位上即可执行(x)的位置上,例如:\n[0023] rwsr-xr-x表示suid和权限分类中的所有者的权限中可执行位被设置。\n[0024] 数字表示法:suid对应的数字为4,如rwsr-xr-x就表示为4755\n[0025] suid的作用:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源(即让一些资源没有访问权限的有了访问权限)。\n[0026] 例如,有用户user1和user2;现在由用户user1创建一个普通文件f,其权限为rwxr-xr-x(755),并创建一个可执行文件r,且其权限为rwxr-xr-x(未设置suid),此时由user2运行程序r,r的有效用户id(euid)就是user2,由于user2对文件f没有写的权限,所以r程序也就无法修改文件f;如果设置了文件f的suid,即权限改为rwsr-xr-x(4755),此时再由user2运行程序r,r的euid将被设置为其所有者的id,即user1,也就可以修改文件f了。\n【发明内容】\n[0027] 本发明要解决的技术问题,在于提供一种安卓应用程序永久获取Root权限的方法,其解决应用程序以Root身份执行命令时,SuperUser会多次弹出授权提醒的问题。\n[0028] 本发明是这样实现的:一种安卓应用程序永久获取Root权限的方法,包括如下步骤:\n[0029] 步骤1、将安卓应用程序中需要用到Root权限的操作通过C/C++语言进行编写,并编译成一安卓系统可执行程序文件,且所述可执行程序文件能实现自我升级功能和与安卓应用程序的通信的功能;将可执行程序文件打包在安卓应用程序中;\n[0030] 步骤2、在安卓系统下判断/system/bin的目录下是否存在所述可执行程序文件,否,则进入步骤3;是,则判断可执行程序文件是否需要升级,要升级,则安卓应用程序与该可执行程序文件建立通信,并调用自我升级功能,对该可执行程序文件进行升级处理,并转入步骤8;不升级,则直接进入步骤8;\n[0031] 步骤3、安卓应用程序运行安卓系统的su程序对操作用户进行第一次授权;\n[0032] 步骤4、将安卓系统的/system目录进行重挂载为可写状态;\n[0033] 步骤5、将安卓系统的/system/bin目录的权限进行设置,以保证安卓应用程序对/system/bin的目录拥有写的权限;\n[0034] 步骤6、将所述可执行程序文件拷贝到所述/system/bin的目录下,并修改该可执行程序文件权限分类的所有者和所属分组为Root;\n[0035] 步骤7、设置可执行程序文件的suid标识位,设置suid标识位后,可执行程序文件就能以所有者的身份被安卓应用程序所执行,即拥有Root权限的操作;\n[0036] 步骤8、安卓应用程序执行可执行程序文件并与其建立通信,此时安卓应用程序需要用到Root权限的操作只要通过可执行程序文件进行执行即可,无需通过安卓系统的su程序进行重复授权。\n[0037] 本发明具有如下优点:本发明将需要用到Root权限的操作进行编写,并编译成一可执行程序文件,将该可执行程序文件进行部署、设置,这样能够使该文件每次执行都拥有Root权限,从而避免再次弹出授权框。由于需求的变动,该文件程序可能会需要升级,因此文件需要实现自我升级的功能,以避免更新时需要再次弹出授权框。本发明通过该文件以Root的身份执行各种操作,就算应用程序被重装、升级,也无需再进行重复的su程序授权操作,给用户的使用带来极大方便。\n【附图说明】\n[0038] 图1为本发明方法流程示意图。\n【具体实施方式】\n[0039] 如图1所示,本发明的一种安卓应用程序永久获取Root权限的方法,包括如下步骤:\n[0040] 步骤1、将安卓应用程序中需要用到Root权限的操作通过C/C++语言进行编写,并编译成一安卓系统可执行程序文件(如,该可执行程序文件的名称为mySu),且所述可执行程序文件能实现自我升级功能和与安卓应用程序的通信的功能;将可执行程序文件打包在安卓应用程序中;\n[0041] 步骤2、在安卓系统下判断/system/bin的目录下是否存在所述可执行程序文件,否,则进入步骤3;是,则判断可执行程序文件是否需要升级,要升级,则安卓应用程序与该可执行程序文件建立通信(该通信时借于可执行程序文件与安卓应用程序有通信的功能),并调用自我升级功能,对该可执行程序文件进行升级处理,并转入步骤8;不升级,则直接进入步骤8;\n[0042] 步骤3、安卓应用程序运行安卓系统的su程序对操作用户进行第一次授权;其具体为:安卓应用程序运行安卓系统的su程序,并获取su程序的输出流,之后的su命令可直接往输出流写入命令并执行,而无需重新运行su程序,如此就只需要用户授权一次即可,此时,往su程序的输出流写入一任意的字符命令(该字符命令为无关紧要的命令,如“id”),该字符命令主要是为了让安卓系统的SuperUser会弹出授权对话框,此时,安卓系统的SuperUser会弹出授权对话框,操作用户点击允许,则继续执行所述步骤4,操作用户点击拒绝,则结束流程。\n[0043] 步骤4、将安卓系统的/system目录进行重挂载为可写状态;其具体为:往su程序的输出流写入第一命令,将安卓系统的/system目录进行重挂载为可写状态,该第一命令为:“mount–o remount–w–t[type][device]/system”,其中[type]为要挂载的文件系统类型,[device]为要挂载的设备,此两项为/system目录挂载的相应参数,是通过执行安卓系统的shell命令来获取的。\n[0044] 步骤5、将安卓系统的/system/bin目录的权限进行设置,以保证安卓应用程序对/system/bin的目录拥有写的权限;其具体为:往su程序的输出流写入第二命令,将安卓系统的/system/bin目录的权限改为777,以保证安卓应用程序对/system/bin的目录拥有写的权限,该第二命令为:“chmod 777/system/bin”。\n[0045] 步骤6、将所述可执行程序文件拷贝到所述/system/bin的目录下,并修改该可执行程序文件权限分类的所有者和所属分组为Root;其具体为:往su程序的输出流写入第三命令,将可执行程序文件拷贝到所述/system/bin的目录下,该第三命令为“dd if=[fromPath]of=[toPath]”,其中[fromPath]为可执行程序文件此时所在的路径,[toPath]为要拷贝到的路径,即/system/bin/可执行程序文件的名称;并往su程序的输出流写入第四命令,修改该可执行程序文件权限分类的所有者和所属分组为root,第四命令为“chown root:root/system/bin/可执行程序文件的名称(即为“mySu”,该名称也可以用其他的命名来替换)”。\n[0046] 步骤7、设置可执行程序文件的suid标识位,设置suid标识位后,可执行程序文件就能以所有者的身份被安卓应用程序所执行,即拥有Root权限的操作;其具体为:往su程序的输出流写入第五命令,设置可执行程序文件的suid标识位,并将可执行程序文件权限设置为可读可执行,即可执行程序文件权限设置为4755,其中“4”是suid标识位,可执行程序文件就能以所有者的身份被安卓应用程序所执行,即拥有Root权限的操作;这样应用程序即能永久获取Root权限的操作;该第五命令为:“chmod 4755/system/bin/可执行程序文件的名称(即为“mySu”)”。\n[0047] 步骤8、安卓应用程序执行可执行程序文件并与其建立通信,此时安卓应用程序需要用到Root权限的操作只要通过可执行程序文件进行执行即可,无需通过安卓系统的su程序进行重复授权。\n[0048] 其中,所述Root权限的操作包括:获取文件目录、静默安装程序以及卸载程序等等。\n[0049] 这里值得一提的是:\n[0050] 挂载和重挂载的区别,挂载:\n[0051] Linux系统中,需要将存储设备挂载到某个目录,我们才能在文件管理中正常使用;则一般通过shell中执行mount命令可以看到各个目录的挂载信息,例如:/dev/block/mmcblk0p9/system ext4ro;该信息表示:将存储设备“/dev/block/mmcblk0p9”挂载到/system目录,其文件系统类型为“ext4”,其读写权限为“ro”(只读)[0052] 重挂载:一般通过shell执行remount命令进行重新挂载存储设备:例如:\n“mount–o remount–w–t ext4/dev/block/mmcblk0p9/system”,表示将/system重挂载,其文件系统类型为“ext4”,其存储设备为“/dev/block/mmcblk0p9”,其读写权限为“-w”,即可读可写。步骤4中涉及的是进行重挂载的操作。\n[0053] 总之,本发明通过该文件以Root的身份执行各种操作,就算应用程序被重装、升级,也无需再进行重复的su程序授权操作,给用户的使用带来极大方便。\n[0054] 以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
法律信息
- 2016-01-27
专利权的转移
登记生效日: 2016.01.06
专利权人由福州博远无线网络科技有限公司变更为百度时代网络技术(北京)有限公司
地址由350000 福建省福州市福州开发区星发路8号火炬创新大厦四层403A室变更为100000 北京市海淀区东北旺西路8号中关村软件园17号楼二层A2
- 2015-06-10
- 2013-04-17
实质审查的生效
IPC(主分类): G06F 9/44
专利申请号: 201210436649.9
申请日: 2012.11.02
- 2013-03-20
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |