分享好友 最新资讯首页 最新资讯分类 切换频道
Android应用程序永久获取root权限方法
2024-12-26 21:59

转自:https://hold-on.iteye.com/blog/1901152

Android应用程序永久获取root权限方法

在项目的过程中,有可能会要实现类似360优化大师、安卓优化大师的软件搬家、静默安装等需要root权限的功能,或者类似SET_PREFERRED_APPLICATIONS、MOVE_PACKAGE 等需要系统的权限,必须要有系统签名。

咱们拿 软件搬家 来当例子(通过获取系统权限,而不是弹出系统的应用管理界面来搬家)

 

实现方式

1、想办法获取系统权限,但是这个一般办不到,因为不同厂家出厂的手机系统签名都不一样

(

可以看看我很早的时候提的问题

android系统权限SET_PREFERRED_APPLICATIONS怎么获取

)

2、在已经root过得手机,获取root权限(有root权限就可以为所欲为啦,嘿嘿)

 

第一种办法暂时不考虑,想了解的童鞋可以google android如何获取系统权限。

我们说说第二种办法

在已经root过得手机上获取root权限,简单

 

Java代码 

 

  1. Process process = Runtime.getRuntime().exec("su");  

 

执行这一句,superuser.apk就会弹出授权对话框。

但是这样做就可以了吗.....肯定没这么简单啦

当执行需要系统权限的操作时,系统还是回去检查应用程序是否拥有该权限。

所以我们要想办法绕过过系统检查权限这道关卡

至于办法 可以参考下以下两篇博客

1、android应用搬家的实现

2、如何在Android中启动java程序

大概思路是

通过app_process 命令启动java程序(想了解app_process更多资料,请自行google)

可是app_process 命令需要root权限才能执行,所以要配合上面所讲的su命令啦。

 

这么做是可以实现绕过系统检查权限的大门

但是每次执行的时候都要先请求下root权限(那种弹框和toast会让用户感觉到很不安)

 

不要忘了咱们的标题:Android应用程序永久获取root权限方法。

永久获取root权限,就是获取过一次root权限后,以后再也不需要去请求root权限

实际上,像一些软件管家:安卓优化大师、360优化大师,都是这么做的

(不信你可以试试其软件搬家功能,即使你的手机解除root,它们还是具有root权限)

 

原理可以看下以下链接

安卓应用程序永久获取Root权限的方法

(下载该文章需要money,明天我再上传该文档,一时找不到了.......)

 

大概思路

自己编译一个类似su的可执行程序(以下以main为代号),在main中调用app_process命令

然后在第一次获取root权限的时候将其push到/system/bin/目录下,再chmod 4755 可执行程序

修改其访问权限,使执行该命令的进程能够暂时获得root权限

(4755 也请google下吧 linux文件权限)。

以后咱们要是需要root权限的话就调用mian命令,不用去调用su来请求root权限啦

至于为什么要这么做:也是为了让root授权的对话框和toast不在显示

 

插一句,想要知道su和superuser.apk的关系,请点开下面的链接

android superuser.apk 管理root权限原理分析

 

 

综上:我们所做的就是绕过su命令,用我们自己编写的可执行程序main开实现su的功能。

 

自己编译可执行程序main的时候,需要注意一点,请参考su源码

我在这一步就卡了很久

 

大概意思

 

main的uid是继承的父类的uid,而且它有root权限,但是在main中执行system(cmd)

(这里的cmd 调用app_process 来启动实现了软件搬家的java程序)

假如system()是通过sh 命令来实现,但在main中开启的sh的uid也是继承main的uid

也就是应用程序的uid,但是这个uid并没有权限执行相关root命令

所以需要先将main的uid设置为root,为了使sh的uid也为root,从而使sh 能够执行

需要root权限的app_process命令

关键代码在你的main 方法中加入

C代码 

 

  1. int uid = 0;  
  2. int gid = 0;  
  3.           
  4. if(setgid(gid) || setuid(uid))   
  5.     return permissionDenied();  

 

可以参考su的源码 (su的源码会在我上传的压缩包中)

 

大概思路就是这样。

 

PS:

在我上传的压缩包中有我自己写的demo,实现的是软件搬家的功能

操作很简单

1、安装Movepkgdemo.apk,并执行

2、点击 install com.zl.hw 按钮 来 安装一个helloword android程序

3、点击 get root 按钮,来第一次获取root权限

4、点击第三个按钮,来移动helloword程序

 

PPS

1、编译可执行程序main(注意main只是个代号,在Movepkgdemo中 是 放在Movepkgdemo项目的 /res/ raw/ 目录下的zlsu文件)

2、将main.c文件成可执行文件会需要linux编译环境,你可以自己在linux上编译,也可以在windows下来编译

windows方法:使用cygwin 来进行NDK开发(搭建该环境可能需要话费比较多时间,主要是要下载cygwin

cygwin环境配置文档也在上传的压缩包中,虽说花了打功夫,但是搭建好NDK环境,以后也能方便咱做NDK开发。

NDK环境搭建需要cygwin在安装的时候安装必需的一些项目(请查看以下链接)

 

 

最后总结一下总体思路

1、在java代码中实现需要root权限的功能,并提供一个包含入口函数main的类

2、通过app_process命令来启动1中的java模块,但是app_process需要root权限,所以看第3步

3、通过在第一次获取root权限的时候,向/system/bin/注入自写的类似su的二进制可执行程序

main,并且和su的访问权限也一样(chmod 4755)(main功能和su一样,唯一不一样就是去除了su中与superuser.apk 交互的代码),即main命令执行app_process命令,这样可以做到

一旦拥有root权限,以后再也不需要去请求root权限

 

最新文章
人工智能市场分析:人工智能蓬勃发展赋能各行业 苹果推出融合ChatGPT的Siri
苹果推出融合ChatGPT的Siri12月11日,苹果发布了iPhone、iPad和Mac软件的更新,其中包括了融合ChatGPT的Siri。这对OpenAI来说也
TCL华星副总裁赵斌:印刷OLED将拓展至高端显示器、笔电等领域
来源:Wit Display拓展印刷OLED应用领域2024 TCL全球技术创新大会上,TCL华星现场发布了首款量产印刷OLED21.6吋4K专业显示屏、全
韩信义在里程碑庆典中担任蚂蚁集团的领导
在一个关键的举动中,Cyril Han Xinyi已被任命为蚁群他将于3月1日上任。这一变化是在公司庆祝一个非凡的20年的里程碑在移动支付
python数据开发工程师和数据开发工程师有什么区别
美团骑行事业部在全国各个城市开展美团单车、电单车业务,提供绿色、便捷的共享出行服务,是美团出行板块重要的组成部分。我们力
Docker的轻量级可视化工具Portainer
Docker可视化工具是指用于管理和监视Docker容器的GUI工具。通过这些工具,用户可以以图形化的方式查看和操作Docker容器、镜像和
Character.AI聊天机器人将禁止青少年与其发展“恋爱”关系,此前曾遭家长起诉
12 月 14 日消息,据 TechRadar 今日报道,Character.AI 最近推出了一系列新功能,旨在提升与平台上虚拟人格的互动安全性,尤其
6828份“性萧条”调查:年轻人和中产消失的性生活
  性在中国年轻人中的存在感正在减弱。  在北京大学、复旦大学一同发起的中国人私生活质量调查中,6828份有效问卷显示:年轻
12月10日陈妍希在浙江拍戏,陈晓却被网暴参加活动不去参加岳父葬礼,简单复盘一下#陈晓未参加岳父葬礼#黑热搜的时间线。
下面是详细的时间线:12月7日,陈妍希突然发了一条悼念父亲的微博,没有提何时去世,没有提葬礼。12月10日陈妍希新戏默默开机。1
(实时儿科)孝感市小孩自闭症医院排名(官方公开)孩子孤僻不爱和人交往怎么办
  (实时儿科)孝感市小孩自闭症医院排名(官方公开)孩子孤僻不爱和人交往怎么办:1、武汉天佑之星儿童医院,2、武汉儿童专科医院
2025年选哪家:肇庆华侨生联考培训学校(成绩提升快不快)
2025年选哪家:肇庆华侨生联考培训学校(成绩提升快不快)2025年选择肇庆华侨生联考培训学校,成绩提升显著。该校专注于华侨生联