返回介绍

10.5 调用系统受 uid 限制的 API

发布于 2024-10-10 22:32:17 字数 2371 浏览 0 评论 0 收藏 0

前面说了几次关于降权的问题,再用一个例子来详细介绍 Android 中如何降权,这个例子是模拟一个系统的 API,但是这个 API 只允许 system 用户调用,代码如下:

这里做了用户 uid 的判断,如果不是 system 用户,直接返回错误信息。为了简单,也是为了向用户演示 Android 中如何执行 jar 功能,这里再加一个入口类:

把项目导出 jar,然后用 dx 命令进程转化成 dex,因为 Android 中是不识别 class 文件的,它只识别 dex 文件:

然后将生成的 classes.dex 文件塞到 jar 中,直接使用压缩软件就可以了,如图 10-6 所示。

图 10-6 压缩软件查看 jar 文件

然后把 exec.jar 导入设备的/data 目录下,如下所示:

接着把 exec.jar 设置到类环境变量中,运行即可:

·export CLASSPATH jar 的路径。

·exec/system/bin/app_process jar 的目录 jar 中的入口类。

为了演示,例子都是在 root 用户下做的操作,如下所示:

运行成功,看到打印的 log 信息,权限拒绝了,因为只能允许 system 用户访问,下面就用 su 降权到 system 再运行,如下所示:

注意:每次切换用户的时候,一定要记得重新设置一下类变量,不然会运行失败的。

成功获取到值了。总结一下步骤:

1)导出可执行的 jar 文件。

2)使用 dx 命令将 class 文件转化成 dex 文件。

3)将转化之后的 dex 文件塞到 jar 文件中,然后导入设备的指定目录。

4)设置可执行 jar 文件到类环境变量中。

5)执行 app_process 命令,运行 jar 文件。

补充一些说明:上面看到了可以成功使用 app_process 命令来运行一个 jar 文件,关于 app_process 的相关知识网上有很多资料,它是 Android 系统中启动 Java 代码的关键。这里也可以直接运行 dex 文件,使用命令 dalvikvm。

首先将上面执行 dx 命令后的 classes.dex 文件 adb 放到/data 目录下,如下所示:

然后执行 dalvikvm 命令,如下所示:

这里同样看到权限拒绝,降级切换到 system 用户,如下所示:

了解了如何使用 app_process 来运行 jar 文件,便体验到了 Android 中一些 API 的访问限制该如何处理,主要是用 su 来进行降权处理,而 su 能够降权是因为它本身提供了可以修改 uid 的功能,即调用 setuid 和 setgid 函数即可,所以在手机 root 之后发现还是不能调用系统的一些 API 时,可以尝试使用 su 来降权进行调用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文