一般来说, Android 下的应用程序可以逗直接地得到的最大的权限为 system ,但是如果我们需要在程序中执行某些需要 root 权限的命令,如 ifconfig 等,就需要 root 权限了。按照 Simon 的文章中提到的,应用程序有以下两种办法临时获得 root 权限:   1) 实现一个 init 实现一个 Service ,来帮助 Android 应用程序执行 root 权限的命令。   2) 实现一个虚拟设备,这个设备帮助 Android 应用程序执行 root 权限的命令。      第二种办法我这里没有尝试,暂时也不会。这里讲讲我在实现第一种办法的过程和遇到的一些问题。      1. 将我们要执行的命令写成脚本,或者可执行程序。   下面是我的脚本 ifconfig_test.sh :   # ! /system/bin/sh   ifconfig   注意: 脚本的第一行必须为 # ! /system/bin/sh ,否则无法执行,通过 dmesg 可以查看到信息内容为 cannot execve ./ifconfig_test.sh: Exec format error      也可以采用 C/C++ 编写需要执行的命令或者程序,并在编译 image 的时候编译成可执行程序。      2. 在 init.rc 中注册 service   Android 中的 service 需要在 init.rc 中注册, Init.rc 中定义的 Service 将会被 init 进程创建,这样将可以获得 root 权限。当得到相应的通知(通过属性设置)后, init 进程会启动该 service 。   本文中注册的内容如下:   service ifconfig_test /system/etc/ifconfig_test.sh   oneshot   disabled   其中, oneshot 表示程序退出后不再重新启动, disabled 表示不在系统启动时启动。      注意: 这里 service name 不能超过 16 个字符。我之前的 service name 由于定义的比较长, 18 个字符,设置属性通知 service 启动后查看 dmesg 可以看到提示: init: no such service 。查看 /system/core/init/parser.c 的源代码,在 parse_service->valid_name 函数中可以看到如下内容: if (strlen(name) > 16) { return 0; } ,证明 service 的名字的确不能超过 16 个字符。      3. 将 Android 应用程序提升为 system 权限   既然应用程序可以通过启动 service 获得 root 权限,那么岂不是很不安全。 Android 考虑到了这点,规定只有 system 权限的应用程序才能设置属性,通知 service 启动。关于提升 system 权限的文章网上已有很多,这里就不再细说,      4. 在应用程序中添加属性设置代码   前面已经提到,对于 Android 来说,应用程序通知 init 启动 service 是通过设置系统属性来完成的,具体为设置 System 系统属性 逗ctl.start地 为 逗ifconfig_test地 ,这样 Android 系统将会帮我们运行 ifconfig_test 这个 service 了。   对该系统属性的设置有三种方法,分别对应三种不同的应用程序:   1) Java 代码   Android 在 Java 库中提供 System.getProperty 和 System.setProperty 方法, Java 程序可以通过他们来设置和获得属性。代码如下:   SystemProperties.set("ctl.start", "ifconfig_test");   上面的代码是通知 Android 执行 ifconfig_test service ,如果需要查询当前 service 执行的状态,如是否执行完毕,可以通过如下代码查询:   ret = SystemProperties.get("init.svc. ifconfig_test ", "");   if(ret != null && ret.equals("stopped"))   {   return true;   }   2) JNI 代码   当编写 NDK 的程序时,可以使用 property_get 和 property_set 这两个 API 来获得和设置属性。使用这两个 API 必须要包含头文件 cutils/properties.h 和链接 libcutil 库。      3) Shell 脚本   Android 提供了命令行 setprop 和 getprop 来设置和获取属性,他们可以在脚本中被使用。      由于我的程序是在 JNI 中调用脚本,脚本中又执行 ifconfig ,因此我将设置属性的部分放在了脚本中完成,代码如下:   setprop ctl.start ifconfig_test      #wait for the service until it stops   ret=1   while [ $ret -ne 0 ]   do   getprop | grep "$ENABLE_MAPPER_SRV" | grep stopped   ret=$?   done   通过上面 4 个步骤, Android 应用程序就获得了 root 权限,更具体的说,是在执行我们需要执行的命令时临时获得了 root 权限。   转载仅供参考,版权属于原作者。祝你愉快,满意请~~哦

取消

评论

android应用程序永久获取root权限方法,怎么使Android应用程序获得root权限相关推荐

  1. 蓄电池充电c语言程序,用于蓄电池的快速充电方法、快速充电系统和程序的制作方法...

    用于蓄电池的快速充电方法.快速充电系统和程序的制作方法 [技术领域] [0001]本发明涉及使用充电器的用于蓄电池的快速充电方法.快速充电系统和程序,并且特别涉及,即使当充电曲线指示充电期间电力和时间 ...

  2. 以下选项中使python脚本程序转变为_以下选项中使python脚本程序转变为可执行程序的第三方库的是:...

    [多选题]拉式市场的供应链系统就是以客户为导向进行( ). [单选题]五行关系中"见肝之病,知肝传脾"是指 [单选题]已知立体的主视图和俯视图,正确的左视图是(         ) ...

  3. 【Android 性能优化】应用启动优化 ( 方法追踪代码模板 | 示例项目 | SD 卡访问权限 | 示例代码 | 获取 Trace 文件 | Android Studio 查看文件)

    文章目录 一. 方法追踪代码模板 二. 追踪 Launch 页面的 onCreate 方法执行情况 1. 示例项目 2. SD 卡访问权限问题 ( 动态权限申请 ) 3. MainActivity o ...

  4. Android 虹软人脸识别获取数据的方法

    前言 最近app要上一个新的功能 在客户点击购买的时候 记录客户的基本信息 比如年龄和性别 为后期做大数据分析做铺垫 在网上找第三方 找到了虹软人脸识别 在这里吐槽一下 免费的虹软 真是很坑 客服没人 ...

  5. Android 从ImageView中获取Bitmap对象方法

    showImageView.setDrawingCacheEnabled(true);Bitmap bitmap=showImageView.getDrawingCache();showImageVi ...

  6. android 音乐播放器 获取sd卡所有音乐文件,Android Studio音乐播放器无法读取SD卡,只有内部存储器...

    我很抱歉,如果这原来是一个愚蠢的问题,它可能会成为一个快速修复,但我只是无法弄清楚.我在android studio中创建了音乐播放器,并且没有任何sdcard上的歌曲不会显示在列表视图中,只有内部内 ...

  7. Android扫码枪无输入框获取扫码内容(或者Android自助机获取扫码内容)

    公司项目要求获取Android自助机获取扫码内容传给服务器后台,网上查了下和Android扫码枪获取内容一样,不需要添加任何三方sdk,Android原生即可实现.要看到扫码内容,可以在Activit ...

  8. 微信小程序无法获取用户头像和昵称,微信小程序获取昵称为微信用户,头像为灰色,请使用下面方式过去

    getUserProfile(e) { wx.getUserProfile({ desc: '使用户得到更好的体验', success: (res) => { console.log(" ...

  9. Java反射获取类,方法

    获取Class类的实例 若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高. Class clazz = Person.class; 已知某个类的实例,调用该实例的getCl ...

最新文章

  1. (康托展开解释)+ NYOJ 139 我排第几个
  2. phpcmsv9多表联合查询分页功能实现
  3. Linux部署Node.js应用
  4. Java中String 和StringBuffer的区别
  5. 论数据集成技术的演变和发展 3/3
  6. 1623: 街道路径条数
  7. Leetcode周赛复盘——第 276 场力扣周赛
  8. MYSQL存储磁盘创建vgcreate_【转】parted创建硬盘分区并创建LVM
  9. android 16 登陆,那些年我们一起养过的电子鸡登陆Android平台
  10. Springboot缓存实战笔记之概念篇
  11. 95-910-170-源码-FlinkSQL-Flink SQL 中的流和动态表
  12. java static int count,static int bitCount(long i)
  13. 虚拟机与ubuntu(二):连接访问
  14. 二分类变量相关性分析spss_两个有序分类变量相关性的卡方检验-SPSS教程
  15. 计算机硬件设备建档,捷通科技RFID 文件柜档案管理硬件方案
  16. 有了这个列表,程序员不愁没练手的小项目了
  17. [笔记]攻防工具分享之 CobaltStrike框架 《二》生成后门
  18. 【UV打印机】PrintExp打印软件教程(三)-文件和打印
  19. ArcGIS 保存后在另一台电脑上打开显示无数据的问题
  20. mini2440 LED 测试

热门文章

  1. Web3.0时代来临。企业该如何无痛接轨、加值商模?
  2. Java黑皮书课后题第4章:*4.21(检查SSN)编写一个程序,提示用户输入一个社保号码(格式是DDD-DD-DDDD,D是1个数字)你的程序应该判断输入是否合法
  3. OpenGL显示窗口重定形函数
  4. Cobalt编译流程分析
  5. 【12.3】call_soon、call_at、call_later、call_soon_threadsafe
  6. [转][VC/MFC]时间处理
  7. 什么是工业互联网?它从哪里来,要到哪里去?
  8. Amazone S3 生成公网链接
  9. css为何不支持父元素选择器
  10. zzuli 1787: 生化危机 (bfs与dfs)