首页
社区
课程
招聘
定位Method的dalvik字节码
发表于: 2017-9-9 12:27 6092

定位Method的dalvik字节码

2017-9-9 12:27
6092

在Android M之前, ArtMethod中有个字段entry_point_from_interpreter_, 用于在解释器中调用当前方法的入口点, 这个字段的取值一般只有两种情况, artInterpreterToInterpreterBridge 和 artInterpreterToCompiledCodeBridge, 两者都是C函数, 签名也一致, void(*)(class Thread *self, CodeItem *code_item, ShadowFrame *shadow_frame, jvalue *res), 其中参数CodeItem *code_item就是对应的字节码结构, 如下:
// Raw code_item.
struct CodeItem
{
uint16_t registers_size_;
uint16_t ins_size_;
uint16_t outs_size_;
uint16_t tries_size_;
uint32_t debug_info_off_; // file offset to debug info stream
uint32_t insns_size_in_code_units_; // size of the insns array, in 2 byte code units
uint16_t insns_[1];
};
可以看见insns_就是字节码存储的地方, 如果我们把entry_point_from_interpreter_设置成自己方法, 就可以得到方法的字节码了, 这里的字节码和dex中是一一对应的。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 241
活跃值: (231)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
沙发  先顶一下  然后看源码  回来给好评
2017-9-9 13:50
0
雪    币: 241
活跃值: (231)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
有个问题  我记得andfix这种  腾讯流的classloader的HOOK方式  对于构造函数不支持  并且对于一些特定的方法类型不能HOOK,方法签名不一致也会导致HOOK失败    你的框架是否解决了这些问题?当时我做类似项目的时候  也考虑过用CLASSLOADER的JAVA层框架  但由于上面说的原因  最终没有使用ANDFIX
2017-9-9 14:00
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4






ckis



有个问题 我记得andfix这种 腾讯流的classloader的HOOK方式 对于构造函数不支持 并且对于一些特定的方法类型不能HOOK,方法签名不一致也会导致HOOK失败 你的框架是否解决了这些 ...

方法签名不一致对于方法替换是个无解的问题。
2017-9-9 14:50
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
因为反射调用时需要这些信息 
2017-9-9 14:56
0
雪    币: 172
活跃值: (1628)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
好像dalvik下,使用方法替换,public方法的签名可以不一致,private和static方法的签名需要一致,art下使用mar-v-in的art  hook框架则没有这种限制,顺便打个广告,写了个类似的hook框架,https://github.com/woxihuannisja/StormHook
2017-9-9 15:26
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7






寒号鸟二代



好像dalvik下,使用方法替换,public方法的签名可以不一致,private和static方法的签名需要一致,art下使用mar-v-in的art hook框架则没有这种限制,顺便打个广告,写了 ...

是的,  dalvik下对于virtual方法并不需要进行方法替换,  直接替换vtable即可,  然而art环境下可能将virtual  call优化成direct  call,  所以这种方案行不通了
2017-9-9 15:36
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不错!!!!!!!
2017-9-9 19:38
0
雪    币: 2373
活跃值: (2285)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
9
感谢作者,学习下。
2017-9-9 22:29
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
10
楼主大大,ART下AndHook对虚函数不行啊
虽然hook上了,但是在fake函数中处理过后,没法再跳回去,AndFix也有这样的问题


2017-9-10 12:30
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
sudami 楼主大大,ART下AndHook对虚函数不行啊虽然hook上了,但是在fake函数中处理过后,没法再跳回去,AndFix也有这样的问题我做了一个免Root下微信消息防撤回的插件(比翼多开),考虑到需要 ...
转不回去是什么意思, 
2017-9-10 13:04
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
12






rrrfff



转不回去是什么意思,

比如  hook  Virtual  Method  A

我想要的调用流程
A
fake_A
orig_A (AndHook没有获取到这个地址)
2017-9-10 13:06
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
sudami rrrfff 转不回去是什么意思, 比如  hook  Virtual  ...
没有获取到这个地址?  是指调用回去没效果还是?
YAHFA的方案都不行?
2017-9-10 13:09
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
14
都不行啊,就是调回去就挂,看了下是地址没获取到,我也不知道为啥。
2017-9-10 13:12
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15






sudami



都不行啊,就是调回去就挂,看了下是地址没获取到,我也不知道为啥。逆向了一个其他产品,免ROOT  自动抢红包的,它是用自修改的Andfix  去hook&n ...

方便的话贴crash的logcat给我
2017-9-10 13:18
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
16
嗯,等周一我瞅瞅啊
2017-9-10 13:28
0
雪    币: 76
活跃值: (114)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
寒号鸟二代 好像dalvik下,使用方法替换,public方法的签名可以不一致,private和static方法的签名需要一致,art下使用mar-v-in的art hook框架则没有这种限制,顺便打个广告,写了 ...
你那工程我看过了,结构不清楚,怎么去实验,如何编译都没讲,工程版本不一致。
2017-9-13 18:10
0
雪    币: 35
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
注入到其他进程是需要自己额外去处理吗?
2017-9-26 23:33
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
vurtneye 注入到其他进程是需要自己额外去处理吗?
这样的话你用类似6L的框架可能会比较合适一点
2017-9-27 00:00
0
游客
登录 | 注册 方可回帖
返回
//