0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

哆啦安全 来源: 卓码星球 2023-08-09 10:08 次阅读

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="
...

2.2 为新增的属性配置selinux标签

由于新增的属性需要在后续开发的具有System权限的App中设置和获取。如果不配置系统Appselinux访问策略,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

3106890a-3641-11ee-9e74-dac502259ad0.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • System
    +关注

    关注

    0

    文章

    165

    浏览量

    36896
  • 文件
    +关注

    关注

    1

    文章

    561

    浏览量

    24711
  • 端口
    +关注

    关注

    4

    文章

    956

    浏览量

    32025
  • 安卓系统
    +关注

    关注

    0

    文章

    273

    浏览量

    20540

原文标题:添加自定义属性控制fridaserver启动和停止

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    matlab的自定义窗口属性命令

    matlab的自定义窗口属性命令函数名    功能描述    函数名 
    发表于 09-22 15:53

    labview 的Xcontrol控件 的自定义属性

    大家有没有发现labview的Xcontrol控件自定义属性执行速度相当慢?做界面简直受不了!对labview的期望太高了
    发表于 04-22 10:41

    如何让自定义布尔控件的颜色属性节点有效

    NI自带的布尔控件有颜色属性节点,通过对颜色的赋值可以改变控件的颜色但是对控件进行自定义,替换了图片项之后,颜色属性节点就失去了效果如何让自定义布尔控件依旧能像NI自带的那样,能用颜色
    发表于 07-11 11:29

    如何自定义Component 属性

    , AttrSet attrSet) {回复:AttrSet attrSet这个参数不是让开发者自己进行自定义组件用的。而是用于读取在XML中的各类组件属性。例如,您通过xml布局添加了Button,并且设置了其高度
    发表于 12-21 09:31

    严格自定义控件属性节点能使用吗

    因为我想预防以后修改起来麻烦,于是我就想用下严格自定义控件。我改了选项卡控件,像图一我保存为自定义控件,用属性节点隐藏第2个页面可以;但是就像图二我先保存为严格自定义控件,再用同样的方
    发表于 04-23 09:04

    1602自定义字符

    1602液晶能够显示自定义字符,能够根据读者的具体情况显示自定义字符。
    发表于 01-20 15:43 1次下载

    如何制作自定义控制

    在您拥有自己的自定义模块控制器,完美地工作用于Gamecube模拟器的PC!
    的头像 发表于 09-04 09:33 5276次阅读
    如何制作<b class='flag-5'>自定义</b><b class='flag-5'>控制</b>器

    Orcad中元器件自定义属性方法

    答:运用Orcad进行原理图的绘制时,除了它本身自带的这些属性以外呢,有时候会给它增加一些额外的属性,来方便别人查看你的原理图与检查原理图,例如器件的料号、ROOM属性、差分属性等,这
    的头像 发表于 02-28 16:35 7209次阅读
    Orcad中元器件<b class='flag-5'>自定义</b><b class='flag-5'>属性</b>方法

    自定义视图组件教程案例

    自定义组件 1.自定义组件-particles(粒子效果) 2.自定义组件- pulse(脉冲button效果) 3.自定义组件-progress(progress效果) 4.
    发表于 04-08 10:48 14次下载

    应用程序在崩溃时能启动自定义活动的OHOS库

    CustomActivityOnCrash 是一个 OHOS 库,允许在应用程序崩溃时启动自定义活动,而不是显示讨厌的“不幸的是,X 已停止”对话框。 CustomActivityOnCrash
    发表于 04-11 09:32 0次下载

    ArkUI如何自定义弹窗(eTS)

    自定义弹窗其实也是比较简单的,通过CustomDialogController类就可以显示自定义弹窗。
    的头像 发表于 08-31 08:24 2143次阅读

    教程 2:添加特征-自定义配置文件创建

    教程 2:添加特征 - 自定义配置文件创建
    发表于 03-15 19:39 0次下载
    教程 2:<b class='flag-5'>添加</b>特征-<b class='flag-5'>自定义</b>配置文件创建

    教程 2:添加特征-自定义配置文件创建

    教程 2:添加特征 - 自定义配置文件创建
    发表于 07-06 18:50 0次下载
    教程 2:<b class='flag-5'>添加</b>特征-<b class='flag-5'>自定义</b>配置文件创建

    labview超快自定义控件制作和普通自定义控件制作

    labview超快自定义控件制作和普通自定义控件制作
    发表于 08-21 10:32 13次下载

    在App中编写控制fridaserver启动停止的代码逻辑简析

    在章节"添加自定义属性控制fridaserver启动停止
    的头像 发表于 08-22 09:27 2459次阅读
    在App中编写<b class='flag-5'>控制</b><b class='flag-5'>fridaserver</b><b class='flag-5'>启动</b>和<b class='flag-5'>停止</b>的代码逻辑简析