如何以编程方式禁用Android USB调试

如何以编程方式禁用Android USB调试,android,debugging,usb,Android,Debugging,Usb,一些三星安卓手机上存在一个bug,导致USB调试在USB插入时自动开启。这显然是一个安全问题。我想写一个程序,将禁用USB调试,以便我可以启动它时,USB插头插入。 有什么办法吗?这似乎是不可能的。我想我必须与一起使用,但这是一个正常应用程序无法更改的安全系统设置:-( 另一方面,还有权限android.permission.WRITE\u SECURE\u SETTINGS,所以看起来我可以更改它。我可以在根手机上获得它吗 如果有人知道如何解决这个安全问题,那就太好了。我认为这不是一个安全问题

一些三星安卓手机上存在一个bug,导致USB调试在USB插入时自动开启。这显然是一个安全问题。我想写一个程序,将禁用USB调试,以便我可以启动它时,USB插头插入。
有什么办法吗?

这似乎是不可能的。我想我必须与一起使用,但这是一个正常应用程序无法更改的安全系统设置:-(

另一方面,还有权限
android.permission.WRITE\u SECURE\u SETTINGS
,所以看起来我可以更改它。我可以在根手机上获得它吗


如果有人知道如何解决这个安全问题,那就太好了。

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

首先,开发人员的责任是只提供调试消息,这些消息不会在以后的版本中损害他的应用程序

第二,用于开发的调试消息可能有另一个调试级别,而不是用于生产

第三,如果您的应用程序通过adb公开了数据,从而损害了您的应用程序,那么可能在一开始的应用程序设计中存在一些错误

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


尊敬的Chris

要实现这一点,您需要android.permission.WRITE\u SECURE\u SETTINGS权限

无根:从ABD执行
adb外壳pm授予android.permission.WRITE\u SECURE\u设置

使用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
        }

你是对的,一个应用程序通常不应该切换设置,但关于安全问题,我认为你完全错了。通过usb调试,你不仅可以读取日志文件,还可以执行许多其他操作:根目录手机、在未经用户确认的情况下安装软件、删除或读取所有数据。如果我错了,请纠正我。这绝对是正确的安全问题!请参阅最后的链接。我想确保我的企业应用程序的用户没有启用USB调试,以便我可以假定设备管理策略是“安全的”(我知道没有100%的安全性)。启用USB调试后,攻击者可以破解密码锁,因此可以从我的手机获取所有设备数据(包括设置、内存和加密密码-因为密钥必须在应用程序中的某个位置).Source:是的,在根手机上你可以。play store中有一个应用程序,它可以执行此操作。但是它需要将应用程序放在/system/app目录中。我通过在Ubuntu上安装我的system.img文件(需要运行simg2img工具)来修改Nexus 10工厂映像(mantaray)来实现这一点,进入system/app文件夹,使用make_ext4fs将我的应用程序拖到其中,然后将system.img文件闪回到设备上。@niels:Rajkiran的评论不正确。为了以编程方式启用/禁用usb调试,您需要使用Android平台(姜饼、果冻豆等)对应用程序进行签名证书,并且您的应用程序在AndroidManifest.xml中具有相应的配置,并且您的应用程序以编程方式或手动方式安装在/system/app目录中。您不能仅通过将根设备移动到/system/app目录来单独执行此操作。它不是这样工作的。