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

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

3天内不再提示

配置fridaserver为后台进程

哆啦安全 来源:哆啦安全 2023-07-29 15:07 次阅读

1.安卓系统中配置后台进程讨论

在以下讨论两种selinux开启的情况启动frida-server的方法。

1.1 init.xx.rc文件中配置

在安卓系统中配置native后台服务,主要是在init.xx.rc文件中添加服务配置信息。比如adbd后台服务配置如下:

#adbdiscontrolledviapropertytriggersininit..usb.rc
serviceadbd/system/bin/adbd--root_seclabel=usu:s0
classcore
socketadbdseqpacket660systemsystem
disabled
seclabeluadbd:s0

这种方法配置主要是通过init进程进行启动管理。如果配置的后台进程服务的功能需要超级root权限操作的,最好关闭selinux的情况下进行配置。

以下是通过init.xx.rc文件中配置启动fridaserver的一个参考配置:

servicemyfridaserver/system/bin/myfridaserverarm64-D
classmain
userroot
seclabeluinit:s0

1.2 进程中启动服务配置

可以选择合适的后台进程,调用 system函数进行服务启动。比如选择超级 root权限的adbd、或者root权限的init进程。

1.3 两种方式的测试

在内置fridaserver的过程中,分别对以上两种方式进行了测试。

  • init.xx.rc中国配置

    在开启 selinux的情况下,由于 init进程被限制了很多功能,比如禁止ptrace其他进程,会导致失败。所以该种配置需要根据需要内置服务的功能进行分析,是否适合。虽然init进程运行的是root用户运行,但是selinux的域为init,被限制了很多特权功能。如果不在乎selinux,可以关闭selinux之后进行内置。

  • 进程中启动服务

    进程中启动服务主要是需要找到权限高的进程作为母体。比如像 init进程、adbd进程。在测试过程中,selinux打开的情况下虽然init进程root用户运行,但是selinux标签init限制了很多特权,所以不大适合启动fridaserver。在上一篇文章中已经实现了adbdroot权限运行,并且运行标签变成了usu:s0,所以adbd作为母体启动服务之后,服务就存在了超级权限,比较适合fridaserver这种需要特权的服务。

    以下是通过命令查看的系统init进程和adbd进程运行的selinux域的情况:

C:UsersQiang>adbshellps-Z|findstr"adbd"
usu:s0root1143111359604564poll_schedule_timeout794c9aa3c8Sadbd

C:UsersQiang>adbshellps-Z|findstr"init"
uinit:s0root10869848240SyS_epoll_wait76f889a248Sinit
uvendor_init:s0root4541397365256poll_schedule_timeout79937963c8Sinit
uvendor_init:s0root4551389684328poll_schedule_timeout74340f23c8Sinit

二、adbd中启动fridaserver开发

2.1 查找合适的启动入口

adbd启动过程中,会根据传入的参数如果存在root_seclabel会将adbd进程的域由uadbd:s0修改为"usu:s0"域。具体相关逻辑位于文件"systemcoreadbdaemonmain.cpp" 中,代码如下:

staticvoiddrop_privileges(intserver_port){
ScopedMinijailjail(minijail_new());

...
if(should_drop_privileges()){
...
}else{
//minijail_enter()willabortifanypriv-droppingstepfails.
minijail_enter(jail.get());

if(root_seclabel!=nullptr){
//修改当前进程的域为usu:s0,从而获得超级权限
if(selinux_android_setcon(root_seclabel)< 0){
LOG(FATAL)<< "CouldnotsetSELinuxcontext";
}
//TODO可以考虑在此处添加启动的逻辑
}
...
}
}
}

通过以上分析我们可以在adbd设置root_seclable成功之后加入启动frida-server的启动逻辑。

2.2 添加启动核心代码

添加如下方法实现启动 fridaserver进程。

//线程处理函数,主要是判断手机重启完成之后再去启动**fridaserver**
void*work_thread_once(void*m)
{
MYLOGD("work_threadstart");

while(1>0)
{
std::stringprop=android::GetProperty("sys.boot_completed","");

MYLOGD("start_fridaserver_oncesys.boot_completed:%s",prop.c_str());
boolboot_ok=(prop=="1");
//boolbool_myfrd=(myfrd=="1");
MYLOGD("start_fridaserver_oncesys.boot_completed:%s",prop.c_str());
if(boot_ok)
{

break;

}
sleep(4);
}

std::stringport_str="27042";
MYLOGD("start_fridaserver_oncestarttolaunchmyfridaserverarm64");
charcmd_buf[128]={0};
sprintf(cmd_buf,"killallmyfridaserverarm64
sleep1
myfridaserverarm64-l0.0.0.0:%s-D",port_str.c_str());
system(cmd_buf);
MYLOGD("start_fridaserver_oncestartmyfridaserverarm64finish");

returnNULL;
}

//创建线程等待手机启动完成之后启动fridaserver
staticvoidstart_fridaserver_once()
{

MYLOGD("start_fridaserver_oncestart");
pthread_tthread_id;
inti=9;
pthread_create(&thread_id,NULL,&work_thread_once,(void*)&i);
MYLOGD("start_fridaserver_oncethreadiscreated!");

}

以上逻辑中判断手机完全重启了才启动。

在设置 root_label的地方加入调用,参考代码如下:

staticvoiddrop_privileges(intserver_port){
ScopedMinijailjail(minijail_new());

...
if(should_drop_privileges()){
...
}else{
//minijail_enter()willabortifanypriv-droppingstepfails.
minijail_enter(jail.get());

if(root_seclabel!=nullptr){
//修改当前进程的域为usu:s0,从而获得超级权限
if(selinux_android_setcon(root_seclabel)< 0){
LOG(FATAL)<< "CouldnotsetSELinuxcontext";
}
//TODO可以考虑在此处添加启动的逻辑
start_fridaserver_once();
}
...
}
}
}

3.编译测试

3.1 编译adb模块

参考命令:

//完整编译手机镜像参考命令
qiang@ubuntu:~/lineageOs$sourcebuild/envsetup.sh
qiang@ubuntu:~/lineageOs$breakfastoneplus3
qiang@ubuntu:~/lineageOs$brunchoneplus3

//只编译adbd模块参考
qiang@ubuntu:~/lineageOs$makeadbd
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=10
LINEAGE_VERSION=17.1-20210324-UNOFFICIAL-oneplus3
...

3.2 push到手机

由于之前我们已经刷了一次自己编译的手机镜像。所以此处只修改了adbd模块,可以只编译单个模块替换手机系统的就可以。参考命令:

qiang@ubuntu:~/lineageOs$adbdevices
*daemonnotrunning;startingnowattcp:5037
*daemonstartedsuccessfully
Listofdevicesattached
d5cc1133device

qiang@ubuntu:~/lineageOs$adbremount
[libfs_mgr]dt_fstab:Skipdisabledentryforpartitionvendor
[libfs_mgr]dt_fstab:Skipdisabledentryforpartitionvendor
[libfs_mgr]dt_fstab:Skipdisabledentryforpartitionvendor
remountsucceeded
qiang@ubuntu:~/lineageOs$adbpushout/target/product/oneplus3/system/bin/adbd/system/bin/adbd
out/target/product/oneplus3/system/bin...shed.0.9MB/s(30608bytesin0.034s)
qiang@ubuntu:~/lineageOs$
qiang@ubuntu:~/lineageOs$

3.3 重启手机测试

参考如下命令:

//查看当前内置的fridaserver是否开机之后自动启动
C:UsersQiang>adbreboot
C:UsersQiang>adbshellps-Z|findstr"myfridaserver"
usu:s0root3216113942443008poll_schedule_timeout7da95663c8Smyfridaserverarm64

//测试手机frida-server是否能连接上
C:UsersQiang>frida-ps-U
PIDName
-------------------------------------------------------
2190.dataservices
3290.dataservices
2305.qtidataservices
...


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

    关注

    0

    文章

    193

    浏览量

    13876
  • 安卓系统
    +关注

    关注

    0

    文章

    266

    浏览量

    20303
  • root
    +关注

    关注

    1

    文章

    82

    浏览量

    21237

原文标题:配置fridaserver为后台进程

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

收藏 人收藏

    评论

    相关推荐

    Linux 查看进程和删除进程

    还是用于监控后台进程地工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信地,所以如果需要检测其情况,便可以运用 ps 命令了.该命令语法格式如下:ps [选项]-e 显
    发表于 04-24 00:04

    打开Multisim没有窗口,但是后台进程,怎么解决?

    第一次安装好用着正常。这半年过去了,需要使用它,但是打不开了。打开程序屏幕没反应,但是后台进程;再打开一次程序就多一个进程,还是没窗口。从10.0到14.0版本都安装过了,结果一样,都打不开。请问
    发表于 11-23 15:15

    麒麟开源堡垒机后台进程列表及DEBUG分享!

    1. 认证授权进程:二进制程序位置: /opt/freesvr/audit/authd/***in/freesvr-authd配置文件位置:/opt/freesvr/audit/authd/etc
    发表于 08-25 22:18

    ubantu配置远程连接jupyterlab/notebook后台挂起的实现方法?

    ubantu配置远程连接jupyterlab/notebook后台挂起
    发表于 11-09 07:23

    i.MX6ULL终结者进程基础-进程创建

    代码在process/目录下。进程类型:1.交互进程:由shell启动,用户和计算机进行问答的进程。2.批处理进程:不与特定终端相关联,将任务提交到等待队列按顺序执行的
    发表于 03-03 14:11

    前台运行和后台运行二者有何区别

    core dump时有何区别 前台进程如何生成core dump 后台进程如何生成core dump 正文...
    发表于 11-04 08:18

    LabVIEW可执行文件作为后台进程运行

    LabVIEW可执行文件作为后台进程运行已经使用LabVIEW Application Builder将LabVIEW VI构建独立应用程序(可执行文件)中。可执行文件不需要任何用户输入,因此想将
    发表于 03-18 21:15

    HarmonyOS后台任务管理开发指南上线!

    : 代理提醒是指应用退后台进程终止后,系统会代理应用做相应的提醒。适用于定时提醒类业务,当前支持的提醒类型包括倒计时、日历和闹钟三类。 图 1 后台任务类型选择 保障选择到合适的
    发表于 11-29 09:58

    iPhone后台清理进程是否真的能省电?

    去年年中,苹果官方确认清理iPhone后台是无用功的消息传遍了各个数码角落,然而事实并非如苹果公司回复的那般自信,清理进程有时真的能省电。
    的头像 发表于 06-18 09:46 3875次阅读

    你了解过Linux后台服务进程的开发过程?

    守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程
    发表于 05-13 09:21 1814次阅读

    谷歌将限制 Chrome 标签页后台进程,增加笔记本续航

    谷歌希望通过限制标签页的后台进程来大幅降低其Chrome浏览器的能耗。
    的头像 发表于 07-07 14:04 2268次阅读

    Linux 安全模块:守护进程和套接字

    守护进程通常是在后台观察操作以等待状态、服务于特定子系统并确定整个系统的操作规则的实用程序。例如,一个守护进程配置为监控打印服务的状态。
    发表于 08-26 10:01 465次阅读

    如何在Linux终止僵尸进程

    在了解Zombie进程之前,让我回忆一下什么是进程。简而言之,进程是程序实例。它可以是前台的交互式进程后台的非交互式或自动
    的头像 发表于 12-12 17:40 1663次阅读

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

    添加自定义属性控制fridaserver启动和停止
    的头像 发表于 08-09 10:08 873次阅读
    添加自定义属性控制<b class='flag-5'>fridaserver</b>启动和停止

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

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