1.環(huán)境準(zhǔn)備
源碼開發(fā)環(huán)境:
Windows 10+Vmware player 15+ubuntu-20.04
安卓系統(tǒng)版本:
基于LineageOS 17.1版本(Android 10)
測試手機(jī)型號:
oneplus 3
2.開啟adb root權(quán)限
2.1 adbd中涉及adb root權(quán)限開啟判斷
adbd中涉及adb root權(quán)限開啟判斷源文件文件路徑:
systemcoreadbdaemonmain.cpp
該文件中涉及權(quán)限判斷的方法代碼如下:
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版本系統(tǒng)的selinux權(quán)限放的寬一些,方便我們進(jìn)行配置修改。修改主要涉及修改的關(guān)鍵屬性如下:
#adbd中會根據(jù)ro.secure=0來判斷adbd是否需要root用戶權(quán)限 ro.secure=0 #設(shè)置ro.adb.secure=0表示默認(rèn)adb授權(quán)打開,不用彈出煩擾usb授權(quán)對話框了 ro.adb.secure=0
可以通過兩種方式來配置adb root用戶權(quán)限,分別是修改編譯過程中main.mk文件的屬性設(shè)置。另一種是直接修改adbd中的源碼,將相關(guān)屬性獲取的地方直接返回需要修改的值。
2.2.1 main.mk中修改屬性方式
修改文件路徑:
buildmakecoremain.mk
以下是該文件中配置之后的部分內(nèi)容:
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容易檢測到手機(jī)處于不安全狀態(tài),越獄風(fēng)險(xiǎn)。
2.2.2 adbd源碼中修改屬性方式
修改文件路徑路徑位置:
systemcoreadbdaemonmain.cpp
修改的關(guān)鍵代碼如下:
//修改ro.adb.secure關(guān)閉usb授權(quán)對話框適合編譯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 ... } //直接返回不降權(quán)處理 staticboolshould_drop_privileges(){ ///ADDSTART適合編譯userdebug版本 if(CONFIG_ADBD_ROOT>=0) { returnfalse; } ///ADDEND ... }
這種方式修改可以防止App檢測屬性ro.secure ro.adb.secure,不做任何修改情況下userdebug編譯出來的這兩個(gè)屬性都為1
2.2.3 采用的修改方案
采用修改adbd源碼的方式進(jìn)行測試驗(yàn)證
3.內(nèi)置fridaserver到手機(jī)系統(tǒng)
3.1下載fridaserver
由于測試的機(jī)型為arm 64位的,所以下載Android 64位版本。
3.2 創(chuàng)建fridaserver模塊
(1).在源碼根目錄創(chuàng)建路徑 frameworksasecmds創(chuàng)建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模塊加入系統(tǒng)編譯模塊鏈
模塊加入源碼編譯鏈可以在以下文件路徑中添加:
buildmake argetproductase_system.mk
在該文件中添加myfridaserverarm64模塊到模塊編譯鏈中的內(nèi)容參考如下:
#Basemodulesandsettingsforthesystempartition. PRODUCT_PACKAGES+= myfridaserverarm64 abb adbd ...
4.編譯源碼
執(zhí)行如下命令編譯:
qiang@ubuntu:~/lineageOs$sourcebuild/envsetup.sh qiang@ubuntu:~/lineageOs$breakfastoneplus3 qiang@ubuntu:~/lineageOs$brunchoneplus3
5.刷機(jī)
使用twrp進(jìn)行刷機(jī)。
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>
進(jìn)入recovery以后選擇刷機(jī)包完成刷機(jī)操作。
此處使用到的幾個(gè)命令說明:
1.adbpush 表示將電腦端文件傳輸?shù)绞謾C(jī)端 比如:adbpushc:\test.txt/data/local/tmp/test.txt 2.adbrebootrecovery 手機(jī)進(jìn)入recovery模式
6.驗(yàn)證
adb權(quán)限驗(yàn)證:
C:UsersQiang>adbshellps-Z|findstr"adbd" usu:s0root277111846446212poll_schedule_timeout7482d393c8Sadbd C:UsersQiang>
以上命令執(zhí)行之后可以看到adbd運(yùn)行的時(shí)候運(yùn)行的安全域"usu:s0",運(yùn)行的用戶為root用戶。所以在selinux打開的情況下,adbd運(yùn)行同時(shí)滿足運(yùn)行安全域"usu:s0"以及運(yùn)行用戶"root"的條件,就具備了超級root權(quán)限。
啟動內(nèi)置myfridaserverarm64驗(yàn)證:
C:UsersQiang>adbshell OnePlus3:/#myfridaserverarm64-D C:UsersQiang>adbshellps|findstr"myfrida" root6298112401643772poll_schedule_timeout7316a903c8Smyfridaserverarm64 C:UsersQiang>
審核編輯:劉清
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
593瀏覽量
27397 -
Android系統(tǒng)
+關(guān)注
關(guān)注
0文章
56瀏覽量
13500 -
ADB驅(qū)動
+關(guān)注
關(guān)注
0文章
13瀏覽量
6264
原文標(biāo)題:Android10系統(tǒng)內(nèi)置fridaserver可執(zhí)行程序到手機(jī)系統(tǒng)
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論