首页
社区
课程
招聘
[原创]frida版xposed
发表于: 2025-4-26 21:32 16880

[原创]frida版xposed

2025-4-26 21:32
16880

主要是因为使用frida server的时候,时间长一点,系统会不稳定,时不时系统就好像重启了一样,虽然没有真的重启,但是qtscrcpy就会断掉,蓝牙也会断掉,frida server也卡死,就又得重新搞,很烦;根本原因就是因为frida的server不仅hook了目标进程,还hook了system server,为了实现spawn以及获取进程信息等等功能,所以server一旦蹦掉,遗害整个系统环境;故而想把frida想xp一样,集成一下,每次应用启动的时候就已经带了,可以直接使用。


在app启动的时,并且任意app自己的代码执行前,会启动一个服务端,这个服务会接受客户端命令,主要是三个命令,load脚本,update脚本,unload脚本,以实现frida相关功能;并且支持配置,只对目标app才会启动这个服务端。这样一来,使用frida就方便了很多,不需要启动server,检测面少了好多;其次是避免了server的一系列副作用,比如影响系统等;最后是,它的启动早于任何app代码,也就是说第一时间能拿到app的控制权,方便后续做一些检测对抗,接下来说说具体实现,效仿前辈xposed,修改zygote,这里就得提一下zygote相关的必要知识


zygote的启动

对应的文件是

/root/aosp/frameworks/base/cmds/app_process/app_main.cpp的main函数,对应app_process64

/root/aosp/frameworks/base/core/jni/AndroidRuntime.cpp的start函数,对应libandroid_runtime.so

/root/aosp/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java,对应framework.jar


zygote干完他该干的活(启动art,预加载一些常用系统资源,fork系统服务)之后,就启动了一个服务端,进入循环等死状态,等待ams给他发送app fork请求


zygote接受到ams的fork请求之后,执行fork,如下

/root/aosp/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp的

com_android_internal_os_Zygote_nativeForkAndSpecialize{

    ForkCommon{

        SpecializeCommon{

            void SetThreadName(const std::string& thread_name)

根据我的观察,SetThreadName函数具有非常良好的性质,

1、首先它是在fork之后的,也就是运行在了app进程空间,此时启动我们的服务,是比较好的,如果在fork前执行的话,fork调用执行的时候,服务会死掉,因为fork是单线程的

2、其次,这时候在app任何代码执行之前,意味着能在最先的时机拿到app控制权,方便做一些检测的对抗


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 16
支持
分享
最新回复 (11)
雪    币: 276
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
666
2025-4-27 08:50
0
雪    币: 4676
活跃值: (5046)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

先记号,慢慢研究。

最后于 2025-4-27 12:55 被院士编辑 ,原因:
2025-4-27 12:55
0
雪    币: 1752
活跃值: (1925)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
mark
2025-4-29 16:18
0
雪    币: 3065
活跃值: (4422)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2025-4-29 22:16
0
雪    币: 112
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
值得学习
2025-4-30 00:10
0
雪    币: 156
活跃值: (1352)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
lief添加依赖so apatch把依赖so放入系统库路径 gum inlinehook 然后gumjs执行脚本?
2025-5-18 00:05
0
雪    币: 4162
活跃值: (6033)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
万里星河 lief添加依赖so apatch把依赖so放入系统库路径 gum inlinehook 然后gumjs执行脚本?
是这样的,只要hook到一个合适的方法就好,这个方法必须在fork之后的进程,并且距离app代码开始执行的地方越近越好
2025-5-18 02:57
0
雪    币: 156
活跃值: (1352)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
KerryS 是这样的,只要hook到一个合适的方法就好,这个方法必须在fork之后的进程,并且距离app代码开始执行的地方越近越好
感谢您的回复 还有个地方我不太明白 关于APatch文中提到“对于apatch,做了一些了解,它主要是通过向内核注入一段程序,来实现所有功能的,包括kpm,apm,root等。并且他会给用户态暴露系统调用,由这个系统调用统筹管理所有功能” 请问这个信息是从何处得知的 能提供一下这方面的文档链接吗?
2025-5-20 23:51
0
雪    币: 4162
活跃值: (6033)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
万里星河 感谢您的回复 还有个地方我不太明白 关于APatch文中提到“对于apatch,做了一些了解,它主要是通过向内核注入一段程序,来实现所有功能的,包括kpm,apm,root等。并且他会给用户态暴露系统 ...
这个就比较综合了,要去了解root的原理,核心是linux的权限系统及其实现,流行的手法是setuid位方式提权和内核中cred相关字段方式,了解这些知识后去看看apatch的源码,再写一些简单的例子尝试,得出的结论
2025-5-21 01:11
0
雪    币: 156
活跃值: (1352)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
KerryS 这个就比较综合了,要去了解root的原理,核心是linux的权限系统及其实现,流行的手法是setuid位方式提权和内核中cred相关字段方式,了解这些知识后去看看apatch的源码,再写一些简单的例子 ...
受教了 感谢
2025-5-23 00:00
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12

老师!牛马导师!

最后于 2025-6-10 14:08 被mb_jkykcuwo编辑 ,原因: (问题解决了嘿嘿嘿)
2025-6-10 10:54
0
游客
登录 | 注册 方可回帖
返回