Android:为什么我的进程在应用程序崩溃后仍然存活?

时间:2018-02-28 10:49:35

标签: android security process hardening

我有一个应用程序,我通过故意抛出RuntimeException在某个点崩溃。结果是应用程序崩溃,活动的所有可见痕迹都消失,用户会看到一个弹出对话框:

  

App 已停止了   [X]关闭应用

到目前为止,所有这些都是可以预期的。

但是,我可以通过在崩溃之前和之后调用adb shell ps | grep <packageName>来观察我的进程实际幸存此崩溃。 (该过程仅在用户点击“关闭应用程序”后被终止。)

  • 这个过程保持活力有什么意义?这个过程处于什么状态?它需要哪些资源,哪些信息仍保留在内存中?

PS。我知道在没有流程存活的情况下强制终止应用程序的不同可能性(例如System.exit()android.os.Process.killProcess())但这不是问题 - 我对这个过程的原因更感兴趣幸免于应用程序崩溃。

我的问题的

背景应用程序强化和root / tamper / debugger检测。在某些情况下,从安全/强化的角度来看(即为潜在的攻击者提供更难的逆向工程),可能需要尽可能快速,干净地杀死应用程序。我完全清楚Android并非旨在为应用程序提供此类控制,并且您通常不应尝试终止应用程序。

1 个答案:

答案 0 :(得分:1)

Android在崩溃后保持活动一段时间的原因正好与你的目标相反:)它需要收集一些调试信息并使其可供应用创建者使用。

您可以直接从代码中删除您的流程:

android.os.Process.killProcess(android.os.Process.myPid());