本文研究的是*管家2.8—3.6版本的杀毒模块功能实现。众所周知,杀毒软件查杀病毒分为主动查杀和被动查杀两种方式。*管家的主动查杀包括快速查收和全盘查杀,而快速查杀和全盘查杀都使用了本地查杀技术和云查杀技术。
快速查杀
快速查杀首先获取系统安装的所有应用。创建"/data/data/com.anguanjia.safe/classes.dex"文件,将待扫描的apk解压,获取包中的classes.dex文件内容写入到"/data/data/com.anguanjia.safe/classes.dex"文件中。
然后计算"/data/data/com.anguanjia.safe/classes.dex"文件的md5值,完成后删除该文件。
将得到的md5再次取md5值,然后与本地数据库进行匹配,具体检测过程如下图所示:
上图中的getMyParam11函数实质就是对service字符串拼接“0x400-service字符串长度”长度的0后进行base64编码:
下图为扫描应用的service时监控到的log输出:
下图为检测到病毒时(l>0)更新appdata数据库的newapp表代码:
云查杀
在云查杀时,获取系统安装应用的包名、应用名称、证书签发者、证书序列号、classes.dex文件的md5值、是否系统应用等信息上传到http://av.aqgj.cn/p/a1.php。
以下为云查杀时抓包获取的发送给服务器端的数据:
服务器端以xml格式返回检测到的恶意应用信息,如下图所示:
然后将检测到的恶意应用包名、类型以及危险级别存入trojankill数据库的trojan_kill_result表中:
将查杀时间保存到"/data/data/shared_prefs/com.anguanjia.safe_preferences.xml"文件的"last_kill_date"字段中。然后将扫描结果、扫描类型和扫描到的恶意应用包名保存入ScanLogDb数据库的"ScanLogDb"表中:
全盘查杀
全盘扫描分两个部分进行:
(1)有sd卡挂载,则扫描sd卡所有文件,检测后缀为“apk”或者“APK”的所有文件,其检测步骤与快速查杀一样。
判断文件后缀:
(2)如果没有sd卡挂载,则扫描系统安装的所有应用。检测步骤与快速查杀一样。
被动查杀
被动查杀是在监控到应用被安装时进行病毒检测。首先,杀软会判断当前网络连接类型:
(1)如果没有连接网络或者连接的是非wifi网络,则按照快速查杀流程,查询本地数据库进行恶意应用的检测。
(2)如果是wifi网络,则将正在被安装应用的包名和md5值发送给服务器http://apk.scapi.aqgj.cn/xcloud/cloud.php,相关代码如下:
实际抓包获取到的数据如下图所示:
服务器返回应用的恶意行为信息、危险级别、md5值、包名等信息。下图为检测到恶意应用时服务器返回的信息:
下图为正常应用服务器返回的信息:
如果检测到恶意应用,则将恶意应用的包名、人气、评分、安全级别、恶意行为、评论信息等数据更新到appdata数据库的newapp表中。同时将病毒包名写入userhabit.xml文件中。
同时弹出安全提示窗口,要求用户确认是否删除。
并在通知栏弹出通知信息。