全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

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

时间:2023-07-25 09:04

人气:

作者:admin

标签: Linux系统  ADB驱动 

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

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

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

staticboolshould_drop_privileges(){
...
boolro_secure=android::GetBoolProperty("ro.secure",true);
boolro_debuggable=__android_log_is_debuggable();

//Dropprivilegesifro.secureisset...
booldrop=ro_secure;

//...except"adbroot"letsyoukeepprivilegesinadebuggablebuild.
std::stringprop=android::GetProperty("service.adb.root","");
booladb_root=(prop=="1");
booladb_unroot=(prop=="0");
if(ro_debuggable&&adb_root){
drop=false;
}
//...and"adbunroot"letsyouexplicitlydropprivileges.
if(adb_unroot){
drop=true;
}

returndrop;
}

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:=$(filteruseruserdebug,$(TARGET_BUILD_VARIANT))
enable_target_debugging:=true
tags_to_install:=
ifneq(,$(user_variant))
#Targetissecureinuserbuilds.
#///ADDSTART
#ADDITIONAL_DEFAULT_PROPERTIES+=ro.secure=1
ADDITIONAL_DEFAULT_PROPERTIES+=ro.secure=0
#///ADDEND
ADDITIONAL_DEFAULT_PROPERTIES+=security.perf_harden=1

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

endif

ifeq($(user_variant),userdebug)
#Pickupsomeextrausefultools
tags_to_install+=debug
#///ADDSTART
ADDITIONAL_DEFAULT_PROPERTIES+=ro.adb.secure=0
#///ADDEND
else
#Disabledebugginginplainuserbuilds.
#///ADDSTART
#enable_target_debugging:=true
#///ADDEND
enable_target_debugging:=
endif
...

这种方式存在的问题:

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

2.2.2 adbd源码中修改属性方式

修改文件路径路径位置:

systemcoreadbdaemonmain.cpp

修改的关键代码如下:

//修改ro.adb.secure关闭usb授权对话框适合编译userdebug版本
intadbd_main(intserver_port){
...
#ifdefined(__ANDROID__)
//Ifwe'reonuserdebug/engorthedeviceisunlocked,permitno-authentication.
booldevice_unlocked="orange"==android::GetProperty("ro.boot.verifiedbootstate","");
if(__android_log_is_debuggable()||device_unlocked){
auth_required=android::GetBoolProperty("ro.adb.secure",false);
///ADDSTART
if(CONFIG_ADBD_ROOT>=0)
{
auth_required=false;
}
///ADDEND
#ifdefined(__ANDROID_RECOVERY__)
auth_required=auth_required&&
android::GetBoolProperty("ro.adb.secure.recovery",true);
#endif
}
#endif
...
}

//直接返回不降权处理
staticboolshould_drop_privileges(){

///ADDSTART适合编译userdebug版本
if(CONFIG_ADBD_ROOT>=0)
{
returnfalse;
}
///ADDEND
...
}

这种方式修改可以防止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文件

以下参考配置:

#///ADDSTART
#///ADDEND
LOCAL_PATH:=$(callmy-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模块到模块编译链中的内容参考如下:

#Basemodulesandsettingsforthesystempartition.
PRODUCT_PACKAGES+=
myfridaserverarm64
abb
adbd
...

4.编译源码

执行如下命令编译:

qiang@ubuntu:~/lineageOs$sourcebuild/envsetup.sh
qiang@ubuntu:~/lineageOs$breakfastoneplus3
qiang@ubuntu:~/lineageOs$brunchoneplus3

5.刷机

使用twrp进行刷机。

C:UsersQiang>adbpushC:UsersQiangDesktoplineage-17.1-20210322-UNOFFICIAL-oneplus3.zip/sdcard/update.zip
C:UsersQiangDesktoplineage-17.1-20210322-UNOFFICIAL-on...pushed,0skipped.30.2MB/s(783272894bytesin24.715s)

C:UsersQiang>adbrebootrecovery

C:UsersQiang>

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

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

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

2.adbrebootrecovery
手机进入recovery模式

6.验证

adb权限验证:

C:UsersQiang>adbshellps-Z|findstr"adbd"
usu:s0root277111846446212poll_schedule_timeout7482d393c8Sadbd

C:UsersQiang>

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

启动内置myfridaserverarm64验证:

C:UsersQiang>adbshell
OnePlus3:/#myfridaserverarm64-D


C:UsersQiang>adbshellps|findstr"myfrida"
root6298112401643772poll_schedule_timeout7316a903c8Smyfridaserverarm64

C:UsersQiang>





审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信