首页
社区
课程
招聘
[原创]Xposed Hook技巧,代理abstract
发表于: 2020-7-4 09:01 18442

[原创]Xposed Hook技巧,代理abstract

2020-7-4 09:01
18442

题意:代理抽象就是说,对于一个抽象类的实例化参数,我们需要进行hook他的结果的操作,这种匿名类或者对象往往有很多构造函数的参数是我们无法构造的,或者传入空可能需要和正常的处理方式相悖,增加复杂度。(说了这么多,还是上代码直接)

目录:

        1、代理接口

        2、代理抽象类

        3、其它

这样执行就没问题了,同时对于实现类我们也是可以hook的了。

    对于这种实现方式,是不是眼熟呀。。。看看其他

    

源码 https://github.com/supperlitt/testabstract


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-7-4 11:25 被supperlitt编辑 ,原因:
收藏
免费 11
支持
分享
最新回复 (17)
雪    币: 634
活跃值: (1503)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
赞楼主,动态代理和反射能解决好多问题。
不过从难易程度来讲,最简单的办法是hook抓一个对象存着,使用的时候改改属性直接复用。
2020-7-6 10:21
0
雪    币: 2123
活跃值: (4512)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Monkeylord 赞楼主,动态代理和反射能解决好多问题。 不过从难易程度来讲,最简单的办法是hook抓一个对象存着,使用的时候改改属性直接复用。
hook抓一个对象这种操作起来也很麻烦 有些抽象类的实现类非常难触发。
还是代理好用
2020-7-6 10:40
0
雪    币: 2123
活跃值: (4512)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Monkeylord 赞楼主,动态代理和反射能解决好多问题。 不过从难易程度来讲,最简单的办法是hook抓一个对象存着,使用的时候改改属性直接复用。
第二种那里 可以直接写java代码编译成jar转成dex文件合上去。道理是一样的
2020-7-6 10:42
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
可是TestAb抽象类是在目标程序中 ,我们只能拿到他的class 无法在xposed的模块中得到他的引用 ,所以无法写一个类来继承他
2020-12-11 18:33
0
雪    币: 1376
活跃值: (5604)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
6
wx_xjxu 可是TestAb抽象类是在目标程序中 ,我们只能拿到他的class 无法在xposed的模块中得到他的引用 ,所以无法写一个类来继承他
定义一个jar,只有那个抽象类相关的(包名,类名一致),然后使用。compileOnly files你就可以在你要用的app里面用了噻。
2020-12-12 10:09
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
supperlitt 定义一个jar,只有那个抽象类相关的(包名,类名一致),然后使用。compileOnly files你就可以在你要用的app里面用了噻。
compileOnly 指的是我们写的模块的build文件里面的引入方式吗
2020-12-24 15:43
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
wx_xjxu compileOnly 指的是我们写的模块的build文件里面的引入方式吗
在工程中看到了 这就试试集成目标程序中的抽象类
2020-12-24 15:47
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
已经成功了  这样就算在自己的代码中继承了 目标程序的抽象类吧 楼主真厉害
2020-12-25 11:24
0
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感觉好晦涩  得慢慢研究
2020-12-26 21:47
0
雪    币: 1709
活跃值: (1499)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这种方式怎么兼容LSPatch XPatch这些内置的情况?
2022-3-31 20:45
0
雪    币: 342
活跃值: (774)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12

我也是这么搞的。说白了就是双亲委托机制罢了。
Xposed的得到的param中的classLaoder是宿主的。加载插件的classLoader的父Loader不是宿主。


其实你可以直接在加载的DEX/Apk中直接 new 宿主的类了(插件化思想)。

最后于 2022-4-1 11:12 被学着学逆向编辑 ,原因:
2022-4-1 11:06
0
雪    币: 40
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
都是大神
2022-4-1 19:43
0
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
我理一下看对不对,第一天很迷,因为apk和模块放在一起,包名太像了,简单来说就是在本地定义一遍包名类名实现和宿主app中一样的接口,并且自己写一个实现,然后在hook之前,把自己写的接口实现加载到宿主的app的环境中,然后newinstance去hook构造接口参数了,并且抽象方法还是自己实现的,可以随便写
2024-1-12 16:37
0
雪    币: 2372
活跃值: (2837)
能力值: ( LV5,RANK:61 )
在线值:
发帖
回帖
粉丝
15
其实作者的最后一点就挺好的了:    2.5 当然这不是唯一解决办法,我们通用可以把,当前hook的apk,加入到待hookAPP的dex的pathList集合中,这样就可以直接用pthis对象的ClassLoader,进行加载和hook了。
这样子就可以使用apk的原始类了,直接new他的子类了,不过还有一种简单的方法就是hook:Object pthis中的app原始的实现类,这样子就不需要手动调用它的原本方法了
2024-1-13 00:41
0
雪    币: 2372
活跃值: (2837)
能力值: ( LV5,RANK:61 )
在线值:
发帖
回帖
粉丝
16
典型的类加载的问题,这个是其中的一个知识点,xposed插件继承app的方法。还有一个就是xposed注入so回调插件的类进行callback(hook数据回调上报)。其实这两个都是classloader的修正问题。。。很多的事情都是其一或者两者兼并。
2024-1-13 00:43
0
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
完全听不太懂,大佬可以发帖细说吗。。。刚好遇到这么个场景,抽象类的抽象方法当做回调,有我想获取的一个数据,2.5这个原理不太懂诶(新手,大佬勿怪
2024-1-16 11:37
0
雪    币: 2937
活跃值: (30841)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
感谢分享
2024-1-16 14:31
1
游客
登录 | 注册 方可回帖
返回
//