2

这可能是一个完全的“不可以”,但我想知道是否有可能在应用程序被签名并编译成 apk 后使其可调试。

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

//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.

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

4

2 回答 2

1

如果您愿意重新签名并重新安装,从不可调试的 APK 生成可调试的 APK 相当简单,但您不能对已安装的实例执行此操作。

实际代码中根据可调试/不可调试状态而表现不同的任何内容也可以像 Brent 建议的那样查看其他内容,但由于大多数调试功能都内置在 Android 中,而不是应用程序代码的一部分,因此用途有限。

不过,您也许可以为调试功能提供基于标志的替代方案。例如,您可以提供一些东西来将私人文件复制到公共存储中。如果你真的想要,你可以在一个服务器中烘焙,该服务器将提供一个作为应用程序 UID 运行的 shell。但是让一个真正的 JDWP 调试器运行可能需要极端的、依赖于 android-build 的hackery,因为您可能必须提供自己版本的许多系统代码。

在简单的一端,通过记录许多通常被抑制的内部细节来让您的程序改变其行为将非常简单。

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

于 2013-03-13T17:17:09.097 回答
0

getApplicationInfo().flags;浏览开发站点,我看到通过对给定上下文的调用来访问标志。flags不是final,所以它似乎getApplicationInfo.flags |= FLAG_DEBUGGABLE;允许您在运行时启用调试:参考ApplicationInfo文档:http: //developer.android.com/reference/android/content/pm/ApplicationInfo.html

请注意,我还没有测试过这个(不是在moemnt的android环境中)。

于 2013-03-13T17:03:22.230 回答