如何在调试应用程序的上下文中打开“adb shell”(在非root设备上)?

时间:2014-05-27 18:23:16

标签: android adb uid

当我刚刚运行adb shell时,我从uid=2000(shell) gid=2000(shell)开始运行shell,而没有ptrace访问我的应用程序。

如何使用与启动的应用程序相同的UID打开shell?

3 个答案:

答案 0 :(得分:4)

使用run-as <your package name>切换到应用的UID或run-as <your package name> <command>以使用应用的UID运行单个命令。

答案 1 :(得分:3)

来自this answer

  • / data / system
  • 中的packages.xml文件
  • / data / system
  • 中的packages.list文件

包含已安装的应用程序列表及其对应的UID。

同一问题中的

Another answer表明:

adb shell dumpsys package com.example.myapp | grep userId=

然后您可以正常打开shell并运行:

$ su <UID>

然后,您应该具有与使用该UID的应用程序相同的访问权限和权限。

答案 2 :(得分:0)

使用socat的解决方法:

  1. android.permission.INTERNET添加到您的应用中;
  2. socat binarymirror)添加到/data/local/tmp/。确保每个人都可以启动它;
  3. 在启动基于Java的应用程序时添加Runtime.getRuntime().exec("/data/local/tmp/socat tcp-l:4446,fork,reuseaddr exec:/system/bin/sh,pty,stderr,setsid");;
  4. adb forward tcp:4446 tcp:4446
  5. 在主机上使用socat `tty`,raw,echo=0,opost=1 tcp:127.0.0.1:4446连接到应用程序上下文中的shell。
  6. 请注意,此设置不安全,不应保留在生产应用中。