文档章节

Xposed hook Multidex 和动态加载的解决方法

blitzfeng
 blitzfeng
发布于 2017/07/14 10:02
字数 382
阅读 294
收藏 0

    现在应用的体积越来越大,方法数突破65K上限越来越多,有的采用了Multidex方案,有的使用动态加载,而用Xposed 直接hook Multidex的其他dex,或者动态加载里的方法,会触发异常。这两种方式的解决方法不同,下面给出方案:

    由于android最开始并没有把classes2.dex(代表Multidex)和动态加载的dex加载进入,导致Xposed无法识别。针对Multidex,先hook这个应用的Application类,在afterHookedMethod里在hook你想要的类,以google play service为例:

          XposedHelpers.findAndHookMethod("com.google.android.gms.common.app.GmsApplication", lpp.classLoader, "onCreate", new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    final Class cls = XposedHelpers.findClass("owr", lpp.classLoader);
                    Class oxaCls = XposedHelpers.findClass("oxa", lpp.classLoader);
                    XposedHelpers.findAndHookConstructor(cls, Context.class, Executor.class, oxaCls, new XC_MethodHook() {
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            Field url = XposedHelpers.findField(cls, "m");
                            url.setAccessible(true);
                            url.set(param.thisObject, "");
                        }
                    });

                }
            });

gms有5个dex文件,我想要hook的“owr”类在第三个dex文件中,先hook Application,再hook目标方法。如果该应用没有继承Application的类,那直接hook Application也可以。

    上面的方法对于动态加载并不适用,针对动态加载,先hook目标类的父类,假如目标是自定义的ImageView,则hook ImageView,在afterHookedMethod就有你的目标类,通过这个类来获得classloader。

            Class imageCls = XposedHelpers.findClass("android.widget.ImageView",lpp.classLoader);
            XposedBridge.hookAllConstructors(imageCls, new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    final Object imageObj = param.thisObject;
                    String name = imageObj.getClass().getName();
                    XposedBridge.log("name:"+name);
                    if("com.xx.yy".equals(name)){
                        XposedHelpers.findAndHookMethod("com.xx.yy", imageObj.getClass().getClassLoader(), "a", new XC_MethodHook() {
                            @Override
                            protected void afterHookedMethod(MethodHookParam param) throws Throwable {

                            }
                        });
                    }

                }
            });

目标是com.xx.yy 的a方法,imageObj.getClass().getClassLoader()才是真正需要的classloader。

© 著作权归作者所有

共有 人打赏支持
blitzfeng
粉丝 0
博文 8
码字总数 3993
作品 0
程序员
Xposed模块的开发

Xposed模块的开发 snowdream - Impossible is nothing!2017-06-0631 阅读 android 作者:snowdream Email:yanghui1986527#gmail.com Github: https://github.com/snowdream QQ 群: 5293276......

snowdream - Impossible is nothing!
2017/06/06
0
0
Android逆向之旅---获取加固后应用App的所有方法信息

一、前言 在逆向应用的时候,我们有时候希望能够快速定位到应用的关键方法,在之前我已经详细介绍了一个自己研发的代码动态注入工具icodetools,来进行动态注入日志信息到应用中,不了解的同...

guozhendan
2017/04/05
0
0
Android逆向之旅---获取加固后应用App的所有方法信息

一、前言 在逆向应用的时候,我们有时候希望能够快速定位到应用的关键方法,在之前我已经详细介绍了一个自己研发的代码动态注入工具icodetools,来进行动态注入日志信息到应用中,不了解的同...

jiangwei0910410003
2017/03/20
0
0
那些年Android黑科技②:欺骗的艺术

“我的能量无穷无尽,只有强大暗能量才能统治Android界。 受屎吧!!! =≡Σ((( つ•̀ω•́)つ ” -- 来自暗世界android工程师 前言: 这是黑科技系列的第二篇,是Android知识正营中较有深...

猴亮屏
2017/10/24
0
0
Android.Hook框架Cydia篇

Cydia Substrate是一个代码修改平台.它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的.而Xposed只支持HOOK app_process中的java函数,因此Cydia Substrate是一款强大而...

henry-zhang
2015/11/11
0
2

没有更多内容

加载失败,请刷新页面

加载更多

Maven 项目中依赖的搜索顺序

ettings_mirror 的优先级高于 central settings_profile_repo 优先级高于 settings_mirror settings_profile_repo 优先级高于 pom_repositories settings_profile_repo 优先级高于 pom_prof......

xingyu4j
10分钟前
1
0
改变maven项目的名称

pom.xml <groupId>com.soft.xxx</groupId><artifactId>xxx</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>xxx Maven Webapp</name><build>......

1713716445
12分钟前
2
0
windows下按照RabbitMQ

rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平...

zhaochaochao
12分钟前
2
0
10个PHP比特币开源项目

如果你是一个Phper,如果你希望学习区块链,那么本文列出的10个开源的Php比特币项目,将有助于你了解在自己的应用中如何加入对比特币的支持。 如果你希望快速掌握使用Php对接比特币钱包的方法...

笔阁
19分钟前
10
0
MyBatis级联探讨

数据模型 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper name......

职业搬砖20年
23分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部