首页
社区
课程
招聘
[求助]动态加载的dex中的方法,Xposed如何hook?
发表于: 2014-12-4 12:54 26672

[求助]动态加载的dex中的方法,Xposed如何hook?

2014-12-4 12:54
26672
小弟想hook某个程序中的方法,但是这个方法是一个动态加载进入程序的dex中的方法。用xposed它直接报错说找不到我要hook的类 ,那是因为 还没加载这个dex,哪位大湿遇到过这样的问题,求办法,谢啦~!

[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 5
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
哎,都没人答啊~! 自己写吧。   就是 没考虑 classload
2014-12-16 12:38
0
雪    币: 105
活跃值: (211)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
信息太少了,看看能不能成功findclass->你想修改的方法所在的类,如果findclass都返回空,就是你选择的dexloader错了
2014-12-20 15:05
0
雪    币: 20
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
问题解决了吗
2016-1-5 20:29
0
雪    币: 47
活跃值: (216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
原来做过个hook qq动态加载的dex

                XposedHelpers.findAndHookMethod(
                                "com.tencent.mobileqq.app.message.BaseMessageProcessor",
                                lpparam.classLoader, "a", String.class, boolean.class,
                                List.class, boolean.class, boolean.class, new XC_MethodHook() {
                                        @Override
                                        protected void beforeHookedMethod(MethodHookParam param)
                                                        throws Throwable {
                                                super.beforeHookedMethod(param);
                                                if (!isInit) {
                                                        hookConitune(param.thisObject.getClass()
                                                                        .getClassLoader());
                                                        isInit = true;
                                                }
                                        }
                                });
        }

        private boolean isInit = false;

        private void hookConitune(ClassLoader clsLoader) {
                Object[] o = new Object[1];
                XposedHelpers.findAndHookMethod(
                                "com.tencent.mobileqq.troop.data.TroopMessageProcessor",
                                clsLoader, "a", int.class, o.getClass(), new XC_MethodHook() {
                                        @Override
                                        protected void beforeHookedMethod(MethodHookParam param)
                                                        throws Throwable {
                                                super.beforeHookedMethod(param);
                                        }

                                        @Override
                                        protected void afterHookedMethod(MethodHookParam param)
                                                        throws Throwable {
                                                super.afterHookedMethod(param);
                                        }
                                });
        }

TroopMessageProcessor这个类就是动态dex加载的。逻辑就是dex动态加载后,出发某个方法后然后继续hook应该就能实现你想要的逻辑
2016-1-6 10:43
0
雪    币: 20
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
你这个思路让我豁然开朗,可惜按这个思路测试了下,hookConitune里多次抛出异常,findAndHookMethod一直没找到对应的类,可以确定对应的dex已经动态加载进去了,通过DexClassLoader加载的,是不是和lpparam.classLoader不是同一个classLoader啊。
我在想是否可以hook一下DexClassLoader的loadClass函数,但是尝试了下,失败了(提示找不到loadClass这个函数)
public class xposedZygoteHook implements IXposedHookZygoteInit {
    public  void initZygote(IXposedHookZygoteInit.StartupParam lpparam) throws Throwable{

        final Class<?> pms = XposedHelpers.findClass("dalvik.system.BaseDexClassLoader", null);
        XposedHelpers.findAndHookMethod(pms, "loadClass", String.class, new XC_MethodHook()
        {

            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                super.beforeHookedMethod(param);
                XposedBridge.log(param.args[0].toString());
            }

        });

    }
}
2016-1-6 15:10
0
雪    币: 47
活跃值: (216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你看continue里面的classload用的是thisobj和lparam的classloader是不一样的
2016-1-6 15:49
0
雪    币: 20
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8


            findAndHookMethod("mtopsdk.security.a", lpparam.classLoader, "getMtopApiWBSign",HashMap.class,String.class, new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    
                    if (!isInit){
                        hookConitune(param.thisObject.getClass().getClassLoader());
                        isInit = true;
                        XposedBridge.log("Hook Ok!");
                    }
                }

                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);

                }

            });

    boolean isInit = false;

    private void hookConitune(ClassLoader clsLoader) {

        findAndHookMethod(
                "com.taobao.login4android.security.LoginGetAppKeyFromSecurity",
                clsLoader, "getAppKey", int.class, new XC_MethodHook() {
                    @Override
                    protected void beforeHookedMethod(MethodHookParam param)
                            throws Throwable {
                        super.beforeHookedMethod(param);
                    }

                    @Override
                    protected void afterHookedMethod(MethodHookParam param)
                            throws Throwable {
                        super.afterHookedMethod(param);
                        XposedBridge.log(param.getResult().toString());
                    }
                });
    }

还是不行,多次操作以后,所有hookConitune里输出的都还是异常
上传的附件:
2016-1-6 16:22
0
雪    币: 20
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
搞定了,hook了它的自定义加载函数,不过没法通用,得具体包具体分析。
感谢楼主的帖子,感谢@yepengasm热心提供帮助
2016-1-6 17:43
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不错,学习了
2016-3-28 23:52
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
还是没搞定,依然class not found.

按照你说的,找到加载函数.在某class中发现了这样的语句:

DexClassLoader v1 = new DexClassLoader(...)

按照这个方法
https://github.com/rednaga/DexHook/blob/master/app/src/main/java/asia/malware/dexhook/DexHook.java

代码如下:
                        findAndHookConstructor("dalvik.system.BaseDexClassLoader", lpparam.classLoader, String.class, File.class, String.class, ClassLoader.class, new XC_MethodHook() {
                                @Override
                                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                                        //Logger.printstack();
                                        Logger.log((String) param.args[0]);

                                }
                                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                                        //Logger.printstack();
                                        //Logger.log("1111111111");
                                        //hookConitune(param.thisObject.getClass().getClassLoader());
                                        //Logger.log("222222222");
                                        //hookConitune((ClassLoader) param.args[3]);
                                        Logger.log("3333333");
                                        hookConitune((ClassLoader) param.getResult());
                                }
                        });

也就是说在构造函数结束之后,我能找到的三个classloader都试了
依然class not found。

应该怎么找到正确的classloader呢,望高人指点。
2016-6-2 14:24
0
雪    币: 60
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
这个回帖时间跨度是相当的大
2016-6-3 16:05
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
多谢,多谢,我通过您说的方法解决了。
2016-10-25 15:24
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
谁有好的方案可以处理的?求教
2018-10-19 15:20
0
雪    币: 40
活跃值: (655)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
怎么解决的 ?
2018-10-20 10:41
0
雪    币: 271
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
golyke 搞定了,hook了它的自定义加载函数,不过没法通用,得具体包具体分析。 感谢楼主的帖子,感谢@yepengasm热心提供帮助
请问一下tb具体思路还有吗
2019-5-6 00:39
0
游客
登录 | 注册 方可回帖
返回
//