2013-03-13 69 views
1

这可能是一个完整的“禁忌”,但我想知道是否在应用程序签名并编译到apk之后才能使应用程序可调试。在编译后将Android应用程序设置为可调试

我希望能够在我的服务器上生成一个随机密钥,然后使用此密钥将我已发布的应用程序置于可调试状态。

//Build a hidden back door to request the randomly generated key on my server 
//Input this key into an edittext box of some sort. 
//Check this key against the server 
//If key validates, put application in debuggable state. 

我意识到这样做存在潜在的安全风险,但我只是想知道它是否完全可能。

+0

有没有什么特别的用例可以帮助你呢? – 2013-03-13 16:19:00

+0

我宁愿不说明实际的特定用例,因为它可能会暴露安全风险,但我基本上希望能够调试一些我无法在开发环境中复制的用例。 – dell116 2013-03-13 16:30:38

回答

1

如果您愿意重新签名并重新安装,那么从非可调试的APK生成可调试APK是相当直接的,但是您无法对已安装的实例执行此操作。

实际代码中基于可调试/不可调试状态表现不同的任何内容也可以看作Brent所暗示的其他内容,但由于大多数调试功能都内置在Android中,而不是部分内容应用程序代码。

虽然您也许可以提供标志替代方法来调试功能。例如,您可以提供一些功能将私人文件复制到公共存储中。如果你真的想,你可以在一台服务器中烧烤,这个服务器可以提供一个作为应用程序UID运行的shell。但是获得一个真正的JDWP调试器可能需要极其依赖于android-build的hackery,因为你可能必须提供你自己版本的很多系统代码。

简单来说,通过记录大量通常被抑制的内部细节来让程序改变它的行为将会非常简单。

请花一些时间考虑您的用户对安全性的影响。

0

通过dev站点查看我看到通过从给定的上下文调用getApplicationInfo().flags;访问标志。 flags不是final,所以看起来getApplicationInfo.flags |= FLAG_DEBUGGABLE;将允许您在运行时启用调试:参考ApplicationInfo doc:http://developer.android.com/reference/android/content/pm/ApplicationInfo.html

请注意,我没有测试过这个(不是通过momemnt上的android环境)。

+0

可能无效,因为这只会覆盖该表达式的结果,并且不会影响Android本身及其应用程序启动代码中可调试状态的其他测试。 – 2013-03-13 17:11:16

+0

检查文档它看起来像即使flags类成员不是最终的,FLAG_DEBUGGABLE成员是静态的并且是最终的,所以它看起来像在运行时更改它是一个不行。 – dell116 2013-03-13 18:24:19

+0

@ dell116,FLAG_DEBUGGABLE是静态的并且是最终的,因为它是一个常数。 applicationInfo的flags字段本质上是一个位掩码,而FLAG_DEBUGGABLE只是该掩码内的相应位。 – 2013-03-13 19:08:41

相关问题