android权限管理, API劫持, xposed, xprivacy

本文探讨了Android权限管理系统,重点关注Xposed框架的工作原理。通过分析zygote的启动过程,展示了如何在APP启动时注入XposedBridge.jar,并在虚拟机创建时加载libxposed库。文章详细讲解了Xposed如何hook系统方法,实现对原始方法的拦截和替换,并以XPrivacy模块为例,说明如何利用Xposed实现权限控制,拦截并修改特定API的返回值,以保护用户隐私。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预备知识参考: 认识理解zygote



修改版本的app_process main()

与原始版本区别如下:(原始版本分析参加“认识理解zygote")

main()
call xposed::initialize()    //some check, add  /system/framework/XposedBridge.jar to classpath


runtime.start(de.robv.android.xposed.XposedBridge, args)
......   //与原始版本相同

startVM()
xposed::onVmCreated(env)      
load libxposed_dalvik.so or libxposed_art.so
libxposed_art.onVmCreated(env)
call register_natives_XposedBridge() to register native method
...... 
call  de.robv.android.xposed.XposedBridge.main()
XposedBridge_initNative()

initForZygote()
findAndHookMethod for some methods...
add new XC_MethodHook to callbacks
call XposedBridge_hookMethodNative to replace the mothed as native function: hookedMethodCallback

loadModules()
load modules and register hook method

com.android.internal.os.ZygoteInit. main ( )


被hook的方法调用时会调用到 hookedMethodCallback
hookedMethodCallback
xposedHandleHookedMethod -> XposedBridge::handleHookedMethod
iterate all registered methodhook, call it's beforeHookedMethod()
call orginal method,
iterate all registered methodhook,  call it's afterHookedMethod()


An example module: XPrivacy   

初始化
in XPosed.loadModules() -> loadModule() 
XPrivacy.initZygote()
hook com.android.server.SystemServer.main to call PrivacyService.register to register PrivacyService to ServiceManager.
hookZygote()     //hook all ....
for example: hookAll(XTelephonyManager.getInstances(null, false), null, mSecret, false);
create method hook objects.
call XposedBridge.hookMethod to hook orignal method.

使用:
TelephonyManager.getDeviceId()
intercepted by XPosed
XTelephonyManager.before()          //No Op
TelephonyManager.getDeviceId()
XTelephonyManager.after()           //get value from PrivacyManager, set to result param

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值