首页
社区
课程
招聘
[原创]一种对抗AndroidNativeEmu的方法
2020-11-26 10:43 6622

[原创]一种对抗AndroidNativeEmu的方法

2020-11-26 10:43
6622

一、目标

最近在模拟执行某个so的时候发现了一个奇怪的错误,在执行到call_object_method的时候失败,仔细看了一下,发现这个so首先获取了
Activity类的getPackageManager方法 的jmethodID,然后用一个
Application类 的对象去调用这个jmethodID。

 

简单的解释就是 A类的对象中调用B类的方法?

二、分析

猜测是这样的: Application和Activity类中都有getPackageManager方法,而且功能都是一样的,所以为了优雅,google工程师就把这两个jmethodID的地址设置成一样的,这样造成了Application类的对象可以调用Activity类的getPackageManager。

 

这个猜测是不对的,jmethodID相同的真实原因是
Application 和 Activity 都是 ContextWrapper 的子类, getPackageManager 是 ContextWrapper 里的方法,获取的两个 jmethodid 自然是一样的。 感谢@葫芦娃

 

我们赶紧证明一下:

 


好了,现在我们只要拿到Application的对象,然后也去调用Activity类的getPackageManager,跑到这个call_object_method,

 

AndroidNativeEmu就罢工了

 

三、总结

开动脑筋,神奇的抵抗方式总是有的……


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

最后于 2020-11-26 21:53 被fenfei331编辑 ,原因:
上传的附件:
收藏
点赞2
打赏
分享
最新回复 (5)
雪    币: 916
活跃值: (3414)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
葫芦娃 1 2020-11-26 13:17
2
1
Application 和 Activity 都是 ContextWrapper 的子类, getPackageManager 是 ContextWrapper 里的方法,获取的两个 jmethodid 自然是一样的。
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_foyotena 2020-11-26 21:38
3
0
可以增加复杂度,无法完美对抗,cpu都在人家手里,你的每一条指令都知道,
雪    币: 89
活跃值: (469)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
pkiller 2020-12-2 14:15
4
0
mb_foyotena 可以增加复杂度,无法完美对抗,cpu都在人家手里,你的每一条指令都知道,
这跟CPU在谁手里关系不大,还是信息不对称的对抗。 都有成本
雪    币: 1498
活跃值: (1071)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
my1988 1 2020-12-2 21:09
5
0
这只是AndroidNativeEmu的一个实现缺陷,并非无解.
雪    币: 167
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
myvsmy 2021-11-21 16:59
6
0
这个用unidbg可轻松解决
游客
登录 | 注册 方可回帖
返回