尝试在java层加载dex文件的所有类

简述:

        想要脱方法抽取的壳,都必须要强制加载dex的所有类,随着壳技术的发展,壳对于dex文件的防护越来越厉害,在native层加载类的崩溃率越来越高,所以这次我尝试在java层加载所有的类,并把加载后的class传入native层处理

正文:

       分析了DexFile类的源码后,决定从loadClassBinaryName方法入手,理由是:

1、它是调用defineClass的方法,一般壳程序不太会防护它

2、它不是静态方法,能获取到DexFile中的mCookie这个关键属性

3、ClassLoader是它的方法参数,后面加载所有类需要用到它

 

hook住loadClassBinaryName方法后,获取到dexFile对象、mCookie后,新建一个线程来加载所有类

 

如果需要对Class的信息进行处理,可以把Class对象传入native层,转换成ClassObject对象,也就是dvmDefineClass方法的返回对象

ClassObject * classObj = (ClassObject *)dvmDecodeIndirectRef(dvmThreadSelf(), clazz);

 

总结:

        在java层加载所有类肯定要比在native层操作稳定性好,而且class可以和ClassObject转换

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值