CN103679032B - 防御恶意软件的方法和装置 - Google Patents
防御恶意软件的方法和装置 Download PDFInfo
- Publication number
- CN103679032B CN103679032B CN201310685294.1A CN201310685294A CN103679032B CN 103679032 B CN103679032 B CN 103679032B CN 201310685294 A CN201310685294 A CN 201310685294A CN 103679032 B CN103679032 B CN 103679032B
- Authority
- CN
- China
- Prior art keywords
- address
- return address
- parameter
- malware
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 91
- 230000006870 function Effects 0.000 claims abstract description 163
- 230000008569 process Effects 0.000 claims abstract description 47
- 230000005059 dormancy Effects 0.000 claims description 27
- 230000007958 sleep Effects 0.000 abstract description 2
- 230000008859 change Effects 0.000 description 8
- 230000004048 modification Effects 0.000 description 7
- 238000012986 modification Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- ZXQYGBMAQZUVMI-GCMPRSNUSA-N gamma-cyhalothrin Chemical compound CC1(C)[C@@H](\C=C(/Cl)C(F)(F)F)[C@H]1C(=O)O[C@H](C#N)C1=CC=CC(OC=2C=CC=CC=2)=C1 ZXQYGBMAQZUVMI-GCMPRSNUSA-N 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000006386 memory function Effects 0.000 description 4
- 241000700605 Viruses Species 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000003612 virological effect Effects 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 241000282485 Vulpes vulpes Species 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000001035 drying Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 235000008954 quail grass Nutrition 0.000 description 1
- 238000011897 real-time detection Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供了一种防御恶意软件的方法和装置。该方法包括:对用于修改内存的指定系统函数进行实时的检测,当指定系统函数被调用时,读取与指定系统函数对应的栈中的返回地址,判断返回地址是否指向恶意软件对应的模块,当返回地址指向恶意软件对应的模块时,将返回地址修改为休眠函数的地址。本发明可以避免在浏览器进程中必需的挂钩点(例如主页锁定功能相关的挂钩点)被恶意软件或竞争对手破坏,避免被网页木马或其他类型的恶意软件绕过安全软件防护,保证主页锁定功能的正常使用,提高了浏览器的安全性,防止用户在浏览器中遭遇钓鱼网站或挂马网站。
Description
技术领域
本发明涉及互联网技术领域,特别是涉及一种防御恶意软件的方法和装置。
背景技术
浏览器首页一直是木马病毒、各大安全厂商的必争之地,主页锁定功能能保护用户的IE首页不被恶意软件、病毒木马篡改,能够提高用户体验感知。
目前的安全软件中,主页锁定功能主要是通过挂钩功能点函数来实现。例如网盾主要用于保护微软的IE浏览器,会在IE浏览器进程中挂钩某些功能点函数,做拦截过滤,根据特定的规则选择阻止或者放行,通过这种手段来保护IE的安全。其中,网盾产品中的“主页锁定”的功能,也是通过“挂钩系统API函数”来实现安全防护的。
然而很多恶意软件、流氓插件、第三方程序、竞争对手,会不择手段的干扰甚至破坏安全产品的功能点。其一般利用的技术手段为摘除安全产品对功能函数的挂钩点。
仍以网盾为例,恶意程序用到的技术手段是通过在IE浏览器进程中创建一个工作线程,在其中循环定时的检测XX网盾的“挂钩过滤点”,一旦发现就摘除掉,这样导致网盾不能正常接受不到系统事件,无法正常的工作,从而导致防护功能失效。
因此,目前的安全防护产品中存在的缺陷就是,对于功能函数的挂钩点容易被恶意软件获取并摘除,使得安全产品的监控失效,导致安全性失效。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的适于防御恶意软件的方法和相应地装置。
依据本发明的一个方面,提供一种防御恶意软件的方法,包括:
对用于在内存中修改数据的指定系统函数进行实时的检测;
当指定系统函数被调用时,读取与指定系统函数对应的栈中的返回地址;
判断返回地址是否指向恶意软件对应的模块;
当返回地址指向恶意软件对应的模块时,将返回地址修改为休眠函数的地址。
可选地,在读取与指定系统函数对应的栈中的返回地址之前,还包括:
读取与指定系统函数对应的栈中的参数,并判断指定系统函数对应的栈中的参数是否为预设参数;
判断返回地址是否指向恶意软件对应的模块,包括:
枚举被保护进程所加载的所有模块的基址;
根据基址依次检测被保护进程所加载的所有模块中是否包含预设的恶意代码特征;
若包含预设的恶意代码特征,则返回地址指向恶意软件对应的模块;
若不包含预设的恶意代码特征,则返回地址未指向恶意软件对应的模块。
可选地,预设参数包括第一参数和/或第二参数;
第一参数为当前操作中被保护进程的进程标识;
第二参数为预设的挂钩过滤点的地址。
可选地,判断返回地址是否指向恶意软件对应的模块,包括:
枚举被保护进程所加载的所有模块的基址,依次判断返回地址所属的模块是否为恶意软件对应的模块。
可选地,读取与指定系统函数对应的栈中的返回地址,包括:
获取当前的扩展基址指针寄存器EBP中保存的地址,并将该地址增加预设数值后得到与指定系统函数对应的栈中的返回地址。
可选地,将返回地址修改为预设地址,包括:
将当前的系统寄存器EIP中的地址设置为预设地址;
将返回地址弹栈到系统寄存器EIP中。
可选地,在将返回地址修改为休眠函数的地址之后,还包括:
调用休眠函数。
可选地,指定系统函数为kernel32!WriteProcessMemory。
依据本发明的一个方面,还提供了一种防御恶意软件的装置,包括:
函数检测模块,配置为对用于在内存中修改数据的指定系统函数进行实时的检测;
地址读取模块,配置为当指定系统函数被调用时,读取与指定系统函数对应的栈中的返回地址;
第一判断模块,配置为判断返回地址是否指向恶意软件对应的模块;
地址修改模块,配置为当返回地址指向恶意软件对应的模块时,将返回地址修改为休眠函数的地址。
可选地,该装置还包括:
第二判断模块,配置为读取与指定系统函数对应的栈中的参数,并判断指定系统函数对应的栈中的参数是否为预设参数;
第一判断模块还配置为当指定系统函数对应的栈中的参数为预设参数时,判断返回地址是否指向恶意软件对应的模块。
可选地,预设参数包括第一参数和/或第二参数;
第一参数为当前操作中被保护进程的进程标识;
第二参数为预设的挂钩过滤点的地址。
可选地,第一判断模块配置为按照如下方式判断所述返回地址是否指向恶意软件对应的模块:
枚举所述被保护进程所加载的所有模块的基址;
根据所述基址依次检测所述被保护进程所加载的所有模块中是否包含预设的恶意代码特征;
若包含预设的恶意代码特征,则所述返回地址指向恶意软件对应的模块;
若不包含预设的恶意代码特征,则所述返回地址未指向恶意软件对应的模块。
可选地,地址读取模块配置为获取当前的扩展基址指针寄存器EBP中保存的地址,并将该地址增加预设数值后得到与指定系统函数对应的栈中的返回地址。
可选地,地址修改模块配置为按照如下方式将返回地址修改为预设地址:
将当前的系统寄存器EIP中的地址设置为预设地址;
将返回地址弹栈到系统寄存器EIP中。
可选地,该装置还包括:
函数调用模块,配置为调用休眠函数。
可选地,指定系统函数为kernel32!WriteProcessMemory。
本发明提供了一种防御恶意软件的方法和装置,通过对用于修改内存的指定系统函数进行实时的检测,当指定系统函数被调用时,读取与指定系统函数对应的栈中的返回地址,判断返回地址是否指向恶意软件对应的模块,当返回地址指向恶意软件对应的模块时,将返回地址修改为休眠函数的地址,可以避免在浏览器进程中必需的挂钩点(例如主页锁定功能相关的挂钩点)被恶意软件或竞争对手破坏,避免被网页木马或其他类型的恶意软件绕过安全软件防护,保证主页锁定功能的正常使用,提高了浏览器的安全性,防止用户在浏览器中遭遇钓鱼网站或挂马网站。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是根据本发明一个实施例的一种防御恶意软件的方法流程图;
图2是根据本发明一个实施例的一种防御恶意软件的具体方法流程图;
图3是根据本发明一个实施例的系统栈与过程调用的示意图;
图4是根据本发明一个实施例的恶意程序调用kernel32!WriteProcessMemory函数时,对应的栈的结构示意图;
图5是根据本发明一个实施例的将返回地址中的地址修改为指定的地址B后的示意图;
图6是根据本发明一个实施例的一种防御恶意软件的装置结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应该被这里阐述的实施例所限制。相反,提供这些实施例是为了能够透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
为了使本发明的方法更便于理解,本申请首先对病毒和恶意软件篡改浏览器首页的过程做简要介绍。本发明中的浏览器包括:windows的IE(Internet Explorer)浏览器、360安全浏览器、火狐浏览器等。本申请以windows的IE (Internet Explorer)浏览器为例进行介绍。
IE的配置(如:IE首页地址、安全级别、缓存文件存放路径等)是存储在Windows的注册表中的。在程序开发过程中,病毒、恶意软件、还有网络安全软件容易通过修改Windows的注册表来实现修改IE的首页。通常使用Windows的注册表应用程序接口函数(例如:RegSetValue)来指定注册表的主键、子键、修改的项以及值等信息。当检测到客户端启动IE或者点击IE工具栏的“首页”按钮时,浏览器的进程(如iexplore.exe)会调用系统的API去查询注册表中浏览器首页对应的键值,然后连接得到的键值对应的网站页面,并显示该页面。此时跳转到的网站页面可能是病毒或者恶意软件篡改后的页面。
但是如果不能有效的锁定首页,就有可能被恶意网页劫持,使得用户进入虚假或恶意网站,造成用户被钓鱼网站或挂马网站盗取密码、隐私信息或损失财产等。
本发明实施例提供了一种防御恶意软件的方法。该方法对防御恶意软件的装置进行了改进。本实施例中防御恶意软件的装置可以安装在用户客户端上,例如,客户端可以为PC(Personal Computer,个人计算机),手机,手持电脑等用户终端,防御恶意软件的装置可以是安全卫士,或其他任何类型的安全软件。
图1是根据本发明一个实施例的一种防御恶意软件的方法流程图,该方法包括步骤S102至S108。
S102,对用于在内存中修改数据的指定系统函数进行实时的检测。
S104,当指定系统函数被调用时,读取与指定系统函数对应的栈中的返回
地址。
S106,判断返回地址是否指向恶意软件对应的模块。
S108,当返回地址指向恶意软件对应的模块时,将返回地址修改为休眠函数的地址。
本发明实施例提供了一种防御恶意软件的方法,通过对用于修改内存的指定系统函数进行实时的检测,当指定系统函数被调用时,读取与指定系统函数对应的栈中的返回地址,判断返回地址是否指向恶意软件对应的模块,当返回地址指向恶意软件对应的模块时,将返回地址修改为休眠函数的地址,可以避免在浏览器进程中必需的挂钩点(例如主页锁定功能相关的挂钩点)被恶意软件或竞争对手破坏,避免被网页木马或其他类型的恶意软件绕过安全软件防护,保证主页锁定功能的正常使用,提高了浏览器的安全性,防止用户在浏览器中遭遇钓鱼网站或挂马网站。
实施例二
本实施例为上述实施例一的一种具体应用场景,通过本实施例,能够更加清楚、具体地阐述本发明所提供的方法。
图2是根据本发明一个实施例的一种防御恶意软件的具体方法流程图。该方法包括步骤S201至S206。
在本实施例中,以windows为例,以安全产品保护的程序为浏览器,对应的进程为hProcess,安全产品挂钩的功能点地址为lpBaseAddress为例。
而恶意程序xx.dll通过在它创建的线程中调用系统函数kernel32!WriteProcessMemory来摘除安全产品挂钩的功能点地址为lpBaseAddress为例进行说明。
在执行本实施例提供的方法时,首先通过步骤S201对用于在内存中修改数据的指定系统函数进行监测,并当指定函数被调用时,执行步骤S202。
具体地,该指定函数可以为kernel32!WriteProcessMemory函数。
需要说明的是,kernel32!WriteProcessMemory函数具有修改内存中数据的作用,恶意程序若摘除安全产品在系统中的挂钩点,则必须通过该函数对系统内存进行数据修改,因此,我们选择对该函数进行监测,可确定是否有恶意程序对安全产品的挂钩点进行摘除操作。
S202,读取与指定系统函数对应的栈中的参数。
一般而言,一个由C/C++编译的程序占用的内存分为以下几个部分:
(1)栈区(stack)——由编译器自动分配释放,存放函数的参数值,局部变量的值等。
(2)堆区(heap)——由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。
(3)全局区(静态区)(static)——全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
(4)文字常量区——常量字符串就是放在这里的。程序结束后由系统释放。
(5)程序代码区——存放函数体的二进制代码。
而在本发明中,通过对上述“栈”进行劫持来消除恶意软件对挂钩点的摘除行为,也即对上述“栈”进行监测和修改,使其恢复到可支持安全产品正常的运行。
“栈”在Windows下是向低地址扩展的数据结构,是一块连续的内存的区域,由系统自动分配。在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。
为了更加清楚地描述上述“栈”,本实施例还提供了图3,展示了系统栈与过程调用的示意图。其中,图3左侧为可执行代码,右侧为与该代码对应的栈。
在图3中,func_B、func_A和main函数的参数被分别存在与其对应的栈帧中,而在每个函数的参数的底部均包括有返回地址,以使得编译器在读取参数后,能够正确的返回到代码的正确位置,以正确的执行下去。
在本实施例中,需要获取的与指定函数对应的栈中的参数包括第一参数和第二参数。
在读取了与指定系统函数对应的栈中的参数之后,继续执行步骤S203,判断指定系统函数对应的栈中的参数是否为预设参数。若是,执行步骤S204,若不是,则返回步骤S201。
其中,在本实施例中预设参数包括第一参数和第二参数;
第一参数为当前操作中被保护进程的进程标识;
例如,在本实施例中为欲保护的程序为浏览器,则第一参数为进程hProcess。
第二参数为预设的挂钩过滤点的地址;
例如,在本实施例中,安全产品在保护浏览器时挂钩点的地址为lpBaseAddress。
S204,读取与指定系统函数对应的栈中的返回地址。
可选地,步骤S204读取与指定系统函数对应的栈中的返回地址的方式包括:获取当前的EBP(Extended Base Pointer,扩展基址指针寄存器)中保存的地址,并将该地址加四得到与所述指定系统函数对应的栈中的返回地址。
其中,EBP中用于存放一个指针,该指针指向系统栈最上面一个栈帧的栈顶,即整个系统栈的栈顶。
需要说明的是,该“返回地址”指明了上层调用者,本发明可通过判断这个地址是否位于该恶意插件对应模块的内部,来判断是否有恶意软件对安全产品的挂钩点进行摘除。
为了更加清楚地描述栈结构,本实施例还提供了图4,展示了恶意程序调用kernel32!WriteProcessMemory函数时,对应的栈的结构示意图。
其中,若恶意软件摘除安全软件的挂钩点,则会在返回地址写入恶意模块的地址,使安全软件的处理过程被劫持到恶意程序。
在读取了与指定系统函数对应的栈中的返回地址之后,继续执行步骤S205,判断上述返回地址是否指向恶意软件对应的模块。若是,则执行步骤S206,若不是,则返回步骤S201。
其中,判断上述返回地址是否指向恶意软件对应的模块,具体可以采用如下方式:
枚举被保护进程所加载的所有模块的基址,依次判断返回地址所属的模块是否为恶意软件对应的模块。
例如,在本实施例中,则枚举浏览器进程所加载的全部模块,并判断返回地址所指向的模块是否为恶意软件xx.dll的地址。
S206,将返回地址修改为休眠函数的地址。
在本实施例中,当发现返回地址被修改为指向恶意软件的模块时,则将返回地址修改为正确的休眠函数的地址,具体可以为:
将当前的EIP(Extended Instructions Pointer,指令寄存器)中的地址设置为休眠函数的地址(例如地址B);
将返回地址弹栈到EIP中。
其中,EIP中用于存放指针,指向下一条等待执行的指令地址。
本实施例还提供了图5,展示了将返回地址中的地址修改为指定的地址B后的示意图。
在本实施例中,作为一种优选的实施方式,地址B可以为kernel32!Sleep函数。
通过将返回地址指向休眠函数,可以使恶意软件进入休眠的状态,避免其再次对挂钩点进行摘除。
本发明实施例提供了一种防御恶意软件的方法,通过对用于修改内存的指定系统函数进行实时的检测,当指定系统函数被调用时,读取与指定系统函数对应的栈中的返回地址,判断返回地址是否指向恶意软件对应的模块,当返回地址指向恶意软件对应的模块时,将返回地址修改为休眠函数的地址,可以避免在浏览器进程中必需的挂钩点(例如主页锁定功能相关的挂钩点)被恶意软件或竞争对手破坏,避免被网页木马或其他类型的恶意软件绕过安全软件防护,保证主页锁定功能的正常使用,提高了浏览器的安全性,防止用户在浏览器中遭遇钓鱼网站或挂马网站。
实施例三
图6是本发明一个实施例的一种防御恶意软件的装置结构框图,该装置600包括:
函数检测模块610,配置为对用于在内存中修改数据的指定系统函数进行实时的检测;
地址读取模块620,配置为当指定系统函数被调用时,读取与指定系统函数对应的栈中的返回地址;
第一判断模块630,配置为判断返回地址是否指向恶意软件对应的模块;
地址修改模块640,配置为当返回地址指向恶意软件对应的模块时,将返回地址修改为休眠函数的地址。
可选地,该装置600还包括:
第二判断模块650,配置为读取与指定系统函数对应的栈中的参数,并判断指定系统函数对应的栈中的参数是否为预设参数;
第一判断模块630还配置为当指定系统函数对应的栈中的参数为预设参数时,判断返回地址是否指向恶意软件对应的模块。
可选地,预设参数包括第一参数和/或第二参数;
第一参数为当前操作中被保护进程的进程标识;
第二参数为预设的挂钩过滤点的地址。
可选地,第一判断模块630配置为按照如下方式判断返回地址是否指向恶意软件对应的模块:
枚举被保护进程所加载的所有模块的基址;
根据基址依次检测被保护进程所加载的所有模块中是否包含预设的恶意代码特征;
若包含预设的恶意代码特征,则返回地址指向恶意软件对应的模块;
若不包含预设的恶意代码特征,则返回地址未指向恶意软件对应的模块。
可选地,地址读取模块620配置为获取当前的扩展基址指针寄存器EBP中保存的地址,并将该地址增加预设数值后得到与指定系统函数对应的栈中的返回地址。
可选地,地址修改模块640配置为按照如下方式将返回地址修改为预设地址:
将当前的系统寄存器EIP中的地址设置为预设地址;
将返回地址弹栈到系统寄存器EIP中。
可选地,该装置600还包括:
函数调用模块660,配置为调用休眠函数。
可选地,指定系统函数为kernel32!WriteProcessMemory。
本发明实施例提供了一种防御恶意软件的装置,通过对用于修改内存的指定系统函数进行实时的检测,当指定系统函数被调用时,读取与指定系统函数对应的栈中的返回地址,判断返回地址是否指向恶意软件对应的模块,当返回地址指向恶意软件对应的模块时,将返回地址修改为休眠函数的地址,可以避免在浏览器进程中必需的挂钩点(例如主页锁定功能相关的挂钩点)被恶意软件或竞争对手破坏,避免被网页木马或其他类型的恶意软件绕过安全软件防护,保证主页锁定功能的正常使用,提高了浏览器的安全性,防止用户在浏览器中遭遇钓鱼网站或挂马网站。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的防御恶意软件的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
本实施例还披露了A1.一种防御恶意软件的方法,包括:对用于在内存中修改数据的指定系统函数进行实时的检测;当所述指定系统函数被调用时,读取与所述指定系统函数对应的栈中的返回地址;判断所述返回地址是否指向恶意软件对应的模块;当所述返回地址指向恶意软件对应的模块时,将所述返回地址修改为休眠函数的地址。
A2.根据A1所述的方法,其中,在所述读取与所述指定系统函数对应的栈中的返回地址之前,还包括:读取与所述指定系统函数对应的栈中的参数,并判断所述指定系统函数对应的栈中的参数是否为预设参数;所述判断所述返回地址是否指向恶意软件对应的模块,包括:当所述指定系统函数对应的栈中的参数为预设参数时,判断所述返回地址是否指向恶意软件对应的模块。
A3.根据A2所述的方法,其中,所述预设参数包括第一参数和/或第二参数;所述第一参数为当前操作中被保护进程的进程标识;所述第二参数为预设的挂钩过滤点的地址。
A4.根据A3所述的方法,其中,所述判断所述返回地址是否指向恶意软件对应的模块,包括:枚举所述被保护进程所加载的所有模块的基址;根据所述基址依次检测所述被保护进程所加载的所有模块中是否包含预设的恶意代码特征;若包含预设的恶意代码特征,则所述返回地址指向恶意软件对应的模块;若不包含预设的恶意代码特征,则所述返回地址未指向恶意软件对应的模块。
A5.根据A1至A4任一项所述的方法,其中,所述读取与所述指定系统函数对应的栈中的返回地址,包括:获取当前的扩展基址指针寄存器EBP中保存的地址,并将该地址增加预设数值后得到与所述指定系统函数对应的栈中的返回地址。
A6.根据A1至A5任一项所述的方法,其中,所述将所述返回地址修改为预设地址,包括:将当前的系统寄存器EIP中的地址设置为预设地址;将所述返回地址弹栈到所述系统寄存器EIP中。
A7.根据A1至A6任一项所述的方法,其中,在将所述返回地址修改为休眠函数的地址之后,还包括:调用所述休眠函数。
A8.根据A1至A7任一项所述的方法,其中,所述指定系统函数为kernel32!WriteProcessMemory。
本实施例还披露了B9.一种防御恶意软件的装置,包括:函数检测模块,配置为对用于在内存中修改数据的指定系统函数进行实时的检测;地址读取模块,配置为当所述指定系统函数被调用时,读取与所述指定系统函数对应的栈中的返回地址;第一判断模块,配置为判断所述返回地址是否指向恶意软件对应的模块;地址修改模块,配置为当所述返回地址指向恶意软件对应的模块时,将所述返回地址修改为休眠函数的地址。
B10.根据B9所述的装置,其中,所述装置还包括:第二判断模块,配置为读取与所述指定系统函数对应的栈中的参数,并判断所述指定系统函数对应的栈中的参数是否为预设参数;所述第一判断模块还配置为当所述指定系统函数对应的栈中的参数为预设参数时,判断所述返回地址是否指向恶意软件对应的模块。
B11.根据B10所述的装置,其中,所述预设参数包括第一参数和/或第二参数;所述第一参数为当前操作中被保护进程的进程标识;所述第二参数为预设的挂钩过滤点的地址。
B12.根据B11所述的装置,其中,所述第一判断模块配置为按照如下方式判断所述返回地址是否指向恶意软件对应的模块:枚举所述被保护进程所加载的所有模块的基址;根据所述基址依次检测所述被保护进程所加载的所有模块中是否包含预设的恶意代码特征;若包含预设的恶意代码特征,则所述返回地址指向恶意软件对应的模块;若不包含预设的恶意代码特征,则所述返回地址未指向恶意软件对应的模块。
B13.根据B9至B12任一项所述的装置,其中,所述地址读取模块配置为获取当前的扩展基址指针寄存器EBP中保存的地址,并将该地址增加预设数值后得到与所述指定系统函数对应的栈中的返回地址。
B14.根据B9至B13任一项所述的装置,其中,所述地址修改模块配置为按照如下方式将所述返回地址修改为预设地址:将当前的系统寄存器EIP中的地址设置为预设地址;将所述返回地址弹栈到所述系统寄存器EIP中。
B15.根据B9至B14任一项所述的装置,其中,所述装置还包括:函数调用模块,配置为调用所述休眠函数。
B16.根据B9至B15任一项所述的装置,其中,所述指定系统函数为kernel32!WriteProcessMemory。
Claims (16)
1.一种防御恶意软件的方法,包括:
对仅用于在内存中修改数据的指定系统函数进行实时的检测;
当所述指定系统函数被调用时,读取与所述指定系统函数对应的栈中的参数,并判断所述指定系统函数对应的栈中的参数是否为预设参数,以读取与所述指定系统函数对应的栈中的返回地址;
判断所述返回地址是否指向恶意软件对应的模块;
当所述返回地址指向恶意软件对应的模块时,将所述返回地址修改为休眠函数的地址。
2.根据权利要求1所述的方法,其中,所述判断所述返回地址是否指向恶意软件对应的模块,包括:
当所述指定系统函数对应的栈中的参数为预设参数时,判断所述返回地址是否指向恶意软件对应的模块。
3.根据权利要求2所述的方法,其中,所述预设参数包括第一参数和/或第二参数;
所述第一参数为当前操作中被保护进程的进程标识;
所述第二参数为预设的挂钩过滤点的地址。
4.根据权利要求3所述的方法,其中,所述判断所述返回地址是否指向恶意软件对应的模块,包括:
枚举所述被保护进程所加载的所有模块的基址;
根据所述基址依次检测所述被保护进程所加载的所有模块中是否包含预设的恶意代码特征;
若包含预设的恶意代码特征,则所述返回地址指向恶意软件对应的模块;
若不包含预设的恶意代码特征,则所述返回地址未指向恶意软件对应的模块。
5.根据权利要求1至4任一项所述的方法,其中,所述读取与所述指定系统函数对应的栈中的返回地址,包括:
获取当前的扩展基址指针寄存器EBP中保存的地址,并将该地址增加预设数值后得到与所述指定系统函数对应的栈中的返回地址。
6.根据权利要求1至4任一项所述的方法,其中,所述将所述返回地址修改为预设地址,包括:
将当前的系统寄存器EIP中的地址设置为预设地址;
将所述返回地址弹栈到所述系统寄存器EIP中。
7.根据权利要求1至4任一项所述的方法,其中,在将所述返回地址修改为休眠函数的地址之后,还包括:
调用所述休眠函数。
8.根据权利要求1至4任一项所述的方法,其中,所述指定系统函数为kernel32!WriteProcessMemory。
9.一种防御恶意软件的装置,包括:
函数检测模块,配置为对仅用于在内存中修改数据的指定系统函数进行实时的检测;
地址读取模块,配置为当所述指定系统函数被调用时,读取与所述指定系统函数对应的栈中的返回地址;
第一判断模块,配置为判断所述返回地址是否指向恶意软件对应的模块;
地址修改模块,配置为当所述返回地址指向恶意软件对应的模块时,将所述返回地址修改为休眠函数的地址;
第二判断模块,配置为读取与所述指定系统函数对应的栈中的参数,并判断所述指定系统函数对应的栈中的参数是否为预设参数。
10.根据权利要求9所述的装置,其中,所述第一判断模块还配置为当所述指定系统函数对应的栈中的参数为预设参数时,判断所述返回地址是否指向恶意软件对应的模块。
11.根据权利要求10所述的装置,其中,所述预设参数包括第一参数和/或第二参数;所述第一参数为当前操作中被保护进程的进程标识;所述第二参数为预设的挂钩过滤点的地址。
12.根据权利要求11所述的装置,其中,所述第一判断模块配置为按照如下方式判断所述返回地址是否指向恶意软件对应的模块:枚举所述被保护进程所加载的所有模块的基址;根据所述基址依次检测所述被保护进程所加载的所有模块中是否包含预设的恶意代码特征;若包含预设的恶意代码特征,则所述返回地址指向恶意软件对应的模块;若不包含预设的恶意代码特征,则所述返回地址未指向恶意软件对应的模块。
13.根据权利要求9至12任一项所述的装置,其中,所述地址读取模块配置为获取当前的扩展基址指针寄存器EBP中保存的地址,并将该地址增加预设数值后得到与所述指定系统函数对应的栈中的返回地址。
14.根据权利要求9至12任一项所述的装置,其中,所述地址修改模块配置为按照如下方式将所述返回地址修改为预设地址:将当前的系统寄存器EIP中的地址设置为预设地址;将所述返回地址弹栈到所述系统寄存器EIP中。
15.根据权利要求9至12任一项所述的装置,其中,所述装置还包括:函数调用模块,配置为调用所述休眠函数。
16.根据权利要求9至12任一项所述的装置,其中,所述指定系统函数为kernel32!WriteProcessMemory。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310685294.1A CN103679032B (zh) | 2013-12-13 | 2013-12-13 | 防御恶意软件的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310685294.1A CN103679032B (zh) | 2013-12-13 | 2013-12-13 | 防御恶意软件的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103679032A CN103679032A (zh) | 2014-03-26 |
CN103679032B true CN103679032B (zh) | 2017-05-17 |
Family
ID=50316542
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310685294.1A Active CN103679032B (zh) | 2013-12-13 | 2013-12-13 | 防御恶意软件的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103679032B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9767283B2 (en) * | 2014-06-27 | 2017-09-19 | Mcafee, Inc. | System and method to mitigate malicious calls |
CN105760787B (zh) * | 2015-06-30 | 2019-05-31 | 卡巴斯基实验室股份制公司 | 用于检测随机存取存储器中的恶意代码的系统及方法 |
RU2589862C1 (ru) | 2015-06-30 | 2016-07-10 | Закрытое акционерное общество "Лаборатория Касперского" | Способ обнаружения вредоносного кода в оперативной памяти |
CN105427134A (zh) * | 2015-12-10 | 2016-03-23 | 叶良 | 一种导航平台推广返利系统 |
CN105608376B (zh) * | 2015-12-24 | 2019-03-15 | 珠海豹趣科技有限公司 | 一种应用程序注册表删除方法及装置 |
CN106203118B (zh) * | 2016-07-13 | 2019-01-22 | 北京金山安全软件有限公司 | 修改插入标记闪烁时间的处理方法、装置及电子设备 |
CN106203121B (zh) * | 2016-07-19 | 2019-09-06 | 珠海豹趣科技有限公司 | 内核地址防止恶意修改方法、装置以及终端 |
CN108038378A (zh) * | 2017-12-28 | 2018-05-15 | 厦门服云信息科技有限公司 | 云端检测函数被恶意修改的方法、终端设备及存储介质 |
CN108563577A (zh) * | 2018-04-19 | 2018-09-21 | 武汉极意网络科技有限公司 | 基于JavaScript堆栈信息检测模拟器的方法 |
CN110569644B (zh) * | 2018-06-06 | 2023-05-09 | 阿里巴巴集团控股有限公司 | 调用请求的处理、功能函数的调用方法、装置及设备 |
CN110874301B (zh) * | 2018-08-30 | 2022-09-13 | 腾讯科技(深圳)有限公司 | 程序卡顿信息的获取方法和装置 |
CN109740303B (zh) * | 2018-09-07 | 2020-12-22 | 天翼电子商务有限公司 | 一种使用外部sdk时提升安全性的方法 |
CN114840847A (zh) * | 2021-02-02 | 2022-08-02 | 武汉斗鱼鱼乐网络科技有限公司 | 在目标进程中安全创建线程的方法、装置、介质及设备 |
CN113849098A (zh) * | 2021-11-29 | 2021-12-28 | 北京蔚领时代科技有限公司 | 一种基于hook的远程设置光标的方法及装置 |
CN117131497B (zh) * | 2023-02-28 | 2024-06-14 | 荣耀终端有限公司 | 一种软件检测方法及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1983296A (zh) * | 2005-12-12 | 2007-06-20 | 北京瑞星国际软件有限公司 | 用于防止非法程序窃取用户信息的方法及装置 |
CN101408917A (zh) * | 2008-10-22 | 2009-04-15 | 厦门市美亚柏科资讯科技有限公司 | 应用程序行为合法性检测方法及系统 |
CN102737188A (zh) * | 2012-06-27 | 2012-10-17 | 北京奇虎科技有限公司 | 检测恶意网页的方法及装置 |
CN102930210A (zh) * | 2012-10-14 | 2013-02-13 | 江苏金陵科技集团公司 | 恶意程序行为自动化分析、检测与分类系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8769672B2 (en) * | 2006-08-03 | 2014-07-01 | Symantec Corporation | Code injection prevention |
-
2013
- 2013-12-13 CN CN201310685294.1A patent/CN103679032B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1983296A (zh) * | 2005-12-12 | 2007-06-20 | 北京瑞星国际软件有限公司 | 用于防止非法程序窃取用户信息的方法及装置 |
CN101408917A (zh) * | 2008-10-22 | 2009-04-15 | 厦门市美亚柏科资讯科技有限公司 | 应用程序行为合法性检测方法及系统 |
CN102737188A (zh) * | 2012-06-27 | 2012-10-17 | 北京奇虎科技有限公司 | 检测恶意网页的方法及装置 |
CN102930210A (zh) * | 2012-10-14 | 2013-02-13 | 江苏金陵科技集团公司 | 恶意程序行为自动化分析、检测与分类系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103679032A (zh) | 2014-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103679032B (zh) | 防御恶意软件的方法和装置 | |
EP3039608B1 (en) | Hardware and software execution profiling | |
CN102651060B (zh) | 一种漏洞检测的方法和系统 | |
GB2499932B (en) | Detecting a return-oriented programming exploit | |
CN103886252B (zh) | 受信进程地址空间中执行的软件代码的恶意性的选择评估 | |
US8590041B2 (en) | Application sandboxing using a dynamic optimization framework | |
JP5265061B1 (ja) | 悪意のあるファイル検査装置及び方法 | |
JP5326062B1 (ja) | 非実行ファイル検査装置及び方法 | |
CN109583202B (zh) | 用于检测进程的地址空间中的恶意代码的系统和方法 | |
CN102831339B (zh) | 一种针对网页的恶意攻击进行防护的方法、装置和浏览器 | |
KR20180032566A (ko) | 다수 소프트웨어 개체들에 걸쳐서 악성 행동을 트래킹하기 위한 시스템들 및 방법들 | |
US9038161B2 (en) | Exploit nonspecific host intrusion prevention/detection methods and systems and smart filters therefor | |
US9659173B2 (en) | Method for detecting a malware | |
US8209757B1 (en) | Direct call into system DLL detection system and method | |
CN104091125A (zh) | 处理悬浮窗的方法及悬浮窗处理装置 | |
WO2014071867A1 (zh) | 程序处理方法和系统,用于程序处理的客户端和服务器 | |
US20100005528A1 (en) | Methods for hooking applications to monitor and prevent execution of security-sensitive operations | |
Case et al. | HookTracer: A system for automated and accessible API hooks analysis | |
Huang et al. | Return-oriented vulnerabilities in ARM executables | |
CN110717181A (zh) | 基于新型程序依赖图的非控制数据攻击检测方法及装置 | |
CN102819703B (zh) | 用于防护网页攻击的方法和设备 | |
CN106096458A (zh) | 一种保护系统安全的方法及装置 | |
Roth et al. | Implicit buffer overflow protection using memory segregation | |
WO2010069904A1 (en) | Method and apparatus for protecting vulnerable functions | |
KR20210057239A (ko) | 안티 디버깅 무력화 장치 및 그 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220714 Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015 Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park) Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Patentee before: Qizhi software (Beijing) Co.,Ltd. |