Android中怎样自己制作su

摘要:
char*外壳;char**argv;DB_允许};极限。h>标准工时>#包括<插管=0;intgid=0;}charcommand[1024];

本文原博客:http://hubingforever.blog.163.com/blog/static/171040579201372915716149/

在Android源代码的systemextras(比方Android4.0systemextras)下新建一个文件夹。比方su_robin文件夹

在su_robin文件夹下包括以三个文件:
su.h文件

#ifndef SU_h 
#define SU_h 1
#ifdef LOG_TAG
#undef LOG_TAG
#endif
#define LOG_TAG "robin"
#define REQUESTOR "com.noshufou.android.su"
#define REQUESTOR_DATA_PATH "/data/data/" REQUESTOR
#define REQUESTOR_CACHE_PATH "/dev/" REQUESTOR
#define REQUESTOR_DATABASES_PATH REQUESTOR_DATA_PATH "/databases"
#define REQUESTOR_DATABASE_PATH REQUESTOR_DATABASES_PATH "/permissions.sqlite"
/* intent actions */
#define ACTION_REQUEST REQUESTOR ".REQUEST"
#define ACTION_RESULT  REQUESTOR ".RESULT"
#define DEFAULT_SHELL "/system/bin/sh"
#ifdef SU_LEGACY_BUILD
#define VERSION_EXTRA "l"
#else
#define VERSION_EXTRA ""
#endif
#define VERSION "3.1.1" VERSION_EXTRA
#define VERSION_CODE 17
#define DATABASE_VERSION 6
#define PROTO_VERSION 0
struct su_initiator {
    pid_t pid;
    unsigned uid;
    char bin[PATH_MAX];
    char args[4096];
};
struct su_request {
    unsigned uid;
    int login;
    int keepenv;
    char *shell;
    char *command;
    char **argv;
    int argc;
    int optind;
};
struct su_context {
    struct su_initiator from;
    struct su_request to;
    mode_t umask;
};
enum {
    DB_INTERACTIVE,
    DB_DENY,
    DB_ALLOW
};
#endif

注意,这里的非常多东西是多余。
su.c文件

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/wait.h>
#include <sys/select.h>
#include <sys/time.h>
#include <unistd.h>
#include <limits.h>
#include <fcntl.h>
#include <errno.h>
#include <endian.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>
#include <stdint.h>
#include <pwd.h>
#include <private/android_filesystem_config.h>
#include <cutils/properties.h>
#include <cutils/log.h>
#include "su.h"
int main(int argc, char *argv[])
{
LOGI("hello !robin-su begin %d !",getuid());
printf("hello !robin-su begin");
int uid=0;
int gid=0;
if(setgid(gid) || setuid(uid)) {
LOGI("robin su: permission denied ");
fprintf(stderr,"su: permission denied ");
return 1;
}
  char command[1024];
LOGI("hello !robin-su end %d !",getuid());
printf("hello !robin-su end");
/* Default exec shell. */
   execlp("/system/bin/sh", "sh", NULL);
   fprintf(stderr, "su: exec failed ");
return 1;
}

Android.mk文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sur
LOCAL_SRC_FILES := su.c
LOCAL_STATIC_LIBRARIES :=
    liblog
    libc
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_MODULE_TAGS := eng debug
LOCAL_FORCE_STATIC_EXECUTABLE := true
include $(BUILD_EXECUTABLE)

编译Android源代码,生成rom
假设你还不知道怎样编译Android源代码。请參照
在out argetproductgenericsystemxbin文件夹下找到生成的可运行文件sur,就是我们自己制作的su文件
通过adb push命令将其推送到手机上的systemxbin文件夹。
通过运行系统原来自己带的su切换到root用户,对手机上sur文件运行chmod 6777 sur命令。

 

使文件属性变为rwsrwsrwx,例如以下所看到的
rwsrwsrwx root     root        58960 2013-08-29 11:31 sur
然后你能够通过运行系统原来自己带的sur切换到root用户
关于chmod 6777 sur命令请參考《chmod命令基本篇》和请參考《chmod命令高级篇( SetUID与SetGID标识位)
关于setuid请參考《setuid()与setgid()的使用 
结束!

免责声明:文章转载自《Android中怎样自己制作su》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IDEA 将现有类一键生成UML图SpringCloudStream学习(二)RabbitMQ中的交换机跟工作模式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

windows开机显示无法登陆你的账号,你的所有操作将不会被保存!变相系统还原?

■  如果你的电脑开机的时候出现这种提示 ■  别急,这可能只是一些爱倒腾的同学不小心删除了系统账户文件导致的,我们要吧这些系统账户文件再找回来 ■  计算机——》属性——》高级系统设置——》用户配置文件设置——》默认配置文件更改——》目标目录C:UsersAdministrator 如下图,做完更改重启即可。 ■  如果说因为丢失了系统用户管理...

springboot使用xml配置dubbo读取yml占位符

约定优于配置是springboot简化配置的思路,其中它提供的自动配置、基于注解配置为我们搭建项目框架带来了很大的便利。 使用springboot的项目跟仅使用spring的项目相比,少了很多xml配置文件,基于自动配置或者使用注解和配置类就可完成大多数配置。 springboot + dubbo搭建微服务工程:(springboot版本2.0.4.REL...

部署在IIS服务器的asp.net 网站,禁止访问指定类型文件

网站上的一些文件不希望用户访问,可以通过下面的方式简单实现。不需写代码(在IIS6下试验过)。 第一步,在IIS中实现映射。 哪些文件需要特殊处理。 通俗的将就是将哪种类型的文件交给特定的工厂来处理。通过这种方式可以实现自定义的请求方式。 请求到达IIS,然后IIS将请求交给我们设定的工厂处理。 对于aspx文件,默认是aspnet_isapi.dll由来...

Hutool-二维码生成

Hutool工具类生成二维码 示例代码: import cn.hutool.core.io.FileUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrConfig; import com.google.zxing.qrcode.decoder.Er...

react-antd蚂蚁金服组件实例

React框架已经火了好长一段时间了,再不学就out了! 对React还没有了解的同学可以看看我之前的一篇文章,可以快速简单的认识一下React。React入门最好的实例-TodoList 自己从开始接触react一窍不通,到慢慢的似懂非懂,通过各种途径学习也有一阵了。学习过程中还会接触到很多新的东西,比如ES6、 webpack,过程艰辛谁人懂,见坑填...

Apache Commons-Codec的使用

处理常用的编码方法的工具类包 例如DES、SHA1、MD5、Base64等. 导入包: <!-- 这个是编码解码的 --><dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId...