首页
社区
课程
招聘
[求助]xposed 配置动态改变hook行为如何免重启实现?
2024-1-25 09:55 2520

[求助]xposed 配置动态改变hook行为如何免重启实现?

2024-1-25 09:55
2520

通过xsharedpreference进行配置读写,在hook时根据配置来判断某些功能是否开启,但是在我的模块里面修改完配置,hook行为没有变更,在宿主app中读到的还是原来的值,用xsharedpreference的监听回调中调用了reload重新加载也不好使,是这个本来就不支持还是我用法有问题呢?看到有模块是支持随时改不用重启宿主app的,wxposed就是

贴下代码

public void setOnSharedPreferenceChangeListener() {    if (null == listener) {
        listener new XSharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                LogUtil.PrintLog("onSharedPreferenceChanged"TAG);
                xSharedPreferences.reload();
            }
        };
    }
    if (xSharedPreferences != null) {
        LogUtil.PrintLog("setOnSharedPreferenceChangeListener"TAG);
        xSharedPreferences.registerOnSharedPreferenceChangeListener(listener);
    }
}public ConfigObject getConfigInApp() {
    ConfigObject configObject null;
    try {
        configObject new ConfigObject(
                xSharedPreferences.getBoolean("xxx"false),
                xSharedPreferences.getBoolean("xxxx"false),
                xSharedPreferences.getBoolean("xxxxx"false),
                xSharedPreferences.getFloat("xxxxxx"0f),
                xSharedPreferences.getFloat("xxxxxxx"0f),
                xSharedPreferences.getString("xxxxxxxx"""),
                xSharedPreferences.getBoolean("xxxxxxxx"false)
        );
    } catch (Exception e) {
        Log.i(TAG"getConfigInApp: " + e.getMessage());
    }
    return configObject;
}


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2024-1-30 15:13 被nullpointer1编辑 ,原因: 已解决
收藏
点赞1
打赏
分享
最新回复 (14)
雪    币: 163
活跃值: (484)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
haseex 2024-1-26 02:40
2
0
xposed没更新了,还能用吗?
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
nullpointer1 2024-1-29 11:01
3
0
haseex xposed没更新了,还能用吗?
有lsposed
雪    币: 1078
活跃值: (1316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ChrQwQ 2024-1-29 15:31
4
0
xsharedpreference我也用不太来,我是直接用宿主app的context new 一个 preference 来读写
雪    币: 1078
活跃值: (1316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ChrQwQ 2024-1-29 15:31
5
0
ChrQwQ xsharedpreference我也用不太来,我是直接用宿主app的context new 一个 preference 来读写
缺点就是只能在宿主app上下文中访问配置,不能在插件里修改了
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
nullpointer1 2024-1-29 16:08
6
0
ChrQwQ 缺点就是只能在宿主app上下文中访问配置,不能在插件里修改了
这种实现是不是就是想微x那样的,把自己模块的设置页面也寄生到app的布局上,用app的环境来存取?但是这个不太会,刚学,费了老大劲才搞完,现在就想着怎么优化一下
雪    币: 1078
活跃值: (1316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ChrQwQ 2024-1-29 22:48
7
1
https://github.com/chr233/PureNGA/blob/main/app/src/main/java/com/chrxw/purenga/hook/PreferencesHook.kt

源码在这里,总之就是用宿主context弹出一个dialog,然后在上面画配置项,跟wx有点一点点像,但是是简化版
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
nullpointer1 2024-1-30 09:11
8
0
感谢 我去看看
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
nullpointer1 2024-1-30 09:11
9
0
ChrQwQ https://github.com/chr233/PureNGA/blob/main/app/src/main/java/com/chrxw/purenga/hook/PreferencesHook ...
感谢 我去看看
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
nullpointer1 2024-1-30 09:36
10
0
我看了下,根据作者自己写的注释,其实是还需要重启配置才能生效的
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
nullpointer1 2024-1-30 09:41
11
0
ChrQwQ https://github.com/chr233/PureNGA/blob/main/app/src/main/java/com/chrxw/purenga/hook/PreferencesHook ...
好像是跟方式无关的,要调用xposed的某些api实现
雪    币: 1078
活跃值: (1316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ChrQwQ 2024-1-30 13:31
12
0
nullpointer1 好像是跟方式无关的,要调用xposed的某些api实现
要用XposedAPI的话得在启动的时候保存需要Hook的class,然后根据配置创建hook或者移除hook,比较麻烦,所以就直接重启app了,要做也是可以的,就是应用新的hook前记得移除旧的hook
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
nullpointer1 2024-1-30 14:04
13
0
ChrQwQ 要用XposedAPI的话得在启动的时候保存需要Hook的class,然后根据配置创建hook或者移除hook,比较麻烦,所以就直接重启app了,要做也是可以的,就是应用新的hook前记得移除旧的ho ...
看了下,chatgpt说让这么搞,保存所有的methodhook,调用unhook再重新hook,感觉是配置是注入的时候就确定了,即使它是可变的,运行时执行的就是注入时的配置,但是不理解
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
nullpointer1 2024-1-30 14:04
14
0
放弃了
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
nullpointer1 2024-1-30 15:00
15
0
ChrQwQ 要用XposedAPI的话得在启动的时候保存需要Hook的class,然后根据配置创建hook或者移除hook,比较麻烦,所以就直接重启app了,要做也是可以的,就是应用新的hook前记得移除旧的ho ...
我搞定了,思路没问题的,之前有问题是xsharedpreference无法监听修改,我现在改成每次读都reload,不过不推荐,说是消耗性能很大,在hook方法的回调中读取配置根据配置选择执行不执行就ok了,而不是在loadpackage里面选择hook还是不hook这样只能重启才生效
游客
登录 | 注册 方可回帖
返回