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文章
593瀏覽量
27392 -
Android系統
+關注
關注
0文章
56瀏覽量
13492 -
ADB驅動
+關注
關注
0文章
13瀏覽量
6263
原文標題:Android10系統內置fridaserver可執行程序到手機系統
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論