一种基于安卓系统的设备的动态病毒检测方法和装置制造方法

文档序号:6518756阅读:248来源:国知局
一种基于安卓系统的设备的动态病毒检测方法和装置制造方法
【专利摘要】本发明涉及信息安全领域,提出了一种基于安卓系统的设备的动态病毒检测方法。该方法包括,获取需要进行病毒检测的正在运行的目标进程;将所述目标进程所加载的动态库中指定的原始API函数重定向为拦截程序中的API函数;检测所述目标进程的可疑行为。本发明通过在Android底层库进行拦截排查,可以更有效地评估应用程序的更深层次的可疑行为,是一种便捷高效的病毒检测方法。
【专利说明】一种基于安卓系统的设备的动态病毒检测方法和装置【技术领域】[0001]本发明涉及信息安全领域,特别地,涉及一种基于安卓系统的设备的动态病毒检测方法。
【背景技术】[0002]目前,Android系统是移动终端领域最主流的操作系统,用户对系统的安全性要求越来越高。对恶意软件的检测方法,目前主要有两种,一种是静态检测,通过对APK(Android Package)安装包反编译后的JAVA字节码与病毒的特征码比较进行分析,通过对应用程序申请的权限进行分析;另外一种是动态检测,在程序运行的时候检测程序是否有恶意的行为,主要是检测程序运行时是否释放了可疑的特征码,利用Android框架层的API(Application Program Interface)判断应用程序运行过程中是否申请了特定的权限。[0003]恶意软件的静态检测方法主要是将APK安装包反编译出JAVA字节码,与病毒的特征码比较,匹配则认为程序被插入恶意代码,另外通过分析应用程序申请的权限内容来判定程序是否潜在可疑的行为。这种方法要求病毒的特征码的覆盖面要广,以便更有效的检测到病毒,但是实际应用中,病毒的繁衍速度往往比已提取的病毒库要快,而且大多的应用程序都会申请很多看上去并不需要的权限,静态申请了并不代表就会去使用,一刀切容易误判,如腾讯QQ申请了发短信的权限,实际上并不会发送短信或者只能在特定情况下发送短信,不能因此就判定腾讯QQ程序就是病毒。[0004]恶意软件的动态检测方法主要是在应用程序运行过程中检测程序是否包括可疑的特征码,是否申请了不应申请的权限。相比静态检测,该方法能更有效检测到应用程序申请权限的行为,但是也依赖病毒库的特征码信息,并且基于Android框架层的API进行检测,有些病毒利用底层接口入侵,该方法根本无法检测到。

【发明内容】
[0005]为了有效地检测利用底层库接口入侵的病毒程序,我们提出一种基于安卓系统的设备的动态病毒检测方法,其特征在于,包括以下步骤:
获取需要进行病毒检测的正在运行的目标进程;
将所述目标进程所加载的动态库中指定的原始API函数重定向为拦截程序中的API函
数;
检测所述目标进程的可疑行为。[0006]优选地,还包括:
将引导程序写入到所述目标进程的内存中,通过所述引导程序来启动一拦截程序实现所述原始API函数的重定向。[0007]优选地,所述通过所述引导程序来启动一拦截程序实现所述原始API函数的重定向的步骤包括:
在所述目标进程空间中分配一块指定的内存,并置为可读写可执行; 将所述拦截程序编译的动态库加载到所述目标进程空间中;
调用所述拦截程序的入口函数来启动所述重定向。
[0008]优选地,
所述引导程序通过获取所述目标进程空间动态库的内存分配函数地址来在所述目标进程空间中分配所述指定的内存。
[0009]优选地,在所述将引导程序写入到所述目标进程的内存中的步骤之前,还包括: 调试所述目标进程;
保存所述目标进程运行环境;
在所述目标进程中分配一段内存空间为可读写。
[0010]优选地,所述重定向过程包括:
利用目标进程空间中dlopen函数打开所述目标进程空间指定的动态库,枚举动态库函数表,获取该动态库的指定的API函数地址;
利用目标进程空间中dlopen函数打开拦截程序的动态库,获取所述API函数地址对应的新API函数地址;
去掉所述指定的动态库所在的内存写保护;
将所述获取的API函数地址替换为所述新API函数地址。
[0011]优选地,通过PC将所述引导程序和拦截程序注入到所述设备中,并启动所述引导程序。
[0012]优选地,所述PC通过安卓调试连接桥将所述引导程序和拦截程序注入到所述设备中。
[0013]优选地,所述通过PC将所述引导程序和拦截程序注入到所述设备中的步骤,包括:
配置目标进程名称;
配置目标动态库路径;
配置拦截程序入口函数;
将用于所述设备的所述弓I导程序和拦截程序推送到所述设备。
[0014]优选地,所述引导程序为可执行程序,所述拦截程序为动态库。
[0015]优选地,还包括,检测到所述目标进程的可疑行为后,通知用户对该可疑行为进行处理。
[0016]优选地,检测到所述目标进程的可疑行为后,将该可疑行为记录到权限管理表,用户根据该权限管理表对该可疑行为进行处理。
[0017]本发明还提供了一种基于安卓系统的设备的动态病毒检测装置,其特征在于,包括以下单元:
获取单元,用于获取需要进行病毒检测的正在运行的目标进程;
重定向单元,用于将所述目标进程所加载的动态库中指定的原始API函数重定向为拦截程序中的API函数;
检测单元,用于检测所述目标进程的可疑行为。
[0018]优选地,还包括:
引导单元,用于将引导程序写入到所述目标进程的内存中,通过所述引导程序来启动一拦截程序实现所述原始API函数的重定向。
[0019]优选地,所述引导单元包括:
内存分配单元,用于在所述目标进程空间中分配一块指定的内存,并置为可读写可执
行;
动态库加载单元,用于将所述拦截程序编译的动态库加载到所述目标进程空间中;
入口函数启动单元,用于调用所述拦截程序的入口函数来启动所述重定向。
[0020]优选地,
所述引导单元通过获取所述目标进程空间动态库的内存分配函数地址来在所述目标进程空间中分配所述指定的内存。
[0021]优选地,还包括:
调试单元,用于调试所述目标进程;
运行环境保存单元,用于保存所述目标进程运行环境;
内存空间分配单元,用于在所述目标进程中分配一段内存空间为可读写。
[0022]优选地,所述重定向单元包括:
目标进程动态库开启单元,用于利用目标进程空间中dlopen函数打开所述目标进程空间指定的动态库,枚举动态库函数表,获取该动态库的指定的API函数地址;
拦截程序动态库开启单元,用于利用目标进程空间中dlopen函数打开拦截程序的动态库,获取所述API函数地址对应的新API函数地址;
内存写保护去除单元,用于去掉所述指定的动态库所在的内存写保护;
替换单元,用于将所述获取的API函数地址替换为所述新API函数地址。
[0023]优选地,还包括:PC端注入单元,用于通过PC将所述引导程序和拦截程序注入到所述设备中,并启动所述弓I导程序。
[0024]优选地,所述PC端注入单元为安卓调试连接桥。
[0025]优选地,所述PC注入单元包括:
名称配置单元,用于配置目标进程名称;
路径配置单元,用于配置目标动态库路径;
入口函数配置单元,用于配置拦截程序入口函数;
推送单元,用于将用于所述设备的所述弓I导程序和拦截程序推送到所述设备。
[0026]优选地,所述引导程序为可执行程序,所述拦截程序为动态库。
[0027]优选地,还包括,通知单元,用户当检测到所述目标进程的可疑行为后,通知用户对该可疑行为进行处理。
[0028]优选地,所述通知单元检测到所述目标进程的可疑行为后,将该可疑行为记录到权限管理表,用户根据该权限管理表对该可疑行为进行处理。
[0029]
本发明提供的Android底层库代码的动态病毒检测方法,不完全依赖病毒库的特征码和用户权限检测,比之静待检测更快捷准确;另外,本发明通过在Android底层库进行拦截排查,比之普通动态检测方法的框架层检测,可以更有效地评估应用程序的可疑行为,尤其是更深层次的可疑行为,是一种便捷高效的病毒检测方法。
[0030]【专利附图】

【附图说明】 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是Android手机端和PC端的功能架构图;
图2是目标进程动态病毒检测方法流程图;
图3是引导模块加载拦截模块的流程图;
图4是重定向过程流程图;
图5是检测过程流程图。
【具体实施方式】
[0031]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0032]本发明实施例提供的基于安卓系统的设备的病毒动态检测方法,参见图1,检测过程主要由引导模块101、拦截模块102和权限管理模块103来执行。引导模块101编译成可执行程序,拦截模块102编译成动态库,权限管理模块103为上层应用APK。引导模块101在不中断目标进程的前提下,将拦截模块102导入到目标进程中,并启动拦截模块102 ;拦截模块102则动态地将目标进程所加载的动态库中指定的原始API重定向为拦截模块102中的API,从而改变原有API流程并检测可疑行为;当拦截模块102检测到了可疑行为,通过socket与权限管理模块103通信;权限管理模块103接收来自拦截模块102的可疑行为通知后,可由用户进行授权或者拒绝授权。
[0033]上述动态病毒检测程序可以通过PC端注入,PC端适用于Windows系统和Linux系统,注入过程主要由配置模块104和加载模块105来执行,配置模块104负责指定的目标进程名称、目标动态库路径、拦截模块入口函数;加载模块105负责将Android端的引导模块101编译的可执行程序、拦截模块102编译的动态库以及权限管理模块103的应用包推送到Android设备,可以使用Android Debug Bridge连接桥来实现模块的推送,将上述模块推送到Android设备后,启动Android端的引导模块101来执行病毒的检测过程。
[0034]
参见图2,图3和图4,病毒检测的具体处理过程如下:
S201、获取需要进行病毒检测的正在运行的目标进程;
在安卓系统出现异常,或者需要定期对系统进行病毒检测时,系统一般会获取一些敏感程序和函数进行主要排查。引导模块负责主要的加载工作,首先,系统需要获取需要进行病毒检测的目标进程,将正在运行的目标进程挂起并进行调试,保存其运行环境,以便将病毒检测程序加载到该目标进程中。
[0035]S202、将所述目标进程所加载的动态库中指定的原始API函数重定向为拦截程序中的API函数;
目标进程挂起后,引导模块继续执行将执行重定向的拦截模块导入。参见图3,首先,引导模块获取目标进程空间动态库libc.so的mmap内存分配函数地址,然后在目标进程空间中分配一块指定的内存,并置为可读写可执行;获取目标进程空间可执行程序linker的dlopen, dlsym函数地址;将拦截模块编译的动态库加载到目标进程空间中;调用拦截模块中的入口函数以便实现API函数的重定向,之后,恢复目标进程运行。
[0036]在引导模块启动了拦截模块中的入口函数之后,拦截模块继续执行来实现API重定向,参见图4,具体过程如下:
1.利用目标进程空间中dlopen函数打开目标进程空间指定的动态库,枚举动态库函数表,获取该动态库的指定的函数地址;
2.利用目标进程空间中dlopen函数打开拦截模块的动态库,获取上述指定的函数地址对应的新API函数地址;
3.去掉上述指定的动态库所在的内存写保护;
4.将上述获取的函数地址替换为上述新的API函数地址。
[0037]S203、检测所述目标进程的可疑行为 。
[0038]重定向实现后,拦截模块继续负责病毒的检测操作,病毒的检测主要依靠重定向过程中使用的新API函数,新API函数的功能可以设计为,先检测目标进程是否有操作后台数据库的异常动作,然后再重新调用原有函数。这样设计,可以在异常行为检测完后,不影响原函数的运行和函数功能的实现。
[0039]参见图5,当检测到目标进程的可疑行为时,通过socket通知权限管理模块,权限管理模块发消息通知用户,由用户来判断该行为是否是合法行为,如果用户确定该行为是用户自己的操作,或是其他人的合法操作,则可以选择允许该操作,此时,目标进程的检测操作结束,然后继续调用原函数,实现原函数的功能;如果用户确定该行为不是自己的发出的,或是其他非法的操作,则可以阻止该操作。
[0040]病毒的检测主要依靠重定向过程中使用的新API函数来实现,新的API函数可根据具体的检测方法和用途来编写,例如:如果需要检测目标进程是否有操作数据库的行为,包括读取短信、通话记录等,那么可以重定向动态库libsqlite.so中的原有API函数sqlite3_open 为新 API 函数 hook_sqlite3_open,重定向原有 API 函数 sqlite3_exec 为新API 函数 hook_sqlite3_exec。
[0041]原有sqlite3_open函数的功能是打开一个数据库,该函数原型为:
【权利要求】
1.一种基于安卓系统的设备的动态病毒检测方法,其特征在于,包括以下步骤: 获取需要进行病毒检测的正在运行的目标进程; 将所述目标进程所加载的动态库中指定的原始API函数重定向为拦截程序中的API函数; 检测所述目标进程的可疑行为。
2.根据权利要求1的方法,其特征在于,还包括: 将引导程序写入到所述目标进程的内存中,通过所述引导程序来启动一拦截程序实现所述原始API函数的重定向。
3.根据权利要求2的方法,其特征在于:所述通过所述引导程序来启动一拦截程序实现所述原始API函数的重定向的步骤包括: 在所述目标进程空间中分配一块指定的内存,并置为可读写可执行; 将所述拦截程序编译的动态库加载到所述目标进程空间中; 调用所述拦截程序的入口函数来启动所述重定向。
4.根据权利要求3的方法,其特征在于: 所述引导程序通过获取所述目标进程空间动态库的内存分配函数地址来在所述目标进程空间中分配所述指定的内存。
5.根据权利要求2所述的方法,其特征在于:在所述将引导程序写入到所述目标进程的内存中的步骤之前,还包括: 调试所述目标进程; 保存所述目标进程运行环境; 在所述目标进程中分配一段内存空间为可读写。
6.根据权利要求1所述的方法,其特征在于:所述重定向过程包括: 利用目标进程空间中dlopen函数打开所述目标进程空间指定的动态库,枚举动态库函数表,获取该动态库的指定的API函数地址; 利用目标进程空间中dlopen函数打开拦截程序的动态库,获取所述API函数地址对应的新API函数地址; 去掉所述指定的动态库所在的内存写保护; 将所述获取的API函数地址替换为所述新API函数地址。
7.根据权利要求2所述的方法,其特征在于:通过PC将所述引导程序和拦截程序注入到所述设备中,并启动所述引导程序。
8.根据权利要求7所述的方法,其特征在于:所述PC通过安卓调试连接桥将所述引导程序和拦截程序注入到所述设备中。
9.根据权利要求7或8所述的方法,其特征在于:所述通过PC将所述引导程序和拦截程序注入到所述设备中的步骤,包括: 配置目标进程名称; 配置目标动态库路径; 配置拦截程序入口函数; 将用于所述设备的所述引导程序和拦截程序推送到所述设备。
10.根据权利要求2所述的方法,其特征在于:所述引导程序为可执行程序,所述拦截程序为动态库。
11.根据权利要求1所述的方法,其特征在于还包括,检测到所述目标进程的可疑行为后,通知用户对该可疑行为进行处理。
12.根据权利要求11所述的方法,其特征在于,检测到所述目标进程的可疑行为后,将该可疑行为记录到权限管理表,用户根据该权限管理表对该可疑行为进行处理。
13.一种基于安卓系统的设备的动态病毒检测装置,其特征在于,包括以下单元: 获取单元,用于获取需要进行病毒检测的正在运行的目标进程; 重定向单元,用于将所述目标进程所加载的动态库中指定的原始API函数重定向为拦截程序中的API函数; 检测单元,用于检测所述目标进程的可疑行为。
14.根据权利要求13的装置,其特征在于,还包括: 引导单元,用于将引导程序写入到所述目标进程的内存中,通过所述引导程序来启动一拦截程序实现所述原始API函数的重定向。
15.根据权利要求14的装置,其特征在于:所述引导单元包括: 内存分配单元,用于在所述目标进程空间中分配一块指定的内存,并置为可读写可执行; 动态库加载单元,用于将`所述拦截程序编译的动态库加载到所述目标进程空间中; 入口函数启动单元,用于调用所述拦截程序的入口函数来启动所述重定向。
16.根据权利要求14的装置,其特征在于: 所述引导单元通过获取所述目标进程空间动态库的内存分配函数地址来在所述目标进程空间中分配所述指定的内存。
17.根据权利要求14所述的装置,其特征在于,还包括: 调试单元,用于调试所述目标进程; 运行环境保存单元,用于保存所述目标进程运行环境; 内存空间分配单元,用于在所述目标进程中分配一段内存空间为可读写。
18.根据权利要求13所述的装置,其特征在于:所述重定向单元包括: 目标进程动态库开启单元,用于利用目标进程空间中dlopen函数打开所述目标进程空间指定的动态库,枚举动态库函数表,获取该动态库的指定的API函数地址; 拦截程序动态库开启单元,用于利用目标进程空间中dlopen函数打开拦截程序的动态库,获取所述API函数地址对应的新API函数地址; 内存写保护去除单元,用于去掉所述指定的动态库所在的内存写保护; 替换单元,用于将所述获取的API函数地址替换为所述新API函数地址。
19.根据权利要求14所述的装置,其特征在于,还包括:PC端注入单元,用于通过PC将所述引导程序和拦截程序注入到所述设备中,并启动所述引导程序。
20.根据权利要求19所述的装置,其特征在于:所述PC端注入单元为安卓调试连接桥。
21.根据权利要求19、20所述的装置,其特征在于:所述PC注入单元包括: 名称配置单元,用于配置目标进程名称; 路径配置单元,用于配置目标动态库路径;入口函数配置单元,用于配置拦截程序入口函数; 推送单元,用于将用于所述设备的所述引导程序和拦截程序推送到所述设备。
22.根据权利要求14所述的装置,其特征在于:所述引导程序为可执行程序,所述拦截程序为动态库。
23.根据权利要求13所述的装置,其特征在于还包括,通知单元,用户当检测到所述目标进程的可疑行为后,通知用户对该可疑行为进行处理。
24.根据权利要求23所述的装置,其特征在于,所述通知单元检测到所述目标进程的可疑行为后,将该可疑行为记录到权限管理表,用户根据该权限管理表对该可疑行为进行处理。`
【文档编号】G06F9/44GK103559446SQ201310562160
【公开日】2014年2月5日 申请日期:2013年11月13日 优先权日:2013年11月13日
【发明者】魏丽珍, 吴鸿伟 申请人:厦门市美亚柏科信息股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1