1.屬性添加說(shuō)明
為了通過(guò)安卓系統(tǒng)的屬性控制fridaserver啟動(dòng)和停止,將加入如下屬性:
#該屬性控制啟動(dòng)和停止frida #0:停止 1:?jiǎn)?dòng) xro.start.myfrd=0 #該屬性設(shè)置fridaserver啟動(dòng)的端口,默認(rèn)端口為27042 xro.start.myfrd.port=27042 #該屬性控制adbd進(jìn)程重啟,這個(gè)屬性是為了方便控制adbd進(jìn)程重啟 #1:停止adbd然后再啟動(dòng) #0:停止adbd然后再重啟 xro.start.myadbd=
2.系統(tǒng)中添加屬性
2.1 系統(tǒng)中新增屬性
在文件"build oolsuildinfo.sh"中添加以下屬性,添加之后屬性如下:
... echo"xro.start.myfrd=0" echo"xro.start.myfrd.port=27042" echo"xro.start.myadbd=" ...
由于新增的屬性需要在后續(xù)開(kāi)發(fā)的具有System權(quán)限的App中設(shè)置和獲取。如果不配置系統(tǒng)App的selinux訪問(wèn)策略,App將沒(méi)有權(quán)限進(jìn)行屬性修改操作。由于adbd運(yùn)行已經(jīng)擁有了超級(jí)權(quán)限,adbd對(duì)新增的屬性具有讀取和設(shè)置的能力,所以可以不用為adbd配置訪問(wèn)新增屬性的selinux策略。安卓系統(tǒng)中和selinux配置相關(guān)的目錄路徑如下:
systemsepolicy
新增屬性配置操作如下。
(1).定義屬性標(biāo)簽類(lèi)型"mysystem_prop"
在以下文件中添加自定義的屬性標(biāo)簽類(lèi)型定義,文件路徑如下:
systemsepolicypublicproperty.te systemsepolicyprebuiltsapi29.0publicproperty.te
自定義的屬性標(biāo)簽定義如下:
typemysystem_prop,property_type;
由于以上兩個(gè)文件內(nèi)容必須保持一致,所以請(qǐng)確保以上兩個(gè)文件中添加的內(nèi)容保持一致,否則編譯報(bào)錯(cuò)。
(2).為自定義的屬性關(guān)聯(lián)標(biāo)簽
在以下文件中添加自定義的屬性關(guān)聯(lián)的selinux標(biāo)簽,文件路徑如下:
systemsepolicyprivateproperty_contexts systemsepolicyprebuiltsapi29.0privateproperty_contexts
添加的標(biāo)簽內(nèi)容如下:
#表示xro.start.前綴的屬性標(biāo)簽都為mysystem_prop xro.start.umysystem_prop:s0
由于以上兩個(gè)文件內(nèi)容必須保持一致,所以請(qǐng)確保以上兩個(gè)文件中添加的內(nèi)容保持一致,否則編譯報(bào)錯(cuò)。
(3).為system_app添加自定義屬性訪問(wèn)權(quán)限
為了讓system權(quán)限的app能夠訪問(wèn)到自定義的屬性,需要在以下文件中添加訪問(wèn)規(guī)則,文件路徑如下:
systemsepolicyprivatesystem_app.te systemsepolicyprebuiltsapi29.0privatesystem_app.te
添加的訪問(wèn)規(guī)則如下:
#表示允許系統(tǒng)權(quán)限的app讀取mysystem_prop標(biāo)簽的屬性 get_prop(system_app,mysystem_prop) #表示允許系統(tǒng)權(quán)限的app修改mysystem_prop標(biāo)簽的屬性值 set_prop(system_app,mysystem_prop)
由于以上兩個(gè)文件內(nèi)容必須保持一致,所以請(qǐng)確保以上兩個(gè)文件中添加的內(nèi)容保持一致,否則編譯報(bào)錯(cuò)。
3.使用屬性控制fridaserver運(yùn)行
在課程"配置fridaserver為后臺(tái)服務(wù)程序"中已經(jīng)實(shí)現(xiàn)了adbd啟動(dòng)之后啟動(dòng)fridaserver的功能。本篇中將使用新增的屬性來(lái)控制fridaserver啟動(dòng)、停止。
在文件"systemcoreadbdaemonmain.cpp"中通過(guò)屬性控制fridaserver的核心關(guān)鍵代碼如下:
//該函數(shù)判斷fridaserver是否已經(jīng)在運(yùn)行了
staticintis_fridaserver_running(){
intret=-1;
charbuf[256]={0};
FILE*fp=NULL;
if((fp=popen("ps","r"))==NULL)
{
MYLOGD("popenerrorinis_fridaserver_running");
returnret;
}
while(fgets(buf,255,fp)!=NULL){
MYLOGD("readline====>%s",buf);
if(strstr(buf,"myfridaserverarm64")!=NULL)
{
ret=0;
break;
}
}
pclose(fp);
returnret;
}
//通過(guò)廣播發(fā)送當(dāng)前的fridaserver運(yùn)行狀態(tài),方便App中狀態(tài)更新
staticvoidbroadcast_frida_server_status(intstatus,constchar*portstr)
{
//ambroadcast-acom.android.myaction.FRIDA_SERVER_STATUS--esisRunning0
charcmd_buf[128]={0};
sprintf(cmd_buf,"ambroadcast-acom.android.myaction.FRIDA_SERVER_STATUS--esisRunning%d--esport%s",status,portstr);
system(cmd_buf);
MYLOGD("broadcast_frida_server_statussuccess");
}
//線程處理函數(shù),根據(jù)屬性值來(lái)判斷fridaserver的啟動(dòng)、停止
//1forstart
//2forstop
//3forrunning
void*work_thread(void*m){
MYLOGD("work_threadstart");
while(1>0){
std::stringprop=android::GetProperty("sys.boot_completed","");
std::stringmyfrd=android::GetProperty("xro.start.myfrd","");
std::stringport_str=android::GetProperty("xro.start.myfrd.port","27042");
boolboot_ok=(prop=="1");
//boolbool_myfrd=(myfrd=="1");
MYLOGD("sys.boot_completed:%s",prop.c_str());
if(boot_ok){
intfrida_status=is_fridaserver_running();
broadcast_frida_server_status(frida_status,port_str.c_str());
MYLOGD("is_fridaserver_running==>%d",frida_status);
if(myfrd=="1"){
MYLOGD("starttolaunchmyfridaserverarm64");
charcmd_buf[128]={0};
sprintf(cmd_buf,
"killallmyfridaserverarm64
sleep1
myfridaserverarm64-l0.0.0.0:%s-D",
port_str.c_str());
system(cmd_buf);
MYLOGD("startmyfridaserverarm64finish");
android::SetProperty("xro.start.myfrd","3");
}elseif(myfrd=="0"){
MYLOGD("starttostopmyfridaserverarm64");
charcmd_buf[128]={0};
sprintf(cmd_buf,"killallmyfridaserverarm64");
if(frida_status>=0){
system(cmd_buf);
}
MYLOGD("stopmyfridaserverarm64finish");
}elseif(myfrd=="3"){
if(frida_status0)?{
????????????????????//說(shuō)明adbd?第一次啟動(dòng),并且狀態(tài)屬性為3說(shuō)明adbd被重啟了,需要重新啟動(dòng)frida?server
????????????????????MYLOGD("adbd?restart,start?to?launch?myfridaserverarm64");
????????????????????char?cmd_buf[128]?=?{0};
????????????????????sprintf(cmd_buf,
????????????????????????????"killall?myfridaserverarm64
sleep?1
myfridaserverarm64?-l?0.0.0.0:%s?-D",
????????????????????????????port_str.c_str());
????????????????????system(cmd_buf);
????????????????????MYLOGD("adbd?restart,start?myfridaserverarm64?finish?");
????????????????????//android::SetProperty("xro.start.myfrd","3");
????????????????}
????????????????MYLOGD("myfridaserverarm64?is?running");
????????????}?else?{
????????????}
????????}?else?{
????????????//LOG(DEBUG)?<"sys.boot_completed:"<
4.屬性控制adbd重啟配置
在本方案中,fridaserver是由adbd母體調(diào)用system函數(shù)創(chuàng)建的。測(cè)試過(guò)程中如果adbd殺掉fridaserver也會(huì)被殺掉。所以為了防止fridaserver卡死的情況,增加屬性控制adbd重啟的功能。同時(shí)通過(guò)該屬性控制adbd重啟方便在修改模塊adbd的代碼之后編譯測(cè)試。
具體操作如下:
在文件init.rc中添加屬性控制adbd的配置信息,init.rc文件路徑如下:
systemcore
ootdirinit.rc
添加的內(nèi)容為:
onproperty:xro.start.myadbd=1
stopadbd
startadbd
5.編譯刷機(jī)驗(yàn)證
5.1 編譯
參考命令如下:
qiang@ubuntu:~/lineageOs$sourcebuild/envsetup.sh
qiang@ubuntu:~/lineageOs$breakfastoneplus3
qiang@ubuntu:~/lineageOs$brunchoneplus3
Lookingfordependenciesindevice/oneplus/oneplus3
Lookingfordependenciesindevice/oppo/common
....
5.2 刷機(jī)
參考命令:
qiang@ubuntu:~/lineageOs$adbpushout/target/product/oneplus3/lineage-17.1-20210324-UNOFFICIAL-oneplus3.zip/sdcard/update.zip
out/target/product/oneplus3/lineage-17...28.1MB/s(783285269bytesin26.561s)
qiang@ubuntu:~/lineageOs$
qiang@ubuntu:~/lineageOs$
qiang@ubuntu:~/lineageOs$adbrebootrecovery
qiang@ubuntu:~/lineageOs$
qiang@ubuntu:~/lineageOs$
qiang@ubuntu:~/lineageOs$
5.3 測(cè)試驗(yàn)證
測(cè)試關(guān)閉fridaserver服務(wù):
C:UsersQiang>adbshellsetpropxro.start.myfrd0
測(cè)試打開(kāi)fridaserver服務(wù):
C:UsersQiang>adbshellsetpropxro.start.myfrd1
測(cè)試重啟adbd服務(wù):
C:UsersQiang>adbshellsetpropxro.start.myadbd1

審核編輯:湯梓紅
-
System
+關(guān)注
關(guān)注
0文章
166瀏覽量
38368 -
文件
+關(guān)注
關(guān)注
1文章
586瀏覽量
25874 -
端口
+關(guān)注
關(guān)注
4文章
1092瀏覽量
33659 -
安卓系統(tǒng)
+關(guān)注
關(guān)注
0文章
274瀏覽量
21307
原文標(biāo)題:添加自定義屬性控制fridaserver啟動(dòng)和停止
文章出處:【微信號(hào):哆啦安全,微信公眾號(hào):哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何添加自定義單板
labview 的Xcontrol控件 的自定義屬性
如何讓自定義布爾控件的顏色屬性節(jié)點(diǎn)有效
如何自定義Component 屬性
Orcad中元器件自定義屬性方法

添加自定義屬性控制fridaserver啟動(dòng)和停止
評(píng)論