Android10系统内置fridaserver可执行程序到手机系统

描述

1.环境准备

源码开发环境:

Windows 10+Vmware player 15+ubuntu-20.04

安卓系统版本:

基于LineageOS 17.1版本(Android 10)

测试手机型号:

oneplus 3

2.开启adb root权限

2.1 adbd中涉及adb root权限开启判断

adbd中涉及adb root权限开启判断源文件文件路径:

 

systemcoreadbdaemonmain.cpp

 

该文件中涉及权限判断的方法代码如下:

 

static bool should_drop_privileges() {
    ...
    bool ro_secure = android::GetBoolProperty("ro.secure", true);
    bool ro_debuggable = __android_log_is_debuggable();

    // Drop privileges if ro.secure is set...
    bool drop = ro_secure;

    // ... except "adb root" lets you keep privileges in a debuggable build.
    std::string prop = android::GetProperty("service.adb.root", "");
    bool adb_root = (prop == "1");
    bool adb_unroot = (prop == "0");
    if (ro_debuggable && adb_root) {
        drop = false;
    }
    // ... and "adb unroot" lets you explicitly drop privileges.
    if (adb_unroot) {
        drop = true;
    }

    return drop;
}

 

2.2 主要涉及修改地方

源码编译过程中我们选择编译userdebug版本编译,userdebug版本系统的selinux权限放的宽一些,方便我们进行配置修改。修改主要涉及修改的关键属性如下:

 

# adbd中会根据ro.secure=0来判断adbd是否需要root用户权限
ro.secure=0
# 设置ro.adb.secure=0表示默认adb授权打开,不用弹出烦扰usb授权对话框了
ro.adb.secure=0

 

可以通过两种方式来配置adb root用户权限,分别是修改编译过程中main.mk文件的属性设置。另一种是直接修改adbd中的源码,将相关属性获取的地方直接返回需要修改的值。

2.2.1  main.mk中修改属性方式

修改文件路径:

 

buildmakecoremain.mk

 

以下是该文件中配置之后的部分内容:

 

user_variant := $(filter user userdebug,$(TARGET_BUILD_VARIANT))
enable_target_debugging := true
tags_to_install :=
ifneq (,$(user_variant))
  # Target is secure in user builds.
  # ///ADD START
  # ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
  ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0
  # ///ADD END
  ADDITIONAL_DEFAULT_PROPERTIES += security.perf_harden=1

  ifeq ($(user_variant),user)
    ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=1

  endif

  ifeq ($(user_variant),userdebug)
    # Pick up some extra useful tools
    tags_to_install += debug
    # ///ADD START
    ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=0
    # ///ADD END
  else
    # Disable debugging in plain user builds.
    # ///ADD START
    # enable_target_debugging := true
    # ///ADD END
    enable_target_debugging :=
  endif
 ...

 

这种方式存在的问题:

App通过获取属性ro.secure/ro.adb.secure容易检测到手机处于不安全状态,越狱风险。

2.2.2  adbd源码中修改属性方式

修改文件路径路径位置:

 

systemcoreadbdaemonmain.cpp

 

修改的关键代码如下:

 

//修改ro.adb.secure 关闭usb授权对话框 适合编译userdebug版本
int adbd_main(int server_port) {
   ...
#if defined(__ANDROID__)
    // If we're on userdebug/eng or the device is unlocked, permit no-authentication.
    bool device_unlocked = "orange" == android::GetProperty("ro.boot.verifiedbootstate", "");
    if (__android_log_is_debuggable() || device_unlocked) {
        auth_required = android::GetBoolProperty("ro.adb.secure", false);
        ///ADD START
        if(CONFIG_ADBD_ROOT>=0)
        {
           auth_required=false;
        }
        ///ADD END
#if defined(__ANDROID_RECOVERY__)
        auth_required = auth_required &&
                        android::GetBoolProperty("ro.adb.secure.recovery", true);
#endif
    }
#endif
...
}

//直接返回不降权处理
static bool should_drop_privileges() {

    ///ADD START 适合编译userdebug版本
    if(CONFIG_ADBD_ROOT>=0)
    {
       return false;
    }
    ///ADD END
    ...
}

 

这种方式修改可以防止App检测属性ro.secure  ro.adb.secure,不做任何修改情况下userdebug编译出来的这两个属性都为1

2.2.3  采用的修改方案

采用修改adbd源码的方式进行测试验证

3.内置fridaserver到手机系统

3.1下载fridaserver

由于测试的机型为arm 64位的,所以下载Android 64位版本。

3.2 创建fridaserver模块

(1).在源码根目录创建路径 frameworksasecmds创建mycmds目录

(2).将 fridaserver改成想要的名称拷贝到mycmds目录下,比如改成myfridaserverarm64

(3).编写 fridaserver模块编译配置Android.mk文件

以下参考配置:

 

#///ADD START
#///ADD END
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myfridaserverarm64
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_SRC_FILES := myfridaserverarm64
include $(BUILD_PREBUILT)

 

(4).将新增的myfridaserverarm64模块加入系统编译模块链

模块加入源码编译链可以在以下文件路径中添加:

 

buildmake	argetproductase_system.mk

 

在该文件中添加myfridaserverarm64模块到模块编译链中的内容参考如下:

 

# Base modules and settings for the system partition.
PRODUCT_PACKAGES += 
    myfridaserverarm64 
    abb 
    adbd 
    ...

 

4.编译源码

执行如下命令编译:

 

qiang@ubuntu:~/lineageOs$ source build/envsetup.sh 
qiang@ubuntu:~/lineageOs$ breakfast oneplus3
qiang@ubuntu:~/lineageOs$ brunch oneplus3

 

5.刷机

使用twrp进行刷机。

 

C:UsersQiang>adb push C:UsersQiangDesktoplineage-17.1-20210322-UNOFFICIAL-oneplus3.zip  /sdcard/update.zip
C:UsersQiangDesktoplineage-17.1-20210322-UNOFFICIAL-on... pushed, 0 skipped. 30.2 MB/s (783272894 bytes in 24.715s)

C:UsersQiang>adb reboot recovery

C:UsersQiang>

 

进入recovery以后选择刷机包完成刷机操作。

此处使用到的几个命令说明:

 

1.adb push
  表示将电脑端文件传输到手机端
  比如:adb push  c:\test.txt  /data/local/tmp/test.txt

2.adb reboot recovery
  手机进入recovery模式

 

6.验证

adb权限验证:

 

C:UsersQiang>adb shell ps -Z |findstr "adbd"
usu:s0                      root          2771     1  184644   6212 poll_schedule_timeout 7482d393c8 S adbd

C:UsersQiang>

 

以上命令执行之后可以看到adbd运行的时候运行的安全域"usu:s0",运行的用户为root用户。所以在selinux打开的情况下,adbd运行同时满足运行安全域"usu:s0"以及运行用户"root"的条件,就具备了超级root权限。

启动内置myfridaserverarm64验证:

 

C:UsersQiang>adb shell
OnePlus3:/ # myfridaserverarm64  -D


C:UsersQiang> adb shell ps |findstr "myfrida"
root          6298     1  124016  43772 poll_schedule_timeout 7316a903c8 S myfridaserverarm64

C:UsersQiang>

 





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分