对so进行section加密后,提示.dynamic section header was not found

如果对so库中的section进行加密可详见:
http://www.wjdiankong.cn/android%E9%80%86%E5%90%91%E4%B9%8B%E6%97%85-%E5%9F%BA%E4%BA%8E%E5%AF%B9so%E4%B8%AD%E7%9A%84section%E5%8A%A0%E5%AF%86%E6%8A%80%E6%9C%AF%E5%AE%9E%E7%8E%B0so%E5%8A%A0%E5%9B%BA/

加密思路:读取ELF文件,根据Section Header中的name来定位自定义的section。根据Section Header中的offset和size来提取该段字节并对其进行加密。同时修改ELF Header中的entry和shoff值来保存加密的大小和偏移量。

解密:执行so库方法之前,读取so的起始地址,并获取到ELF Header中的entry和shoff,根据加密规则推导出加密起始地址和大小。然后根据起始地址和大小获取对应的字节进行解密。

遇到问题:Android7.0后JNI库必须保留Section Headers。由于加密时修改了shoff值,导致加载so库值解析Section Headers 解析不了,包.dynamic section header was not found。

修改测量:shoff和entry目的是为了存储加密的偏移大小和加密的大小。我们可以使用entry高低16位来分别存储着两个值。即可解决该问题。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值