首页
社区
课程
招聘
[原创]一种简单的注入zygote进程的方案
发表于: 2020-5-8 16:20 12483

[原创]一种简单的注入zygote进程的方案

2020-5-8 16:20
12483

很早就注册了看雪号,结果没分享过什么东西emm,发现现在大家用的注入方案基本上都是替换系统库,分享个不需要替换系统库的方案吧
先说限制:1.只能在Android 7.0及更高版本中使用;2.部分设备会报UnsatisfiedLinkError,还没找到原因,各位大神可以分析下~

注:本文分析的是Android 7.0的源码
zygote对应的可执行文件其实就是app_process,它的main方法如下:

跟踪下去,最终会调用JNI_CreateJavaVM创建虚拟机,这个方法是这样实现的:

注意看android::InitializeNativeLoader(),这个函数直接调用了g_namespaces->Initialize(),而g_namespaces是一个LibraryNamespaces指针,继续看下去,我们发现了宝藏:

public_native_libraries_system_config=/system/etc/public.libraries.txt,而ReadConfig方法很简单,读取传进来的文件路径,按行分割,忽略空行和以#开头的行,然后把这行push_back到传进来的vector里。
所以这个函数做了这几件事:

有了上面的分析基础,我们这样做就可以让我们自己的so库被zygote进程dlopen了:

到这,已经可以在zygote里加载自己的库了,但还有一个问题:zygote只打开了这个库,并没有调用任何函数,而我们常用的JNI_OnLoad函数在这是不会被调用的,怎么才能让zygote执行自己的代码呢?各位估计已经知道了,写一个用__attribute__((constructor))修饰的函数,这个函数会被登记在.init.array里,会在so被加载时调用,我们就完成了注入逻辑;接下来你就可以在zygote里做自己想要做的事了,玩的开心 :)

最后夹带点私货,此方案最先发表在我的博客上,顺便结合SandHook写了个简单的Xposed实现,感兴趣的可以去围观下~

 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-6-5 09:14 被残页编辑 ,原因: 尝试修复代码块高亮
收藏
免费 2
支持
分享
最新回复 (12)
雪    币: 1709
活跃值: (835)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
第一次在看雪发帖,不知道为啥用markdown写好了,预览也没问题,发出来代码就和正文混到一块了,emmm
2020-5-8 16:24
0
雪    币: 47147
活跃值: (20450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
残页 第一次在看雪发帖,不知道为啥用markdown写好了,预览也没问题,发出来代码就和正文混到一块了,emmm
稍等,我们查查原因
2020-5-8 16:46
0
雪    币: 35
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
一般用替换系统库的方法实现的原因,可能是避免检测
2020-5-8 17:46
0
雪    币: 34
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
刚准备找这块的资料,楼主就发帖了。缘分啊!
2020-5-8 20:31
0
雪    币: 977
活跃值: (435)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
棒  向大佬学习  之前写了一个注入的  是替换系统文件的   还是要好好看源码才能学习到更多。。
2020-5-8 22:04
0
雪    币: 758
活跃值: (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
很厉害
2020-5-11 19:36
0
雪    币: 209
活跃值: (93)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好帖,顶
2020-5-23 11:25
0
雪    币: 4939
活跃值: (2360)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark
2021-1-26 22:48
0
雪    币: 1
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
试了这种方式,貌似不能再ctor里面执行代码,执行了就不开机了,主界面都进不去,模拟器上
2021-1-27 09:49
0
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
楼主牛逼
2021-1-29 14:44
1
雪    币: 193
活跃值: (1215)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢分享,学习了
2021-5-7 06:55
0
雪    币: 181
活跃值: (2948)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13

把frida的libgadget.so放里面了,然后修改了txt,然后就开不了机了。。。

看报错是frida-gum/gum/backend-posix/gummemory-posix.c:76:gum_alloc_n_pages: assertion failed: (result != NULL)


最后于 2021-5-7 15:55 被huaerxiela编辑 ,原因:
2021-5-7 15:50
0
游客
登录 | 注册 方可回帖
返回
//