如何通过程序禁用Android USB调试

4

一些三星安卓手机存在一个问题,如果插入USB线,会自动开启USB调试功能,这显然是一个安全问题。我想编写一个程序,在USB插入时可以禁用USB调试功能。

你有什么想法吗?


我该如何防止应用在USB调试模式或开发者选项下运行? - stackunderflow
3个回答

6
似乎这是不可能的。我认为我必须使用Settings.SystemADB_ENABLED,但是ADB_ENABLED是一个安全系统设置,普通应用程序无法更改。另一方面,有权限android.permission.WRITE_SECURE_SETTINGS,所以看起来我可以更改它。我能在已Root的手机上获得它吗?如果有人有关于如何解决这个安全问题的想法,那就太好了。

是的,在已经root的手机上可以这样做。在应用商店中有一个叫做Widgetsoid2.x的应用程序可以实现此功能。但是需要将该应用程序放置在/system/app目录中。 - Rajkiran
我通过修改Nexus 10的出厂镜像(mantaray)来完成这个任务。首先,在Ubuntu上挂载我的system.img文件(需要运行simg2img工具),然后进入system/app文件夹,将我的应用程序拖放到其中,使用make_ext4fs命令创建ext4文件系统,最后将修改后的system.img文件刷回设备。 - Android Noob
@niels:Rajkiran的评论是不正确的。为了在程序中启用/禁用USB调试,您需要使用Android平台(Gingerbread、Jellybean等)证书对应用程序进行签名,并且您的应用程序在AndroidManifest.xml中具有适当的配置,并且您的应用程序已经以编程方式或手动安装在/system/app目录中。您不能仅通过将其移动到/system/app目录来单独完成此操作。它不是这样工作的。 - ChuongPham

1

我认为这不是一个安全问题。

首先,开发人员的责任是只提供不会在后期损害应用程序的调试消息。

其次,用于开发的调试消息应该比用于生产的调试消息具有另一种调试级别。

第三,如果您的应用程序通过adb公开数据,这可能会危及您的应用程序,也许从一开始就存在应用程序设计上的问题?

第四:不建议切换用户应该能够配置的设置。我不想看到我配置的许多东西通过启动应用程序打开和关闭。当然,你提到了三星的Bug。但我认为他们应该能够解决这个问题。

敬礼,Chris


1
你说得没错,一个应用通常不应该切换设置,但是关于安全问题,我认为你完全错了。通过 USB 调试,你不仅可以读取日志文件,还可以做很多其他的事情:获取手机的 root 权限、在用户不知情的情况下安装软件、删除或读取所有数据。如果我说错了,请纠正我。 - niels
1
这绝对是一个安全问题!请参见末尾的链接。我想确保我的企业应用程序用户没有启用USB调试,以便我可以假定设备管理员策略是“安全的”(我知道没有100%的安全性)。启用USB调试后,攻击者可以破解密码锁,因此可以从我的手机获取所有设备数据(包括设置、内存和加密密码——因为密钥必须在应用程序中某个地方)。来源:http://thomascannon.net/projects/android-reversing/ - fklappan

0
为了实现这一点,您需要android.permission.WRITE_SECURE_SETTINGS权限。
没有root:从ABD执行adb shell pm grant <package-name> android.permission.WRITE_SECURE_SETTINGS 有root:Root访问意味着我们可以在没有adb的情况下执行shell命令,因此解决方法如下:
        try {
            Runtime.getRuntime().exec(new String[]{"su","-c",String.format("pm grant %s android.permission.WRITE_SECURE_SETTINGS",BuildConfig.APPLICATION_ID)});
        } catch (IOException e) {
           // handle IOException
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接