我正在尝试开发一种 Android 防病毒软件,并且正在尝试找出可能的方法。
到目前为止,我发现唯一的方法之一是使用PackageManager并获取已安装应用程序及其包名称的列表,并将其与黑名单进行比较。有没有更好的方法来解决这个问题?
开发一个以 root 身份运行的进程,甚至更好:一个审计进程和文件系统文件的 Linux 内核模块。
将防病毒软件实现为完全用户态结构的问题在于,恶意软件通常以更高的权限运行,因此很容易逃避检测,这就是 rootkit 感染如此难以处理的原因(“从轨道上核对它,它是唯一的方法来确定”)。
您的下一个问题是维护一个 virii 数据库。早在 1990 年代的原始 AV 系统保留了已知恶意软件的哈希数据库。问题是它们无法防御多态可执行文件、那些通过将自身附加到其他程序而传播的可执行文件,或者诸如 Word 宏之类的东西。另一种方法是开发一个基于启发式的系统。在基于 VM 的系统中,您可能会侥幸逃脱,因为可以轻松分析程序的行为(例如定位对恶意软件使用的系统函数的调用),但一个好的病毒将用“本机”语言编写,从而进行检测即使不是不可能,也非常困难(当我使用诺顿防病毒软件时,他们的“寻血犬”启发式系统从未起作用,并且总是产生太多误报)。
最后,您还有研究和维护这样一个数据库的艰巨任务。这就是为什么只有大型安全公司(Symantic、McAfee、NOD、Microsoft 等)开发 AV 程序的原因。
如果我是你,我会在你浪费任何时间之前立即放弃。如果这是一个教育练习,那么您将通过编写自己的病毒而不是编写一个试图阻止它们的系统来了解有关恶意软件的更多信息。