首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于替换Apk安装释放的so之后的用户权限问题

一个有意思的问题,我们安装了某一款app之后(android8.0系统),到data/data目录下删除某个启动需要的名为libJustATest.so,删除之前备份成libJustATest.so1。删除之后程序无法正常运行,提示找不到so,这是正常的现象。但是当我们把libJustATest.so1名字改成libJustATest.so之后,还是启动失败,提示找不到这个so库。

注:消息日志里显示是从data/app目录下找so库的,该目录下的lib目录其实是data/data的一个完全同步映射,实际的so还是存在于data/data中的。

原因:

当我们从lib目录下用su权限修改了so之后,so的权限就变成了root:root权限,由于android的安全机制,被root用户修改过的so是不能被调用的。这就导致即便我们把so改回来还是无法启动程序。

可以用 “chown system:system libxx.so”将so改回system权限,或 “chown app用户名:app用户名 libxx.so”将so改成app的私有权限,apk即可再次运行。

在我们平时的调试过程中,为了免安装,常常直接从shell里将修改之后的so push到lib目录下,这样做是不会改变so的权限的,所以apk仍旧了正常加载so。

猜测和未知的:

猜测和linux的安全机制SELinux有关,SELinux是从4.3加入到android的,4.2还没有引入SELinux的机制,测试后不存在上面的问题,有朋友说在6.0上也有碰到过这个问题,不过只存在于个别 app,用setenforce 0即可解决,但我在6.0的模拟器上还没有复现到这个问题,并且8.0的手机上setenforce 0是没有作用的。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180303G0UH0500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券