首页
社区
课程
招聘
[原创]xposed art-runtime移植细节
2018-5-12 11:33 8913

[原创]xposed art-runtime移植细节

2018-5-12 11:33
8913
前段时间想打造一个直接集成到本地mtk的xposed环境。
手头有mtk的源代码,还有xposed的源代码。所以移植就开始了。
在移植的过程中,看了老罗的art虚拟机讲解,最后才开始移植。
在实战过程中,就是看代码3周,移植1小时。看来对art虚拟机的足够了解,还是非常有必要的。

下面附上移植的一些细节,还有art-runtime代码的对照。

Xposed移植点

一、背景

前段时间,对xposed感兴趣,想移植一下xposed到本地代码。移植成功后,做了以下对照。该移植在于art虚拟机的移植。下面就分别介绍移植点

二、移植位置

红色的是新增加的代码。可以用compare软件,来进行移植工作,比较方便

1、art\runtime\base\logging.h

 

 

增加log属性

2、 art\runtime\base\logging.c

 

实现一个xposed的log

3、art\runtime\entrypoints\entrypoint_utils.h

art\runtime\entrypoints\entrypoint_utils.cc

 

操作hook后的方法

 

 

上面的方法,详细的解释了,如果是xposed hook的方法被检测到时,如何去调用的过程。

4、art\runtime\art_method.h

art\runtime\art_method.cc

art\runtime\art_method-in.h

 

增加一个用于hook的结构体

这个结构体是xposed能进行hook的一个关键

判断方法时,增加xposed方法的判断

 

 

Quick入口设置时,还有一定的要求

 

增加一些与xposed相关的数据结构调用方法及字段

下面StackReplaceMethod的方法,用于更换

 

 

这一段代码在ArtMethod.cc中,是进行方法替换的核心逻辑。

Xposed就是改造了art的artmethod这一类,该类其实就是art虚拟机在运行时的方法对象。

最后生成hook_info 通过SetEntryPointFromJni 来设置到对方法区。需要用的时候再通过soa.DecodeMethod(method)->GetXposedHookInfo();来获取,进而调用。

5、art\runtime\class_linker.cc

因为method->IsProxyMethod(true)变了,导致的改变。

6、art\runtime\debugger.cc

 

7、art\runtime\instrumentation.cc

 

8、art\runtime\jni_internal.cc

 

9、art\runtime\modifiers.h

增加xposed的constant变量

 

10、art\runtime\oat.h

art\runtime\oat.cc

 

 

 

 

一些xposed版本的信息,其实这里可以不要,然后下下面oat_file_assist中检查的时候忽略。

11、art\runtime\oat_file_assistant.cc

 

11、art\runtime\reflection.cc

art\runtime\runtime.h

art\runtime\thread.cc

art\runtime\utils.cc

没有太多难懂的方法

12、art\runtime\stack.h

 

 

增加一个方法设置

三、总结

Xposed 在art虚拟机的源代码的runtime中做了一些修改。给artmethod增加了一个功能。最后实现了hook功能。

文笔不好,请见谅。



[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件:
收藏
点赞2
打赏
分享
最新回复 (16)
雪    币: 440
活跃值: (848)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
猫子 2018-5-12 12:35
2
0
先马克,有空再学习
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
Rprop 2018-5-12 13:08
3
0

最后于 2018-5-12 22:18 被Rprop编辑 ,原因:
雪    币: 1414
活跃值: (4163)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2018-5-12 13:08
4
0
MARKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
聖blue 2018-5-12 23:36
5
0
雪    币: 2649
活跃值: (1541)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hhhaiai 2018-5-14 10:04
6
0
谢谢分享。学习
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
爱国敬业诚信友善 2018-5-14 20:53
7
0
谢谢分享,学习了
雪    币: 3539
活跃值: (911)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
smartdon 1 2018-5-22 10:13
8
0
谢谢分享
雪    币: 17792
活跃值: (60018)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
Editor 2018-5-23 10:18
9
0
图片看不到了
雪    币: 29414
活跃值: (18690)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2018-5-23 10:21
10
0
建议将PDF的图片,一张张帖到论坛上,方便阅读。
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
学鸟叫 2018-5-24 22:59
11
0
什么版本的?
雪    币: 187
活跃值: (551)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
Loopher 2018-8-13 10:37
12
0
Thanks for sharing
雪    币: 69
活跃值: (335)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
pedies 2020-3-13 11:33
13
0
mark
雪    币: 379
活跃值: (515)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lwykj 2020-3-16 02:29
14
0
mark 不错的分享
雪    币: 2458
活跃值: (3313)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
baikaishiu 2 2020-3-18 22:59
15
0
图没了
雪    币: 582
活跃值: (317)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
AAAyangcheng 2020-3-18 23:50
16
0
图没了 我还以为我这边网络有问题.
游客
登录 | 注册 方可回帖
返回