zoukankan      html  css  js  c++  java
  • Android中怎样自己制作su

    本文原博客: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()的使用 
    结束!

  • 相关阅读:
    Java Web连接各种数据库方式汇总
    java.lang.UnsupportedClassVersionError: Bad version number in .class file 解决办法
    <meta 标签的详细使用
    Redis实战之征服 Redis + Jedis + Spring (一)
    Redis实战之征服 Redis + Jedis + Spring (二)
    Redis实战之征服 Redis + Jedis + Spring (三)
    快速组合数
    HDU4632:Palindrome subsequence(区间DP)
    阿里暂停微信服务:让商家回归微信的本职,做好客户服务
    谈谈无穷小微积分对我国微积分教学改革的影响
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6874119.html
Copyright © 2011-2022 走看看