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

定位Method的dalvik字节码

2017-9-9 12:27
5476

在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中是一一对应的。


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

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






ckis



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

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






寒号鸟二代



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

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


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






rrrfff



转不回去是什么意思,

比如  hook  Virtual  Method  A

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






sudami



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

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