Android应用获取Root权限

Android获取Root权限!

操作方法

  • 01

    在项目的过程中,有可能会要实现类似360优化大师、安卓优化大师的软件搬家、静默安装等需要root权限的功能,或者类似SET_PREFERRED_APPLICATIONS、MOVE_PACKAGE 等需要系统的权限,必须要有系统签名。 咱们拿 软件搬家 来当例子(通过获取系统权限,而不是弹出系统的应用管理界面来搬家): 实现方式: 1、想办法获取系统权限,但是这个一般办不到,因为不同厂家出厂的手机系统签名都不一样 ( 可以看看我很早的时候提的问题: android系统权限SET_PREFERRED_APPLICATIONS怎么获取 ) 2、在已经root过得手机,获取root权限(有root权限就可以为所欲为啦,嘿嘿) 第一种办法暂时不考虑,想了解的童鞋可以google Android如何获取系统权限。 我们说说第二种办法, 在已经root过得手机上获取root权限,简单 Java代码 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代码 int uid = 0; int gid = 0; if(setgid(gid) || setuid(uid)) return permissionDenied(); [cpp] view plain copy #include <stdio.h> #include <unistd.h> int main(int argc, char **argv) { if (setgid(0) || setuid(0)) fprintf(stderr, "su: permission denied\n"); else { char *args[argc + 1]; args[0] = "sh"; args[argc] = NULL; int i; for (i = 1; i < argc; i++) args<i> = argv;</i> execv("/system/bin/sh", args); } } 可以参考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在安装的时候安装必需的一些项目(请查看以下链接): 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权限

(0)

相关推荐

  • Android系统获取ROOT权限后能做些什么?

    操作方法 01 Android的设备Root了以后可以做些什么特别的操作呢?今天rom之家小编为大家简述Root以后最实用的几种用途. 在了解Root的用途之前,我们先来简单看看Android的Roo ...

  • Android获取Root权限

    对于新近入手Android系统手机的机友来说,一定会接触到一个新词"ROOT",他的出现频率很高,在各个论坛上,网友的字里行间经常会出现,那么获取Root权限呢? 步骤/方法 01 ...

  • android获取root权限 安卓手机如何越狱

    安卓手机系统是当前最流行的智能手机操作系统之一.安卓系统要获取root权限很方便.下面为大家介绍一下安卓系统如何越狱. 操作方法 01 要将安卓手机越狱,只需在电脑上下载一个root软件或带有root ...

  • 教你如何获取root权限认识ROOT怎么使用教程(图)

    手机越用越智能,而系统定制又包含较多无用的应用,对于玩机爱好者来说,这是多么多么郁闷的一件事;更为重要的是,高玩们更喜欢DIY,喜欢那种控制的快感!所以今天就给大家说说Android手机ROOT权限的 ...

  • 如何获取ROOT权限及使用方法

    一. 如何获取手机Root权限? 目前,获取ROOT权限,自由控制手机是多数Android手机玩家都热衷做的事情,要获得安卓手机ROOT权限,方法也十分简单:纵然每款机型的root方式各不相同,但一般 ...

  • 安卓手机获取root权限

    安卓手机,即安装了 Android系统的手机 .出于各种利益的诱惑,手机厂商往往都在手机中 预装了很多没用的所谓的"预装软件",这些垃圾软件一般都跟随系统自启动,耗用太多系统内存等 ...

  • ROOT,ROOT是什么,如何获取ROOT权限

    ROOT,ROOT是什么,如何获取ROOT权限 操作方法 01 ROOT,ROOT是什么 ROOT是计算机领域术语,存在于UNIX系统(如AIX.BSD等)和类UNIX系统(如Debian.Redha ...

  • 华为U8650 ROOT获取ROOT权限教程

    看到有很多华为U8650机友在找华为U8650的ROOT教程,都想知道华为U8650的ROOT权限要怎么样才能获取?老鸟们都清楚,要想删除系统自带的垃圾就必须要先获取ROOT权限,不然是无法删除的.好 ...

  • G4 Tattoo获取Root权限教程

    G4 Tattoo获取Root权限教程 步骤/方法 01 步骤1:安装USB驱动 这个相关步骤其实笔者已经在Android系列教程(一)中介绍,故今天简要叙述一下过程.进入设置-应用程序-开发-USB ...