当前位置: 首页 > backend >正文

Android应用获取root权限,修改系统文件

Android系统权限说明

首先对Android权限等级进行一下说明,简单的分为一般用户、系统用户和超级用户。

一般的用户权限在Manifest.xml文件中使用<uses-permission/>标签进行申请,比如sd卡读写权限、网络使用权限等等;

系统用户权限需要给Apk添加与Framework相同的签名,这样应用就能够调用Android的一些核心的接口,比如访问系统文件(read)、后台静默安装Apk……

超级用户即root用户,拥有这台Android机的所有权限,能够对包括系统文件在内所有文件进行操作,所以如果随意将root权限赋予应用的话是十分危险的。Android手机在出厂的时候大多不提供root权限。


获取root权限

Android root的根本原理是将su文件拷贝到/system/bin/或/system/xbin/目录下。目前获取root权限主要有两种方式:1、利用系统漏洞,窃取root权限;2、修改boot.img重新刷入机器。详情请参考:http://www.zhihu.com/question/21074979


Android应用申请root权限

对于已经root过的机器,应用可以直接申请获取root权限,实现对系统文件的操作。基本是使用shell命令进行操作,首先是使用“su”切换到root用户,然后是"chmod 777 " + pkgCodePath修改该应用的读写权限,如果以上两步能够执行通过则Apk就具有了root权限。代码如下:

public static boolean upgradeRootPermission(String pkgCodePath) {Process process = null;DataOutputStream os = null;try {String cmd = "chmod 777 " + pkgCodePath;process = Runtime.getRuntime().exec("su"); // 切换到root帐号os = new DataOutputStream(process.getOutputStream());os.writeBytes(cmd + "\n");os.writeBytes("exit\n");os.flush();process.waitFor();} catch (Exception e) {return false;} finally {try {if (os != null) {os.close();}process.destroy();} catch (Exception e) {}}return true;}


修改系统文件

获得root权限后就够执行root用户才能执行的shell命令,比如说修改系统文件。

因为系统目录默认挂载为只读的,要修改系统文件首先要将该分区挂载分区挂载为可读的;首先执行命令“mount”,目的是找到该分区挂载的位置;然后执行重新挂载的命名mount -o remount,rw "+block+" /system"(block)是对应的挂载路径。挂载为可读写的之后就任你随意蹂躏了。


核心代码

执行shell命令方法:

public static String execRootCmd(String cmd) {String result = "";DataOutputStream dos = null;DataInputStream dis = null;try {Process p = Runtime.getRuntime().exec("su");dos = new DataOutputStream(p.getOutputStream());dis = new DataInputStream(p.getInputStream());dos.writeBytes(cmd + "\n");dos.flush();dos.writeBytes("exit\n");dos.flush();String line = null;while ((line = dis.readLine()) != null) {result += line+"\r\n";}p.waitFor();} catch (Exception e) {e.printStackTrace();} finally {if (dos != null) {try {dos.close();} catch (IOException e) {e.printStackTrace();}}if (dis != null) {try {dis.close();} catch (IOException e) {e.printStackTrace();}}}return result;}
具体操作步骤:

if (!upgradeRootPermission(getPackageCodePath())) {result="获取root权限失败";Toast.makeText(this, "获取root权限失败", Toast.LENGTH_SHORT).show();}button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String re = result;re += execRootCmd("mount");if (re.length() > 10) {block = re.substring(0, re.indexOf(" /system"));block = block.substring(block.lastIndexOf("\n") + 1);}Log.i("", re);textView.setText(re + "\r\n" +"..."+ block + "...");}});button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(block != null&&block.length()>0){String re = execRootCmd("mount -o remount,rw "+block+" /system");textView.setText(re);}else{Toast.makeText(MainActivity.this, "未找到system", Toast.LENGTH_SHORT).show();}}});button3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String re = execRootCmd("cp -f " + filePath + " " + newFilePath);textView.setText(re);}});

http://www.xdnf.cn/news/11861.html

相关文章:

  • CentOS搭建并配置Nexus3记录
  • 干货整理:电脑监控软件都有哪些,哪款好用( 六大好用监控电脑软件推荐)
  • gps wifi信号测试软件,搜星+WiFi+EMI 导航平板信号性能横评
  • vb与EXCEL的连接
  • 由于找不到d3dx9_39.dll,无法继续执行代码的5种解决方法
  • 串口数据转以太网
  • Java入门基础,Java知识点总结合集
  • 迅雷老版本下载地址
  • 【学术相关】最新整理!绝对不能错过的130个学术网站和26个科研工具
  • OA系统:一文读懂OA系统,内附优秀OA界面。
  • nginx配置文件特殊字符说明
  • python实现抖音上比较火的罗盘时钟
  • 逆向工程入门学习(FreeBuf)
  • 黑马程序员 JavaScript
  • Iocomp Crack和ProEssentials Crack
  • 百度竞价点击器_百度竞价如何屏蔽恶意点击
  • Windows 7 RC十大功能的详细介绍以及改进方法
  • 【推荐】10个网站分类目录提交地址
  • linux下清理信号量,Linux下进程间通信方式——信号量(Semaphore)
  • JAVAscript的发展及八大数据类型
  • win10系统魔兽世界无法连接服务器地址,win10系统无法更新魔兽世界提示正在等待另一项安...
  • 罗马音平假字复制_罗马音平假名和片假名大全ID,罗马音平假名和片假名大全复制中文[多图]...
  • index of 的高级搜索命令
  • 对ROS局部运动规划器Teb的理解
  • 弘辽科技:淘宝怎么增加手淘访客?有什么技巧?
  • 153:vue+openlayers 设定修改图层的透明度
  • 【转】ACM竞赛和算法相关
  • Android版xx助手之天天酷跑外挂具体分析
  • VC++ 各个版本(2005 2008 2010 2012 2013 2015 2017 2019 2022)的运行库 VC_redist下载
  • 无线局域网安全(四)————身份认证之4路握手