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>
审核编辑:刘清
-
Linux系统
+关注
关注
4文章
591浏览量
27351 -
Android系统
+关注
关注
0文章
56浏览量
13475 -
ADB驱动
+关注
关注
0文章
13浏览量
6259
原文标题:Android10系统内置fridaserver可执行程序到手机系统
文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论