1.属性添加说明
为了通过安卓系统的属性控制fridaserver启动和停止,将加入如下属性:
#该属性控制启动和停止frida #0:停止 1:启动 xro.start.myfrd=0 #该属性设置fridaserver启动的端口,默认端口为27042 xro.start.myfrd.port=27042 #该属性控制adbd进程重启,这个属性是为了方便控制adbd进程重启 #1:停止adbd然后再启动 #0:停止adbd然后再重启 xro.start.myadbd=
2.系统中添加属性
2.1 系统中新增属性
在文件"build oolsuildinfo.sh"中添加以下属性,添加之后属性如下:
... echo"xro.start.myfrd=0" echo"xro.start.myfrd.port=27042" echo"xro.start.myadbd=" ...
由于新增的属性需要在后续开发的具有System权限的App中设置和获取。如果不配置系统App的selinux访问策略,App将没有权限进行属性修改操作。由于adbd运行已经拥有了超级权限,adbd对新增的属性具有读取和设置的能力,所以可以不用为adbd配置访问新增属性的selinux策略。安卓系统中和selinux配置相关的目录路径如下:
systemsepolicy
新增属性配置操作如下。
(1).定义属性标签类型"mysystem_prop"
在以下文件中添加自定义的属性标签类型定义,文件路径如下:
systemsepolicypublicproperty.te systemsepolicyprebuiltsapi29.0publicproperty.te
自定义的属性标签定义如下:
typemysystem_prop,property_type;
由于以上两个文件内容必须保持一致,所以请确保以上两个文件中添加的内容保持一致,否则编译报错。
(2).为自定义的属性关联标签
在以下文件中添加自定义的属性关联的selinux标签,文件路径如下:
systemsepolicyprivateproperty_contexts systemsepolicyprebuiltsapi29.0privateproperty_contexts
添加的标签内容如下:
#表示xro.start.前缀的属性标签都为mysystem_prop xro.start.umysystem_prop:s0
由于以上两个文件内容必须保持一致,所以请确保以上两个文件中添加的内容保持一致,否则编译报错。
(3).为system_app添加自定义属性访问权限
为了让system权限的app能够访问到自定义的属性,需要在以下文件中添加访问规则,文件路径如下:
systemsepolicyprivatesystem_app.te systemsepolicyprebuiltsapi29.0privatesystem_app.te
添加的访问规则如下:
#表示允许系统权限的app读取mysystem_prop标签的属性 get_prop(system_app,mysystem_prop) #表示允许系统权限的app修改mysystem_prop标签的属性值 set_prop(system_app,mysystem_prop)
由于以上两个文件内容必须保持一致,所以请确保以上两个文件中添加的内容保持一致,否则编译报错。
3.使用属性控制fridaserver运行
在课程"配置fridaserver为后台服务程序"中已经实现了adbd启动之后启动fridaserver的功能。本篇中将使用新增的属性来控制fridaserver启动、停止。
在文件"systemcoreadbdaemonmain.cpp"中通过属性控制fridaserver的核心关键代码如下:
//该函数判断fridaserver是否已经在运行了
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;
}
//通过广播发送当前的fridaserver运行状态,方便App中状态更新
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");
}
//线程处理函数,根据属性值来判断fridaserver的启动、停止
//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_status< 0) {
//说明adbd 第一次启动,并且状态属性为3说明adbd被重启了,需要重新启动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母体调用system函数创建的。测试过程中如果adbd杀掉fridaserver也会被杀掉。所以为了防止fridaserver卡死的情况,增加属性控制adbd重启的功能。同时通过该属性控制adbd重启方便在修改模块adbd的代码之后编译测试。
具体操作如下:
在文件init.rc中添加属性控制adbd的配置信息,init.rc文件路径如下:
systemcore
ootdirinit.rc
添加的内容为:
onproperty:xro.start.myadbd=1
stopadbd
startadbd
5.编译刷机验证
5.1 编译
参考命令如下:
qiang@ubuntu:~/lineageOs$sourcebuild/envsetup.sh
qiang@ubuntu:~/lineageOs$breakfastoneplus3
qiang@ubuntu:~/lineageOs$brunchoneplus3
Lookingfordependenciesindevice/oneplus/oneplus3
Lookingfordependenciesindevice/oppo/common
....
5.2 刷机
参考命令:
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 测试验证
测试关闭fridaserver服务:
C:UsersQiang>adbshellsetpropxro.start.myfrd0
测试打开fridaserver服务:
C:UsersQiang>adbshellsetpropxro.start.myfrd1
测试重启adbd服务:
C:UsersQiang>adbshellsetpropxro.start.myadbd1

审核编辑:汤梓红
-
System
+关注
关注
0文章
165浏览量
36911 -
文件
+关注
关注
1文章
562浏览量
24719 -
端口
+关注
关注
4文章
959浏览量
32034 -
安卓系统
+关注
关注
0文章
273浏览量
20549
原文标题:添加自定义属性控制fridaserver启动和停止
文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
labview 的Xcontrol控件 的自定义属性
如何让自定义布尔控件的颜色属性节点有效
如何自定义Component 属性
严格自定义控件属性节点能使用吗
Orcad中元器件自定义属性方法

添加自定义属性控制fridaserver启动和停止
评论