CN103679032A - 防御恶意软件的方法和装置 - Google Patents

防御恶意软件的方法和装置 Download PDF

Info

Publication number
CN103679032A
CN103679032A CN201310685294.1A CN201310685294A CN103679032A CN 103679032 A CN103679032 A CN 103679032A CN 201310685294 A CN201310685294 A CN 201310685294A CN 103679032 A CN103679032 A CN 103679032A
Authority
CN
China
Prior art keywords
address
return address
module
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.)
Granted
Application number
CN201310685294.1A
Other languages
English (en)
Other versions
CN103679032B (zh
Inventor
肖锐
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201310685294.1A priority Critical patent/CN103679032B/zh
Publication of CN103679032A publication Critical patent/CN103679032A/zh
Application granted granted Critical
Publication of CN103679032B publication Critical patent/CN103679032B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic 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(InternetExplorer)浏览器、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 (10)

1.一种防御恶意软件的方法,包括:
对用于在内存中修改数据的指定系统函数进行实时的检测;
当所述指定系统函数被调用时,读取与所述指定系统函数对应的栈中的返回地址;
判断所述返回地址是否指向恶意软件对应的模块;
当所述返回地址指向恶意软件对应的模块时,将所述返回地址修改为休眠函数的地址。
2.根据权利要求1所述的方法,其中,在所述读取与所述指定系统函数对应的栈中的返回地址之前,还包括:
读取与所述指定系统函数对应的栈中的参数,并判断所述指定系统函数对应的栈中的参数是否为预设参数;
所述判断所述返回地址是否指向恶意软件对应的模块,包括:
当所述指定系统函数对应的栈中的参数为预设参数时,判断所述返回地址是否指向恶意软件对应的模块。
3.根据权利要求2所述的方法,其中,所述预设参数包括第一参数和/或第二参数;
所述第一参数为当前操作中被保护进程的进程标识;
所述第二参数为预设的挂钩过滤点的地址。
4.根据权利要求3所述的方法,其中,所述判断所述返回地址是否指向恶意软件对应的模块,包括:
枚举所述被保护进程所加载的所有模块的基址;
根据所述基址依次检测所述被保护进程所加载的所有模块中是否包含预设的恶意代码特征;
若包含预设的恶意代码特征,则所述返回地址指向恶意软件对应的模块;
若不包含预设的恶意代码特征,则所述返回地址未指向恶意软件对应的模块。
5.根据权利要求1至4任一项所述的方法,其中,所述读取与所述指定系统函数对应的栈中的返回地址,包括:
获取当前的扩展基址指针寄存器EBP中保存的地址,并将该地址增加预设数值后得到与所述指定系统函数对应的栈中的返回地址。
6.根据权利要求1至5任一项所述的方法,其中,所述将所述返回地址修改为预设地址,包括:
将当前的系统寄存器EIP中的地址设置为预设地址;
将所述返回地址弹栈到所述系统寄存器EIP中。
7.根据权利要求1至6任一项所述的方法,其中,在将所述返回地址修改为休眠函数的地址之后,还包括:
调用所述休眠函数。
8.根据权利要求1至7任一项所述的方法,其中,所述指定系统函数为kernel32!WriteProcessMemory。
9.一种防御恶意软件的装置,包括:
函数检测模块,配置为对用于在内存中修改数据的指定系统函数进行实时的检测;
地址读取模块,配置为当所述指定系统函数被调用时,读取与所述指定系统函数对应的栈中的返回地址;
第一判断模块,配置为判断所述返回地址是否指向恶意软件对应的模块;
地址修改模块,配置为当所述返回地址指向恶意软件对应的模块时,将所述返回地址修改为休眠函数的地址。
10.根据权利要求9所述的装置,其中,所述装置还包括:
第二判断模块,配置为读取与所述指定系统函数对应的栈中的参数,并判断所述指定系统函数对应的栈中的参数是否为预设参数;
所述第一判断模块还配置为当所述指定系统函数对应的栈中的参数为预设参数时,判断所述返回地址是否指向恶意软件对应的模块。
CN201310685294.1A 2013-12-13 2013-12-13 防御恶意软件的方法和装置 Active CN103679032B (zh)

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 true CN103679032A (zh) 2014-03-26
CN103679032B 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)

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105427134A (zh) * 2015-12-10 2016-03-23 叶良 一种导航平台推广返利系统
CN105608376A (zh) * 2015-12-24 2016-05-25 北京金山安全软件有限公司 一种应用程序注册表删除方法及装置
CN105760787A (zh) * 2015-06-30 2016-07-13 卡巴斯基实验室股份制公司 用于检测随机存取存储器中的恶意代码的系统及方法
CN106203121A (zh) * 2016-07-19 2016-12-07 北京金山安全软件有限公司 内核地址防止恶意修改方法、装置以及终端
CN106203118A (zh) * 2016-07-13 2016-12-07 北京金山安全软件有限公司 修改插入标记闪烁时间的处理方法、装置及电子设备
CN106464513A (zh) * 2014-06-27 2017-02-22 迈克菲股份有限公司 用于抑制恶意调用的系统和方法
CN108038378A (zh) * 2017-12-28 2018-05-15 厦门服云信息科技有限公司 云端检测函数被恶意修改的方法、终端设备及存储介质
CN108563577A (zh) * 2018-04-19 2018-09-21 武汉极意网络科技有限公司 基于JavaScript堆栈信息检测模拟器的方法
US10242186B2 (en) 2015-06-30 2019-03-26 AO Kaspersky Lab System and method for detecting malicious code in address space of a process
CN109740303A (zh) * 2018-09-07 2019-05-10 天翼电子商务有限公司 一种使用外部sdk时提升安全性的方法
CN110569644A (zh) * 2018-06-06 2019-12-13 阿里巴巴集团控股有限公司 调用请求的处理、功能函数的调用方法、装置及设备
CN110874301A (zh) * 2018-08-30 2020-03-10 腾讯科技(深圳)有限公司 程序卡顿信息的获取方法和装置
CN113849098A (zh) * 2021-11-29 2021-12-28 北京蔚领时代科技有限公司 一种基于hook的远程设置光标的方法及装置
CN114840847A (zh) * 2021-02-02 2022-08-02 武汉斗鱼鱼乐网络科技有限公司 在目标进程中安全创建线程的方法、装置、介质及设备
CN117131497A (zh) * 2023-02-28 2023-11-28 荣耀终端有限公司 一种软件检测方法及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1983296A (zh) * 2005-12-12 2007-06-20 北京瑞星国际软件有限公司 用于防止非法程序窃取用户信息的方法及装置
US20080040800A1 (en) * 2006-08-03 2008-02-14 Seung Bae Park Code injection prevention
CN101408917A (zh) * 2008-10-22 2009-04-15 厦门市美亚柏科资讯科技有限公司 应用程序行为合法性检测方法及系统
CN102737188A (zh) * 2012-06-27 2012-10-17 北京奇虎科技有限公司 检测恶意网页的方法及装置
CN102930210A (zh) * 2012-10-14 2013-02-13 江苏金陵科技集团公司 恶意程序行为自动化分析、检测与分类系统及方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1983296A (zh) * 2005-12-12 2007-06-20 北京瑞星国际软件有限公司 用于防止非法程序窃取用户信息的方法及装置
US20080040800A1 (en) * 2006-08-03 2008-02-14 Seung Bae Park Code injection prevention
CN101408917A (zh) * 2008-10-22 2009-04-15 厦门市美亚柏科资讯科技有限公司 应用程序行为合法性检测方法及系统
CN102737188A (zh) * 2012-06-27 2012-10-17 北京奇虎科技有限公司 检测恶意网页的方法及装置
CN102930210A (zh) * 2012-10-14 2013-02-13 江苏金陵科技集团公司 恶意程序行为自动化分析、检测与分类系统及方法

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106464513A (zh) * 2014-06-27 2017-02-22 迈克菲股份有限公司 用于抑制恶意调用的系统和方法
CN106464513B (zh) * 2014-06-27 2020-08-21 迈克菲有限公司 用于抑制恶意调用的系统和方法
US10242186B2 (en) 2015-06-30 2019-03-26 AO Kaspersky Lab System and method for detecting malicious code in address space of a process
CN105760787B (zh) * 2015-06-30 2019-05-31 卡巴斯基实验室股份制公司 用于检测随机存取存储器中的恶意代码的系统及方法
CN105760787A (zh) * 2015-06-30 2016-07-13 卡巴斯基实验室股份制公司 用于检测随机存取存储器中的恶意代码的系统及方法
CN105427134A (zh) * 2015-12-10 2016-03-23 叶良 一种导航平台推广返利系统
CN105608376B (zh) * 2015-12-24 2019-03-15 珠海豹趣科技有限公司 一种应用程序注册表删除方法及装置
CN105608376A (zh) * 2015-12-24 2016-05-25 北京金山安全软件有限公司 一种应用程序注册表删除方法及装置
CN106203118B (zh) * 2016-07-13 2019-01-22 北京金山安全软件有限公司 修改插入标记闪烁时间的处理方法、装置及电子设备
CN106203118A (zh) * 2016-07-13 2016-12-07 北京金山安全软件有限公司 修改插入标记闪烁时间的处理方法、装置及电子设备
CN106203121B (zh) * 2016-07-19 2019-09-06 珠海豹趣科技有限公司 内核地址防止恶意修改方法、装置以及终端
CN106203121A (zh) * 2016-07-19 2016-12-07 北京金山安全软件有限公司 内核地址防止恶意修改方法、装置以及终端
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 阿里巴巴集团控股有限公司 调用请求的处理、功能函数的调用方法、装置及设备
CN110569644A (zh) * 2018-06-06 2019-12-13 阿里巴巴集团控股有限公司 调用请求的处理、功能函数的调用方法、装置及设备
CN110874301A (zh) * 2018-08-30 2020-03-10 腾讯科技(深圳)有限公司 程序卡顿信息的获取方法和装置
CN109740303A (zh) * 2018-09-07 2019-05-10 天翼电子商务有限公司 一种使用外部sdk时提升安全性的方法
CN114840847A (zh) * 2021-02-02 2022-08-02 武汉斗鱼鱼乐网络科技有限公司 在目标进程中安全创建线程的方法、装置、介质及设备
CN113849098A (zh) * 2021-11-29 2021-12-28 北京蔚领时代科技有限公司 一种基于hook的远程设置光标的方法及装置
CN117131497A (zh) * 2023-02-28 2023-11-28 荣耀终端有限公司 一种软件检测方法及电子设备

Also Published As

Publication number Publication date
CN103679032B (zh) 2017-05-17

Similar Documents

Publication Publication Date Title
CN103679032A (zh) 防御恶意软件的方法和装置
Lee et al. Enlisting hardware architecture to thwart malicious code injection
US10284591B2 (en) Detecting and preventing execution of software exploits
EP2946330B1 (en) Method and system for protecting computerized systems from malicious code
CN102651060B (zh) 一种漏洞检测的方法和系统
EP3039608B1 (en) Hardware and software execution profiling
US11882134B2 (en) Stateful rule generation for behavior based threat detection
CN109583202B (zh) 用于检测进程的地址空间中的恶意代码的系统和方法
CN102932329B (zh) 一种对程序的行为进行拦截的方法、装置和客户端设备
US10310992B1 (en) Mitigation of cyber attacks by pointer obfuscation
CN100568255C (zh) 一种网页防挂马的方法
CN104268471B (zh) 一种检测面向返程的编程攻击的方法及装置
CN104217157B (zh) 一种漏洞防利用方法及系统
US8209757B1 (en) Direct call into system DLL detection system and method
RU2723665C1 (ru) Динамический индикатор репутации для оптимизации операций по обеспечению компьютерной безопасности
CN101901321A (zh) 终端防御恶意程序的方法、装置及系统
CA2674327C (en) Exploit nonspecific host intrusion prevention/detection methods and systems and smart filters therefor
US9904792B1 (en) Inhibition of heap-spray attacks
CN103001947A (zh) 一种程序处理方法和系统
CN110325994B (zh) 增强软件应用的控制流完整性的设备和方法
CN114676424B (zh) 一种容器逃逸检测与阻断方法、装置、设备及存储介质
EP3518135A1 (en) Protection against third party javascript vulnerabilities
CN103970574B (zh) office程序的运行方法及装置、计算机系统
Huang et al. Return-oriented vulnerabilities in ARM executables
Piromsopa et al. Survey of protections from buffer-overflow attacks

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.