Java 杀毒软件如何以编程方式扫描已安装android应用程序的代码(没有root权限)?

Java 杀毒软件如何以编程方式扫描已安装android应用程序的代码(没有root权限)?,java,android,security,android-intent,android-activity,Java,Android,Security,Android Intent,Android Activity,据我所知,有几种android反病毒软件,例如: 移动平均 AVAST软件 McAfee(英特尔安全) 诺顿移动 卡巴斯基Lаb 等等 每一个都提供了扫描已安装的android应用程序的病毒等功能(即使是没有根目录的android设备) 证明上述内容的屏幕截图如下: 但据我所知,安装在未安装Android设备上的应用程序,一个应用程序无法访问另一个已安装的应用程序及其相关文件,例如: 预安装(即摄像头、日历、浏览器等)存储在/system/app中的APK/ 用户安装(ApiDemo

据我所知,有几种android反病毒软件,例如:

  • 移动平均
  • AVAST软件
  • McAfee(英特尔安全)
  • 诺顿移动
  • 卡巴斯基Lаb
等等

每一个都提供了扫描已安装的android应用程序的病毒等功能(即使是没有根目录的android设备)

证明上述内容的屏幕截图如下:

但据我所知,安装在未安装Android设备上的应用程序,一个应用程序无法访问另一个已安装的应用程序及其相关文件,例如:

  • 预安装(即摄像头、日历、浏览器等)存储在/system/app中的APK/

  • 用户安装(ApiDemo、Any.do等)存储在/data/app中的APK/

  • Package Manager创建数据目录/data/data//以存储数据库、共享首选项、本机库和缓存数据


那么像上面描述的那些应用程序是如何以编程方式扫描应用程序及其相关文件的呢?如上所述(无根访问)

它不会像人们想象的那样访问文件,它不会打开、使用它们,也不会以任何方式扫描文件的数据。相反,它只是检查文件名

对于AVG,我们可以这样说:AVG使用一个最新的过去和现在的病毒数据库。它扫描手机上的文件名,对照其数据库进行检查,然后在名称与数据库中记录的名称匹配时向您发出警报。因此,它并没有违反安卓制定的规则

他们如何获得这些病毒的信息?你很幸运,你可能不是第一个得到它的人。当发现新病毒时,它会被报告,然后AVG将其添加到数据库中


因此,遗憾的是,您无法以您所描述的方式以编程方式访问其他文件。但是,您可以访问目录中的文件名,并使用这些文件名检查数据库中是否存在病毒和其他恶意软件。

我不确定反病毒软件的真正用途,但我知道一些无需root访问即可访问用户安装APK文件的方法

如果仔细检查/data/app,您会发现虽然/data/app的访问权限是771(rwxrwx--x),但是/data/app下的APK文件的权限是644(rw-r--r--),这意味着您可以在没有根访问权限的情况下读取这些APK文件

一种可接受的方式可能是这样的:
1.使用shell命令“pm list packages”或PackageManager.getInstalledPackages()获取已安装应用程序的软件包名称。
2.尝试读取/data/app中的文件(com.aaa.bbb-N.apk,N是一个数字,取决于应用程序的安装时间,你可以猜到)

提示1:/system/app的访问权限是644(rw-r--r--),这意味着您可以直接“ls”它。
提示2:在正常情况下,如果没有root权限,则无法在/data/data下读取/写入文件。

如果没有root权限,我怀疑他们能否扫描apk本身。他们可能会扫描应用程序的缓存,检查其行为是否可疑。不过,你名单上的一些人确实做了全面扫描;我的AVG拥有afaik的根权限。