文档章节

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

blitzfeng
 blitzfeng
发布于 2017/07/14 10:02
字数 382
阅读 192
收藏 0
点赞 0
评论 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
动态注入技术

我们在讨论动态注入技术的时候,APIHook的技术由来已久,在操作系统未能提供所需功能的情况下,利用APIHook的手段来实现某种必需的功能也算是一种不得已的办法。在Windows平台下开发电子词典...

hncscwc
2016/03/16
573
1
Xposed也要热更新

好久没写博客了。这次玩一点不一样的。 吐槽&起因 相信熟悉Xposed的小伙伴们都知道,每次写完Xposed都要重启啊!有木有!反射错了,写错了名字,改一个log,都要重启啊有木有!重启浪费时间啊...

wingichoy
2017/04/19
0
0
理解 Android Hook 技术以及简单实战

什么是 Hook Hook 英文翻译过来就是「钩子」的意思,那我们在什么时候使用这个「钩子」呢?在 Android 操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处...

猴亮屏
04/17
0
0
virjar/xposedhooktool

hook base工具 Android 破解的hook工具,集成一些帮助破解的常用功能,如自动网络抓包、网络堆栈爆破、文件日志、webview调试环境 入口在 com.virjar.xposedhooktool.hotload.XposedInit,但是...

virjar
04/22
0
0
安卓动态调试七种武器之离别钩 – Hooking(下)

0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的。另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造...

阿里聚安全
2016/06/22
455
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Call to undefined function Workerman\posix_getpid

workerman 在centos下报PHP Fatal error: Call to undefined function Workerman\posix_getpid posix在下面这个包中php-process...

dragon_tech
6分钟前
0
0
mysql 7.4 创建表 时  所建表 字段太多 导致失败

报错:[Err] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. 解决方法:把表的引......

qimh
8分钟前
0
0
语法补漏

1.if...elif...else... 代码示例: test=10 if test>9: print(1) elif test>8: print(2) elif test>7: print(3) else: print('nothing') 输出代码: 1...

十年磨一剑3344
9分钟前
0
0
Python -re模块及正则表达式解析

传送门: https://blog.csdn.net/pipisorry/article/details/25909899 ps:上面文章中"命名分组"的语法格式不能执行。正确的如下: (?P<name>正则表达式) #name是一个合法的标识符 除了使用别名...

一口今心
16分钟前
0
0
mybatis中session.getMapper方法源码分析

0开始代码AuthorMapper mapper = session.getMapper(AuthorMapper.class); 1 DefaultSqlSession类 @Override public <T> T getMapper(Class<T> type) { //最后会去调用MapperRegistry.getMap......

writeademo
25分钟前
1
0
spring cloud zuul网关的作用

zuul一般有两大作用,1是类似于Nginx的网址重定向,但zuul的重定向的一般是整个spring cloud里在Eureka注册中心的模块. zuul: ignored-services: '*' sensitiveHeaders: routes: ...

算法之名
25分钟前
9
0
java按比例之原图生成缩略图

package com.wxp.test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import sun.......

恋码之子
35分钟前
1
0
SpringCloud 微服务 (十五) 服务容错 Hystrix

壹 工作中的微服务架构,某个服务通常会被多个服务调用或者多层调用完成需求,如果某个服务不可用,导致一个系统功能不可用或者服务直接没用了的情况,这种情况称为雪崩效应 有A服务调用B服务,B服...

___大侠
37分钟前
1
0
Spring框架中的设计模式(五)

Spring框架中的设计模式(五) 通过以前的4篇文章,我们看到Spring采用了大量的关于创建和结构方面的设计模式。本文将描述属于行为方面的两种设计模式:命令和访问者。 前传: Spring框架中的...

瑞查德-Jack
39分钟前
1
0
解决phpstorm运行很卡问题!

phpStorm一旦达到这个临界值,所有智能提示、自动补全都失效了 这TM就很尴尬了,顿时感觉自己就是个废人了,纯手写代码跟便秘一样 众所周知phpStorm基于JAVA,那么这个内存限制肯定跟JAVA的虚...

sjcehui2010
42分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部