Android应用防xposed注入,android hook 框架 xposed 如何实现注入

本文深入探讨了Xposed框架的工作原理,它是如何通过替换系统/app_process来实现在Android应用启动时全局注入,从而影响所有App。与动态SO注入不同,Xposed在Zygote启动时即完成注入,无需依赖ptrace机制,只需安装时有root权限,且影响全局。Xposed首先初始化框架和模块,然后执行ZygoteInit/main或RuntimeInit/main,实现正常流程。这种方式避免了每次注入的需要,增强了注入的稳定性和全局性。
摘要由CSDN通过智能技术生成

转:http://www.cnblogs.com/jiayy/p/4305018.html

前面分析的adbi框架和libinject都是使用so注入的方式,实现将指定代码装入目标进程,这种方式有几个特点:

1. 是动态的,需要目标进程已经启动

2. 无法影响全局,比如注入A进程挂钩里边libc.so的open函数,此时,B进程使用的libc.so的open函数还是老函数,linux系统通过COW机制,在你注入A进程并执行对open的挂钩的时候,拷贝了新的页面,放入新的函数。如果要影响全局,应该注入到类似 Zygote 这样的进程,且应该在zygote进程启动之后马上注入,这样后续zygote进程生成子进程时就能使用挂钩后的函数

3. 需要依赖ptrace机制,某些情况下,目标进程无法被执行ptrace,则这种方式会失效

这一篇我们分析另外一种方式,是著名的xposed框架使用的方式,不需要动态注入,而是直接替换android系统的一个可执行程序。

一,android应用层进程启动最初始的几步

linux系统装载并初始化各个子系统完毕后,执行第一个应用层程序init, android 的 init 程序是自己定制的,与其它linux发行版不一样,它同样会解析并执行 init.rc 配置文件。其中,有一步如下,调用 app_process 程序启动 zygote 进程,xposed 替换的就是这个  /system/bin/app_process 程序

system/core/rootdir/init.rc

0818b9ca8b590ca3270a3433284dd417.png

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-serverclassmain

socket zygote stream660root system

onrestart write/sys/android_power/request_state wake

onrestart write/sys/power/state on

onrestart restart media

onrestart restart netd

0818b9ca8b590ca3270a3433284dd417.png

android\frameworks\base\cmds\app_process\app_main.cpp  : main 函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值