CN102722672B - 一种检测运行环境真实性的方法及装置 - Google Patents

一种检测运行环境真实性的方法及装置 Download PDF

Info

Publication number
CN102722672B
CN102722672B CN201210182641.4A CN201210182641A CN102722672B CN 102722672 B CN102722672 B CN 102722672B CN 201210182641 A CN201210182641 A CN 201210182641A CN 102722672 B CN102722672 B CN 102722672B
Authority
CN
China
Prior art keywords
api
information
current operating
operating environment
environment
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
Application number
CN201210182641.4A
Other languages
English (en)
Other versions
CN102722672A (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 Qizhi Business Consulting Co ltd
Beijing Qihoo Technology Co Ltd
360 Digital Security Technology Group 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 CN201210182641.4A priority Critical patent/CN102722672B/zh
Publication of CN102722672A publication Critical patent/CN102722672A/zh
Application granted granted Critical
Publication of CN102722672B publication Critical patent/CN102722672B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Storage Device Security (AREA)
  • Measurement Of The Respiration, Hearing Ability, Form, And Blood Characteristics Of Living Organisms (AREA)

Abstract

本发明公开了一种检测运行环境真实性的方法及装置,其中,所述方法包括:获取应用程序编程接口API在当前运行环境中的信息;将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比,得到一对比结果;所述API的指纹信息为API在真实运行环境中的特征信息;根据所述对比结果验证当前运行环境是否为真实运行环境。通过本发明,能够极大的提高检测运行环境真实性的准确度,并且能够在多种操作***下运用本发明提供的方法实现对运行环境真实性的检测。

Description

一种检测运行环境真实性的方法及装置
技术领域
本发明涉及计算机技术领域,特别是涉及一种检测运行环境真实性的方法及装置。
背景技术
计算机文件按照其可执行情况可以分为可执行文件和非可执行文件两种。可执行文件是一种存储有特定的指令或代码,能够被加载到计算机内存中,并在计算机上运行其存储的指令或代码,以完成特定任务的文件。比如在常用的视窗(Windows)操作***中,一些以.exe为后缀的可执行文件(如notepad.exe等),用户可以通过运行这些可执行文件并利用其提供的功能完成一系列的任务,如执行notepad.exe可以实现对文本文档进行编辑、保存等操作。通常,可执行文件运行在特定的操作***中,并由操作***在其运行时,为其构造相应的运行环境,提供相应的服务支持,如内存的分配及调度等。
在当今计算机日益普及和计算机软件产品大规模应用的背景下,软件产品也成了许多黑客攻击的目标,一些黑客通过技术手段破解和散布并没有得到合法授权的软件产品,其行为给软件产品的所有者造成了巨大的经济损失,出于对软件产品所有者权利的保护,除了利用法律的手段之外,通常在软件的开发过程中,从技术上也对软件产品实施了技术性的保护措施,加壳便是其中一种常用的手段。加壳可以在一定程度上阻止了黑客对软件的反向分析,从而达到了保护软件产品的目的。
然而,随着破解者对于软件加壳技术的深入研究,破解软件加壳技术的脱壳技术也发展起来,在保护与破解的较量中,出现了“脱壳机”技术。该技术的主要原理是由“脱壳机”构造一个虚拟的运行环境,“脱壳机”模拟出的运行环境与真实的操作***运行环境具有较高的相似度,使带有加壳技术保护的软件在该运行环境下运行,并监测其执行过程,然后将被保护的原始代码或文件解密出来,实现了对软件进行破解的目的。
针对“脱壳机”的应用原理,运行环境检测技术开始在软件保护领域得到应用,然而随着虚拟环境模拟水平的提高,运行环境检测技术也出现了瓶颈,传统的检测手段不足以对抗越来越完美的虚拟环境模拟,因此,迫切需要本领域技术人员解决的技术问题就在于,如何能够更准确的检测运行环境是否正常,以便在软件运行前及时检测到异常并采取措施,以达到自我保护的目的。
发明内容
本发明提供了一种检测运行环境真实性的方法及装置,能够能够极大的提高检测运行环境真实性的准确度,并且能够在多中操作***下运用本方法实现对运行环境真实性的检测。
本发明提供了如下方案:
一种检测运行环境真实性的方法,包括:
获取应用程序编程接口API在当前运行环境中的信息;
将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比,得到一对比结果;所述API的指纹信息为API在真实运行环境中的特征信息;
根据所述对比结果验证当前运行环境是否为真实运行环境。
可选的,所述API在当前运行环境中的信息,包括:获取至少两个API在当前运行环境中的信息;
所述根据所述对比结果验证当前运行环境是否为真实运行环境包括:
如果各个API在当前运行环境中的信息均与相应API的指纹信息相同,则所述当前运行环境为真实运行环境。
可选的,所述获取API在当前运行环境中的信息,包括:
获取随机选取的API在当前运行环境中的信息;
所述根据所述对比结果验证当前运行环境是否为真实运行环境包括:
如果所述随机选取的API在当前运行环境中的信息与相应API的指纹信息相同,则所述当前运行环境为真实运行环境。
可选的,同一API对应有至少两种指纹信息;
所述将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比,包括:
对于同一API,将其在当前运行环境中的信息,与预先获取到的该API的至少两种指纹信息分别进行对比;
所述根据所述对比结果验证当前运行环境是否为真实运行环境包括:
对于同一API,如果其在当前运行环境中的信息与预先获取到的该API的至少两种指纹信息均相同,则所述当前运行环境为真实运行环境。
可选的,所述API的指纹信息包括,API本身的代码;
所述获取API在当前运行环境中的信息,包括:
获取相应API在当前运行环境中的代码;
所述将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比包括:
将所述API在当前运行环境中的代码与预先获取到的相应API在真实运行环境中的代码进行对比。
可选的,所述API的指纹信息包括,API在被调用的情况下产生的特征信息;
所述获取API在当前运行环境中的信息,包括:
获取API在当前运行环境中被调用时产生的信息;
所述将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比包括:
将所述API在当前运行环境中被调用时产生的信息与预先获取到的相应API在真实运行环境中被调用时产生的信息进行对比。
可选的,所述API在被调用的情况下产生的特征信息包括,API在被调用的情况下,寄存器的值;
所述获取API在当前运行环境中的信息,包括:
获取API在当前运行环境中被调用时,寄存器的值;
所述将所述API在当前运行环境中被调用时产生的信息与预先获取到的相应API在真实运行环境中被调用时产生的信息进行对比包括:
将所述API在当前运行环境中被调用时寄存器的值与预先获取到的相应API在真实运行环境中被调用时寄存器的值进行对比。
可选的,所述API在被调用的情况下寄存器的值包括:
API运行返回后寄存器的值;
或,
进程或线程启动并返回用户空间代码之后寄存器保存的值。
可选的,所述API在被调用的情况下产生的特征信息包括API在被调用时产生的栈数据;
所述获取API在当前运行环境中的信息,包括:
获取API在当前运行环境中被调用时产生的栈数据;
所述将所述API在当前运行环境中被调用时产生的信息与预先获取到的相应API在真实运行环境中被调用时产生的信息进行对比包括:
将所述API在当前运行环境中被调用时产生的栈数据与预先获取到的相应API在真实运行环境中被调用时产生的栈数据进行对比。
可选的,所述API在被调用时产生的栈数据包括:
API运行并返回后的栈数据;
或,
进程或线程启动并返回用户空间代码之后的栈数据。
一种检测运行环境真实性的装置,包括:
信息获取单元,用于获取应用程序编程接口API在当前运行环境中的信息;
对比单元,用于将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比,得到一对比结果;所述API的指纹信息为API在真实运行环境中的特征信息;
验证单元,用于根据所述对比结果验证当前运行环境是否为真实运行环境。
可选的,所述信息获取单元,包括:
第一信息获取子单元,用于获取至少两个API在当前运行环境中的信息;
所述验证单元包括:
第一验证子单元,用于如果各个API在当前运行环境中的信息均与相应API的指纹信息相同,则所述当前运行环境为真实运行环境。
可选的,所述信息获取单元,包括:
第二信息获取子单元,用于获取随机选取的API在当前运行环境中的信息
所述验证单元包括:
第二验证子单元,用于如果所述随机选取的API在当前运行环境中的信息与相应API的指纹信息相同,则所述当前运行环境为真实运行环境。
可选的,同一API对应有至少两种指纹信息;
所述对比单元包括:
第一对比子单元,用于对于同一API,将其在当前运行环境中的信息,与预先获取到的该API的至少两种指纹信息分别进行对比;
所述验证单元包括:
第三验证子单元,用于对于同一API,如果其在当前运行环境中的信息与预先获取到的该API的至少两种指纹信息均相同,则所述当前运行环境为真实运行环境。
可选的,所述API的指纹信息包括,API本身的代码;
所述信息获取单元,还包括:
第三信息获取子单元,用于获取相应API在当前运行环境中的代码;
所述对比单元包括:
第二对比子单元,用于将所述API在当前运行环境中被调用时产生的信息与预先获取到的相应API在真实运行环境中被调用时产生的信息进行对比。
可选的,所述API的指纹信息包括,API在被调用的情况下产生的特征信息;
所述信息获取单元,还包括:
第四信息获取子单元,用于获取API在当前运行环境中被调用时产生的信息;
所述对比单元包括:
第三对比子单元,用于将所述API在当前运行环境中被调用时产生的信息与预先获取到的相应API在真实运行环境中被调用时产生的信息进行对比。
可选的,所述API在被调用的情况下产生的特征信息包括,API在被调用的情况下寄存器的值;
所述信息获取单元,包括:
寄存器值获取单元,用于获取API在当前运行环境中被调用时寄存器的值
所述第三对比子单元具体用于将所述API在当前运行环境中被调用时寄存器的值与预先获取到的相应API在真实运行环境中被调用时寄存器的值进行对比。
可选的,所述API在被调用的情况下寄存器的值包括:
API运行返回后寄存器的值;
和/或,
进程或线程启动并返回用户空间代码之后寄存器保存的值。
可选的,所述API在被调用的情况下产生的特征信息包括包括,API在被调用时产生的栈数据;
所述信息获取单元,包括:
栈数据获取单元,用于获取API在当前运行环境中被调用时产生的栈数据;
所述第三对比子单元具体用于将所述API在当前运行环境中被调用时产生的栈数据与预先获取到的相应API在真实运行环境中被调用时产生的栈数据进行对比。
可选的,所述API在被调用时产生的栈数据包括:
API运行并返回后的栈数据;
和/或,
进程或线程启动并返回用户空间代码之后的栈数据。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
通过本发明,利用操作***提供的API在真实的运行环境和虚拟的运行环境下可以呈现出的不同特征作为参考,来检测运行环境是否为真实运行环境,由于API的数量众多,因此,极大的提高了模拟真实运行环境的难度,进而也就提高了检测运行环境真实性的准确度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的方法的流程图;
图2是本发明实施例提供的装置的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
首先需要说明的是,在软件破解与保护的对抗中,运行环境检测技术针对不同的检测对象、利用不同的检测原理发展了出若干检测手段,如环境块检测技术、异常检测技术等等,但由于这些传统的运行环境检测技术的检测对象有限,同时部分技术本身还存在着检测风险高,平台依赖性强等缺点。随着破解者对传统检测技术的深入研究,越来越接近真实运行环境的虚拟运行环境被模拟出来,使得传统的运行环境检测技术的检测效果大打折扣。此时,如何找到一种更有效的检测运行环境真实性的方法成了包括软件保护者在内的技术人员需要思考的问题。
几乎所有操作***都会使用应用程序编程接口(ApplicationProgramming Interface,API),用于向在操作***上运行的应用程序提供服务,常用的操作***一般都会为应用程序和开发者提供大量的API。本发明人在实现本发明的过程中发现,在真实的***运行环境和虚拟的运行环境中,相应的API往往会呈现出不同的特征,这种不同的特征,不仅体现在API函数本身的代码上,还体现在当API在两种运行环境中被调用时所表现的不同的数据信息上等多个方面。因此,可以通过提取API在真实的***运行环境特征,为API建立“指纹”,并以API指纹来检测运行环境的真实性。由于常见的操作***都拥有大量的API,同时每个API在不同的运行环境里通常呈现出多个不同的特征,这就为通过API指纹检测测运行环境提供了丰富的检测依据。利用API指纹检测运行环境的真实性,可以大大提高虚拟环境的建造难度,同时,为运行环境的真实性检测提供了更加有效的手段。下面就对本发明实施例提供的检测运行环境真实性的方法进行详细地介绍。
参见图1,该方法包括以下步骤:
S101:获取应用程序编程接口API在当前运行环境中的信息;
在需要对当前运行环境进行真实性检测时,获得API在当前运行环境中的信息。在具体实施时,比如在需要对某可执行程序进行保护时,可以在该可执行程序运行前,先执行对运行环境的真实性进行检测,而后可执行程序根据检测结果采取相应的措施,以达到自我保护的目的。在获取AP I在当前运行环境中的信息的过程中,可以选取一个或者多个特定的API,获得在当前运行环境中这一个或至少两个API的信息。在这种选取特定的API进行检测的情况下,相当于可以将具体检测哪个API直接写在检测代码中,这样,当检测代码运行时,就可以直接去获取代码中写明的这个或这些API在当前运行环境中的信息。或者,也可以从众多的API中随机选取一个或多个API,获取这一个或多个API在当前运行环境中的信息。随机选取API,有利于在进行环境真实性检测的过程中实现更大的灵活性,从而更加有效的对运行环境进行真实性检测,在破解与保护的对抗中争取更加有利的地位。
对于同一个API,在真实的***运行环境和虚拟的运行环境中,往往会从不同的角度,呈现出多个不同的特征。因此,在获取API指纹信息时,针对同一个API,还可以分别从多个角度去获取其指纹信息,也即,这样,由于操作***中包括众多的API,每个API又可以分别从多个角度获取指纹信息,因此,可以作为指纹信息的数量就会非常庞大,只有在构造虚拟环境时模拟了所有可能获取到的指纹信息的情况下,才可能使得虚拟运行环境与真实运行环境达到完全一致的拟合度,但这基本上是不可能实现的,这也就进一步提高了检测的准确性。
在获取API在当前运行环境中的信息时,可以根据待检测AP I在真实的***运行环境和虚拟的运行环境中表现的一个或几个方面的不同特征,获取待检测API的特征信息。在角度的选取上,选择待检测的API在真实的***运行环境和虚拟的运行环境中,最具特征性的一个或多个方面的不同特征来进行信息获取,显然更具特征性的信息对于检测运行环境的真实性更加具有参考价值。
具体在获取某API在当前运行环境中的信息时,获取到的信息可以是该API自身的代码,此时,可以首先获取到该API在内存中的地址,然后到该地址处读取出该API的代码,作为后续比对的基础即可。或者,获取到的信息也可以是该API被调用时产生的一些信息,例如,API运行返回时寄存器(具体可以是易失寄存器)中的信息等等。此时,可以在当前运行环境中调用该API,然后获取调用过程中或者调用完成之后产生的一些信息,作为后续比对的基础即可。需要说明的是,具体在调用某API时,由于API本身是函数,而调用函数时需要传入一定的参数,才能得到相应的运行结果。因此,本发明实施例在当前运行环境中调用API时,同样可以为该API传入一些参数。当然,由于本发明实施例中涉及到的API调用仅仅是用于检测,因此,调用时传入怎样的参数是需要考虑的问题。具体实现时,可以如下进行:针对当前调用的API,可以根据其指纹信息的具体情况来选择参数,例如,某API的输入参数具有一定的范围,而其指纹信息对于该范围内的所有数值都表现出相同的特征,则在调用该API时,可以在该范围内任意选择一个参数来调用该API即可。当然,如果该API的指纹进行仅在某个或某几个特定参数下才会体现出某特征,则在调用该API时,选择这种特定的参数作为其输入即可。
S102:将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比,得到一对比结果;所述API的指纹信息为API在真实运行环境中的特征信息;
其中,具体在获取API的指纹信息时,可以从多个方面去获取:API本身的代码或者API在真实运行环境中被调用的情况下产生的特征信息。其中,API在被调用的情况下产生的特征信息可以包括:API在真实运行环境中被调用时寄存器的值,或者,API在真实运行环境中被调用时产生的栈数据。所谓的AP I在真实运行环境中被调用时寄存器的值可以包括:API(例如异常处理函数等)运行返回时寄存器的值,或者,进程或线程启动并返回用户空间代码后寄存器的值。而所谓的API在真实运行环境中被调用时产生的栈数据可以包括:API运行返回时的栈数据,或者,进程或线程启动并返回用户空间代码后的栈数据等等。需要说明的是,所谓的用户空间代码是相对于内核代码而言的,进程/线程启动时,会首先由内核调用相关的函数做设置运行环境等操作,然后返回执行用户空间代码。
以上所说的从多个方面去获取指纹信息,有以下两层含义:
首先,对于不同的API,最终选取指纹信息时,可能是从不同方面去选取的。例如,对于第一个API,其可能在本身代码上就能体现出一些符合条件的特征,因此,可以选取其本身代码作为该API的指纹;而对于第二个API,可能在本身代码上无法体现出某些特定的特征,但是在运行返回时易失寄存器的值却符合一定的特征(这种特征可以是:在API使用过程中具有特定含义,并且在API退出后这种含义不会消失),能够作为指纹信息,因此,就可以选取运行返回时易失寄存器的值作为该API的指纹信息,等等。
其次,对于同一API,也可以从多个方面去选取其指纹信息。例如,对于某API,如果其自身代码、运行返回时易失寄存器中的值等等都能体现出一些相对稳定的特征,则可以分别从这些方面都获取指纹信息,也即,一个API可以具有多个指纹信息。也就是说,对于同一API,在真实的***运行环境和虚拟的运行环境中,通常又会在多个方面会表现出不同的特征。因此,可以根据同一API在在真实的***运行环境和虚拟的运行环境中表现出的多方面的不同特征,将API在真实运行环境中的多种角度的特征作为该API的指纹。
当然在实际应用中,API在真实的***运行环境和虚拟的运行环境中的不同特征还可以表现在更多的方面,以上只是举例说明,但在实际应用中并不应限于以上所列举的方面,也不应看做是对本发明的限制。
在获取到待检测API在当前运行环境的信息后,将AP I在当前运行环境中的信息,与相应API的指纹信息进行对比,以得到API在当前运行环境的信息与相应API指纹信息是否一致的对比结果。
具体在将API在当前运行环境的信息与相应API的指纹信息进行对比的过程中,可以采取全面对比的策略,即获取API在当前运行环境的全方面的可以作为检测运行环境真实性参考信息的特征信息,与相应API的指纹信息进行全面的对比,得到一个相对全面的对比结果,这种获取信息和对比信息的策略能够比较全面的比较API在当前运行环境的信息和API指纹信息,由此产生的对比结果更加全面和准确。也可以采取选择部分信息进行对比策略,在当前运行环境中获取API在真实的***运行环境和虚拟的运行环境中,一个或多个角度的不同特征信息,从对应角度与相应API的指纹信息进行对比,这种选择部分特征进行对比的效率优先策略,能够提高当前运行环境真实性的检测效率。当然,如果选择待检测的API在真实的***运行环境和虚拟的运行环境中相比最具特征性的一个或多个角度的信息进行对比,则能够在提高检测效率的同时,兼顾了运行环境真实性检测的可靠性。
具体在对比API在当前运行环境的信息与API指纹信息时,可以根据实际情况,采取不同的策略。例如,有的API的指纹信息是某固定的值,而有的API的指纹信息则是一个取值范围,换言之,在真实的***运行环境和虚拟的运行环境中,有些API的特征性信息呈现出具体数据在数值上的不相等,而对于有的API则表现在具体数据在数值所属范围上的不同;对于前者,可以根据其特点,对比API在真实的***运行环境和虚拟的运行环境中,特征性信息呈现出具体数据在数值上的是否相等,来得到对比结果;例如,某API的指纹信息中显示,该API运行返回后易失寄存器的值为某固定的值,则就可以在当前运行环境中,调用该API,运行后返回易失寄存器的值,然后比较该值与指纹信息中的值是否相等即可,如果不相等,则证明当前运行环境可能并不是真实的运行环境。而对于后者,则可以对比特征性信息呈现出的取值范围上是否相同,来得到比较结果。例如,某API的指纹信息中显示,该API运行返回后易失寄存器的值是一段有效地址空间(例如,notepad.exe在内容中所占的地址等等),此时,在当前运行环境中调用该API之后,如果运行后返回易失寄存器的值在该有效地址空间范围内,则证明当前运行环境可能是真实的运行环境,否则,如果超出了该有效地址空间范围,则证明当前运行环境可能是一个虚拟的运行环境,等等。以上只是举例说明具体在对比API在当前运行环境的信息与API指纹信息时的比较方法,实际的应用中,可以根据实际需求,确定符合实际情况的比较方法,以得到更加科学和符合实际的比较结果。
S103:根据所述对比结果验证当前运行环境是否为真实运行环境。
对比API在当前运行环境中的信息与API在真实运行环境里指纹特征信息,根据比对的结果,可以确定API在当前运行环境的信息与在真实的运行环境里是否一致,或者具有相同的必要性特征,进而判断当前运行环境为虚拟的***运行环境,或者真实的***运行环境。例如,在选取一个特定的或者随机的API进行检测时,如果该AP I在当前运行环境中的信息与其在真实运行环境中对应的指纹信息相同,则可以确定当前运行环境是真实的运行环境。当然,为了提高检测的准确性,在选取多个特定的或者随机的API进行检测时,可以将各个API在当前运行环境中的信息与各自在真实运行环境中对应的指纹信息,如果均相同,则可以确定当前运行环境是真实的运行环境;否则,只要有其中一个API在当前运行环境中的信息与其对应的指纹信息不同,就可以确定当前运行环境是虚拟环境。当然,在针对同一个API进行多种不同的指纹信息的比对的情况下,只有API在当前运行环境中的信息与其对应的各个指纹信息都相同,才能证明当前运行环境是真实的运行环境,否则,只要有其中某一种信息与其对应的指纹信息不同,则可以确定当前运行环境是虚拟环境。
如前文所述,对于同一个API,在真实的***运行环境和虚拟的运行环境中,往往会从API本身的代码、API在两种环境下运行返回时寄存器的值、API在两种环境下运行返回时的栈数据、在两种环境下触发异常时异常处理函数运行返回后的寄存器的值、在两种环境下触发异常时异常处理函数返回后的的栈数据、在两种环境下进程或线程启动并返回用户代码后寄存器的值以及栈数据等诸多不同的方面和角度,呈现出多个不同的特征。下面从其中的几个方面和角度,详细地举例说明一下获取API在当前运行环境中的信息,与API指纹信息进行对比,进而验证当前运行环境真实性的具体实施方式。
1.以API函数本身的代码作为其指纹及判断运行环境真实性
这里以Windows***下的kernel32.dll动态链接库导出的GetProcAddress函数为例来进行说明。
对此函数的分析可以发现,GetProcAddress函数入口偏移0x30的位置,此处的汇编指令为:
7C80AC58    FF75 08    PUSH DWORD PTR SS:[EBP+8]
7C80AC5B    E8  C2ECFFFF    CALL  kernel32.7C809922
可以选择[0x7C80AC28+0x30]:0xE80875FF为本API的指纹。0x7C80AC28是GetProcAddress的函数地址,可以通过读取GetProcAddress函数地址偏移0x 30的值,然后跟0xE80875FF进行比较,来判断当前运行环境的真实性:比较结果相同则表示该运行环境为真实Windows操作***;如果不相同,则认为当前运行环境是虚拟构造的。
2.以API运行返回之后易失寄存器的值作为其指纹及判断运行环境真实性
这里选取Windows***下kernel32.dll动态链接库导出的lstrlenA函数为例来进行说明。通过分析其汇编代码:
可以看出,EDX寄存器只在0x7C80C6FB处赋值。通过阅读代码,当向该函数传递有效参数时,0x7C80C6EC处代码会将第一个参数的地址传给EDX寄存器,之后再将EDX+1的值赋予EDX寄存器,而之后就只是读取EDX寄存器的值。再通过分析0x7C80C70B处call sub_7C80250B函数:
可以看到,此处函数并未使用EDX寄存器。因此,可以确定EDX可以作为此API的指纹。在lstrlenA函数返回之后,EDX保存参数地址偏移一位的地址。当lstrlenA函数返回之后,读取EDX+1的值,与lstrlenA参数的值相比较,如果相同,则认为是运行环境是真实的Windows操作***;如果不同,则认为当前环境是虚拟构造的运行环境。
3.SEH异常处理函数返回之后以易失寄存器的值作为指纹
为了让***和应用程序代码都可以简单方便地支持异常处理,Windows定义了一套标准的机制来规范异常处理代码的设计和编译,这套机制被称为结构化异常处理(Structured Exception Handling),简称为SEH。从***的角度来看,SEH是对Windows操作***中的异常分发和处理机制的总称,其实现遍布在Windows***的很多模块和数据结构中。异常注册链表的表头是登记在每个线程的线程信息块(TIB)中。从编程的角度来看,SEH是一套规范,利用这套规范,程序员可以编写处理代码来复用***的异常处理设施。
SEH异常处理函数的处理需要通过***函数,先在用户代码中设置SEH处理函数,然后制造异常,使得代码的执行流程转向异常处理函数,例如下面的代码:
当执行0041CA02处的地址时,发生异常,转到***处理函数。在***将控制权交异常处理函数之前,代码如下:
在7C9237BD处会执行跳转到用户异常处理函数。由此也可以看到,当跳转到异常处理函数时,ECX寄存器的值是函数地址本身。所以ECX寄存器的值可以作为该异常处理函数的API指纹进行检测。当运行跳转到异常处理函数以后,检测ECX寄存器的值是否等于当前异常处理函数地址,如果相等,则认为是在真实的操作***环境中;如果不相等,则认为当前运行环境是在虚拟构造的运行环境。
4.以进程或线程启动时调用API并返回用户代码之后寄存器保存的值作为API指纹及判断运行环境真实性
Windows新创建进程的第一个线程是由Windows内核KiThreadStartup中发起的一个用户态APC所启动的。在***将运行权交给可执行代码之前,会先调用ntdll.dll动态链接库的ZwSetInformationThread函数,对线程进行设置。通过对如下代码的分析:
通过程序调试器可以看到[0x7ffe0300]:0x7C92EB8B,此处的代码为:
.text:7C92EB8B    mov    edx,esp
.text:7C92EB8D    sysenter
可以看到通sysenter进入内核。在内核中,则通过KiSystemCallExit2返回:
内核通过systexit指令返回到用户空间代码。执行sysexit指令CPU将执行以下操作:
●将SYSENTER_CS_MSR的值加16(Ring3的代码段描述符)装载到cs寄存器;
●将寄存器EDX寄存器的值装载到EIP寄存器;
●将SYSENTER_CS_MSR的值加24(Ring3的堆栈段描述符)装载到ss寄存器;
●将寄存器ECX寄存器的值装载到ESP寄存器;
●将特权级切换到Ring3;
●继续执行Ring3的代码。
当sysexit返回到用户空间时,返回到ntdll.dll动态链接库中的KiSystemCallRet,此函数就只有一条RET指令,之后直接返回到ZwSetInformationThread退出,此时对于EDX寄存器,ECX寄存器都没有做任何改变,就将控制权交给了用户代码。
通过上面的过程分析,可以看出EDX寄存器,ECX寄存器在新建进程启动的时候,本身是有意义的。EDX寄存器保存着KiSystemCallRet的地址,ECX寄存器则是指向用户态栈空间。因此,这两个寄存器的值都可以作为指纹进行判断。具体的,在线程刚启动时读取EDX寄存器值,只要EDX是指向ntdll.dll空间的地址,则认为是在真实的***空间中运行;如果没有指向ntdll.dll空间,则认为是在虚拟构造的运行环境中运行。ECX同理。
5.以API函数运行并返回之后的栈数据作为API指纹及判断运行环境真实性
这里选择Windows操作***下的Kernel32.dll动态链接库导出的lstrcpyW函数作为示例,通过查看lstrcpyW函数的汇编代码:
可以看出,lstrcpyW函数在返回之前,一定会调用7C80B90E处的函数。而call指令会在栈上留下返回地址信息。
当执行到7C80B913(即lstrcpyW的最后一条指令时),用户态线程栈的情况为:
0007ED60  7C80B913  kernel32.7C80B913
0007ED64  77BD159E    <------ESP:0x0007ED64
ESP-4的地址存放着0x7C80B90E处call sub_7C80250B的返回地址0x7C80B913,即lstrcpyW函数的最后一条指令的地址。
当lstrcpyW返回之后,用户态线程栈的情况为:
由于lstrcpyW本身有两个参数,所以返回的时候会将ESP的值减0xC(每个参数4字节,两个参数共8字节,返回地址4字节,加起来一共0xC字节)。此时ESP-0x10处的值仍然是lstrcpyW函数的最后一条指令的地址。因此,可以将此处作为该API的一条指纹。具体的在获取API在当前运行环境的信息时,先调用lstrcpyW函数,返回之后,读取ESP-0x10处的值。对于此值,使用模糊对比方法,即如果此值处于kernel32.dll的地址空间中,则可以认为是在真实的操作***运行环境中运行;如果此值不处于kernel32.dll的地址空间中,则认为当前运行环境是虚拟构造的运行环境。
6.以SEH异常处理函数返回后的栈数据作为API指纹及判断运行环境真实性
SEH异常处理函数的处理其实也需要通过***函数,可以先在用户代码中设置SEH处理函数,然后制造一个异常,使得代码的执行流程转向异常处理函数:
当执行0041CA02处的地址时,发生异常,转到***处理函数。在***将控制权交异常处理函数之前,代码如下:
这个函数是由以下的函数调用:
所以当7C923786处执行调用call 7C923799时,会在栈上留下此函数的返回地址。通过分析0x7C923799处的函数,可以知道,当***将控制权交给异常处理函数时,栈的状态为:
可以看到,[ESP+0x24]处保留着0x7C923786处调用函数的返回地址。可以此处值作为API指纹进行检测。具体的,当通过异常转到SEH异常处理函数时,可以检测[ESP+0x24]处的地址,如果此处的值处于ntdll.dll模块空间范围之内,则认为在真实的操作***运行环境中运行;如果此处值不在ntdll.dll模块空间范围之内,则认为当前运行环境是虚拟构造的。
7.进程或线程启动之后返回用户代码之后以栈数据作为指纹及判断方法
新创建进程的第一个线程是由windows内核KiThreadStartup中发起的一个用户态APC所启动的。在***将运行权交给可执行代码之前,会执行如下代码:
在将控制权交给用户代码之前,会先调用NtSetInformationThread函数,在进入NtSetInformationThread函数时,栈状态为:
此时再通过7C816D4C call dword ptr[ebp+8]转到用户代码中。此时栈的状态是:
通过以上分析可以看出,ESP-0x10处仍然保存着callds:NtSetInformationThread的返回地址。因此可以将这个值作为API指纹。具体的,在线程进入之后,读取ESP-0x10处的值,如果此值处于Kernel32.dll动态链接库地址空间范围之内,则认为是在真实的操作***环境中运行;如果不处于kernel32.dll地址空间范围之内,则认为当前运行环境是虚拟构造的。
与本发明实施例提供的检测运行环境真实性的方法相对应,本发明实施例还提供了一种提供了检测运行环境真实性的装置,参见图2,该装置具体可以包括:
信息获取单元201,用于获取应用程序编程接口API在当前运行环境中的信息;
对比单元202,用于将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比,得到一对比结果;所述API的指纹信息为API在真实运行环境中的特征信息;
验证单元203,用于根据所述对比结果验证当前运行环境是否为真实运行环境。
其中信息获取单元201可以包括:
第一信息获取子单元,用于获取至少两个API在当前运行环境中的信息;
验证单元203包括:
第一验证子单元,用于如果各个API在当前运行环境中的信息均与相应API的指纹信息相同,则所述当前运行环境为真实运行环境。
或者,信息获取单元201也可以包括:
第二信息获取子单元,用于获取特定或随机选取的API在当前运行环境中的信息;
相应的,验证单元203可以包括:
第二验证子单元,用于如果所述随机选取的API在当前运行环境中的信息与相应API的指纹信息相同,则所述当前运行环境为真实运行环境。
具体实现时,同一API可以对应有至少两种指纹信息;
此时,对比单元202可以包括:
第一对比子单元,用于对于同一API,将其在当前运行环境中的信息,与预先获取到的该API的至少两种指纹信息分别进行对比;
相应的,验证单元203可以包括:
第三验证子单元,用于对于同一API,如果其在当前运行环境中的信息与预先获取到的该AP I的至少两种指纹信息均相同,则所述当前运行环境为真实运行环境。
其中,API的指纹信息可以包括API本身的代码;信息获取单元201可以包括:
第三信息获取子单元,用于获取相应API在当前运行环境中的代码;
对比单元202可以包括:
第二对比子单元,用于将所述API在当前运行环境中被调用时产生的信息与预先获取到的相应API在真实运行环境中被调用时产生的信息进行对比。
针对API的指纹信息可以包括,API在被调用的情况下产生的特征信息;信息获取单元201,还可以包括:
第四信息获取子单元,用于获取API在当前运行环境中被调用时产生的信息;
对比单元202包括:
第三对比子单元,用于将所述API在当前运行环境中被调用时产生的信息与预先获取到的相应API在真实运行环境中被调用时产生的信息进行对比。
其中,API在被调用的情况下产生的特征信息可以包括API在被调用的情况下寄存器的值;此时,信息获取单元201可以包括:
寄存器值获取单元,用于获取API在当前运行环境中被调用时寄存器的值;
所述第三对比子单元具体用于将所述API在当前运行环境中被调用时寄存器的值与预先获取到的相应API在真实运行环境中被调用时寄存器的值进行对比。
API在被调用的情况下寄存器的值包括:
API运行返回后寄存器的值;
和/或,
进程或线程启动并返回用户空间代码之后寄存器保存的值。
API在被调用的情况下产生的特征信息也可以包括,API在被调用时产生的栈数据;信息获取单元201,可以包括:
栈数据获取单元,用于获取API在当前运行环境中被调用时产生的栈数据;
所述第三对比子单元具体用于将所述API在当前运行环境中被调用时产生的栈数据与预先获取到的相应API在真实运行环境中被调用时产生的栈数据进行对比。
API在被调用时产生的栈数据包括:
API运行并返回后的栈数据;
和/或,
进程或线程启动并返回用户空间代码之后的栈数据。
通过本发明实施例提供的上述装置,能够利用操作***提供的API在真实的运行环境和虚拟的运行环境下可以呈现出的不同特征作为参考,来检测运行环境的真实性,由于API的数量众多,因此,极大的提高了模拟真实运行环境的难度,进而也就提高了检测运行环境真实性的准确度。
综上所述,由于通常常用操作***都提供了大量API,以及每个API通常有多个可供比较的参考值,基于这些特点,在对比了API在当前运行环境中的信息,与API指纹特征信息后,根据对比结果验证当前运行环境的真实性的方法,能够有效的提高建造虚拟环境的难度,以及对运行环境真实性检测的可靠性和有效性,同时,本发明提供的方法还具有以往传统检测方法所缺乏的多种***的适用性。同时,本发明实施例提供的方法,不仅能够应有与软件保护领域,在其他的需要对运行环境真实性检测的应用场合,应用本发明实施例提供的方法,同样可以达到准确和有效地检测运行环境真实性的效果。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或***实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及***实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上对本发明所提供的检测运行环境真实性的方法及装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。

Claims (20)

1.一种检测运行环境真实性的方法,其特征在于,包括:
获取应用程序编程接口API在当前运行环境中的信息;所述获取API在当前运行环境中的信息包括:获取相应API在当前运行环境中的代码,或者,获取API在当前运行环境中被调用时产生的信息;
将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比,得到一对比结果;所述API的指纹信息为API在真实运行环境中的特征信息;
根据所述对比结果验证当前运行环境是否为真实运行环境。
2.根据权利要求1所述的方法,其特征在于,所述API在当前运行环境中的信息,包括:获取的至少两个API在当前运行环境中的信息;
所述根据所述对比结果验证当前运行环境是否为真实运行环境包括:
如果各个API在当前运行环境中的信息均与相应API的指纹信息相同,则所述当前运行环境为真实运行环境。
3.根据权利要求1所述的方法,其特征在于,所述获取API在当前运行环境中的信息,包括:
获取随机选取的API在当前运行环境中的信息;
所述根据所述对比结果验证当前运行环境是否为真实运行环境包括:
如果所述随机选取的API在当前运行环境中的信息与相应API的指纹信息相同,则所述当前运行环境为真实运行环境。
4.根据权利要求1所述的方法,其特征在于,同一API对应有至少两种指纹信息;
所述将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比,包括:
对于同一API,将其在当前运行环境中的信息,与预先获取到的该API的至少两种指纹信息分别进行对比;
所述根据所述对比结果验证当前运行环境是否为真实运行环境包括:
对于同一API,如果其在当前运行环境中的信息与预先获取到的该API的至少两种指纹信息均相同,则所述当前运行环境为真实运行环境。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述API的指纹信息包括,API本身的代码;
所述将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比包括:
将所述API在当前运行环境中的代码与预先获取到的相应API在真实运行环境中的代码进行对比。
6.根据权利要求1至4任一项所述的方法,其特征在于,所述API的指纹信息包括,API在被调用的情况下产生的特征信息;
所述将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比包括:
将所述API在当前运行环境中被调用时产生的信息与预先获取到的相应API在真实运行环境中被调用时产生的信息进行对比。
7.根据权利要求6所述的方法,其特征在于,所述API在被调用的情况下产生的特征信息包括,API在被调用的情况下,寄存器的值;
所述获取API在当前运行环境中的信息,包括:
获取API在当前运行环境中被调用时,寄存器的值;
所述将所述API在当前运行环境中被调用时产生的信息与预先获取到的相应API在真实运行环境中被调用时产生的信息进行对比包括:
将所述API在当前运行环境中被调用时寄存器的值与预先获取到的相应API在真实运行环境中被调用时寄存器的值进行对比。
8.根据权利要求7所述的方法,其特征在于,所述API在被调用的情况下寄存器的值包括:
API运行返回后寄存器的值;
或,
进程或线程启动并返回用户空间代码之后寄存器保存的值。
9.根据权利要求6所述的方法,其特征在于,所述API在被调用的情况下产生的特征信息包括API在被调用时产生的栈数据;
所述获取API在当前运行环境中的信息,包括:
获取API在当前运行环境中被调用时产生的栈数据;
所述将所述API在当前运行环境中被调用时产生的信息与预先获取到的相应API在真实运行环境中被调用时产生的信息进行对比包括:
将所述API在当前运行环境中被调用时产生的栈数据与预先获取到的相应API在真实运行环境中被调用时产生的栈数据进行对比。
10.根据权利要求9所述的方法,其特征在于,所述API在被调用时产生的栈数据包括:
API运行并返回后的栈数据;
或,
进程或线程启动并返回用户空间代码之后的栈数据。
11.一种检测运行环境真实性的装置,其特征在于,包括:
信息获取单元,用于获取应用程序编程接口API在当前运行环境中的信息;具体的,所述信息获取单元用于获取相应API在当前运行环境中的代码,或者,用于获取API在当前运行环境中被调用时产生的信息;
对比单元,用于将所述API在当前运行环境中的信息,与预先获取到的相应API的指纹信息进行对比,得到一对比结果;所述API的指纹信息为API在真实运行环境中的特征信息;
验证单元,用于根据所述对比结果验证当前运行环境是否为真实运行环境。
12.根据权利要求11所述的装置,其特征在于,所述信息获取单元,包括:
第一信息获取子单元,用于获取至少两个API在当前运行环境中的信息;
所述验证单元包括:
第一验证子单元,用于如果各个API在当前运行环境中的信息均与相应API的指纹信息相同,则所述当前运行环境为真实运行环境。
13.根据权利要求11所述的装置,其特征在于,所述信息获取单元,包括:
第二信息获取子单元,用于获取随机选取的API在当前运行环境中的信息
所述验证单元包括:
第二验证子单元,用于如果所述随机选取的API在当前运行环境中的信息与相应API的指纹信息相同,则所述当前运行环境为真实运行环境。
14.根据权利要求11所述的装置,其特征在于,同一API对应有至少两种指纹信息;
所述对比单元包括:
第一对比子单元,用于对于同一API,将其在当前运行环境中的信息,与预先获取到的该API的至少两种指纹信息分别进行对比;
所述验证单元包括:
第三验证子单元,用于对于同一API,如果其在当前运行环境中的信息与预先获取到的该API的至少两种指纹信息均相同,则所述当前运行环境为真实运行环境。
15.根据权利要求11至14任一项所述的装置,其特征在于,所述API的指纹信息包括,API本身的代码;
所述信息获取单元,还包括:
第三信息获取子单元,用于获取相应API在当前运行环境中的代码;
所述对比单元包括:
第二对比子单元,用于将API在当前运行环境中的代码与预先获取到的相应API在真实运行环境中的代码进行对比。
16.根据权利要求11至14任一项所述的装置,其特征在于,所述API的指纹信息包括,API在被调用的情况下产生的特征信息;
所述信息获取单元,还包括:
第四信息获取子单元,用于获取API在当前运行环境中被调用时产生的信息;
所述对比单元包括:
第三对比子单元,用于将所述API在当前运行环境中被调用时产生的信息与预先获取到的相应API在真实运行环境中被调用时产生的信息进行对比。
17.根据权利要求16所述的装置,其特征在于,所述API在被调用的情况下产生的特征信息包括,API在被调用的情况下寄存器的值;
所述信息获取单元,包括:
寄存器值获取单元,用于获取API在当前运行环境中被调用时寄存器的值
所述第三对比子单元具体用于将所述API在当前运行环境中被调用时寄存器的值与预先获取到的相应API在真实运行环境中被调用时寄存器的值进行对比。
18.根据权利要求17所述的装置,其特征在于,所述API在被调用的情况下寄存器的值包括:
API运行返回后寄存器的值;
和/或,
进程或线程启动并返回用户空间代码之后寄存器保存的值。
19.根据权利要求16所述的装置,其特征在于,所述API在被调用的情况下产生的特征信息包括包括,API在被调用时产生的栈数据;
所述信息获取单元,包括:
栈数据获取单元,用于获取API在当前运行环境中被调用时产生的栈数据;
所述第三对比子单元具体用于将所述API在当前运行环境中被调用时产生的栈数据与预先获取到的相应API在真实运行环境中被调用时产生的栈数据进行对比。
20.根据权利要求19所述的装置,其特征在于,所述API在被调用时产生的栈数据包括:
API运行并返回后的栈数据;
和/或,
进程或线程启动并返回用户空间代码之后的栈数据。
CN201210182641.4A 2012-06-04 2012-06-04 一种检测运行环境真实性的方法及装置 Active CN102722672B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210182641.4A CN102722672B (zh) 2012-06-04 2012-06-04 一种检测运行环境真实性的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210182641.4A CN102722672B (zh) 2012-06-04 2012-06-04 一种检测运行环境真实性的方法及装置

Publications (2)

Publication Number Publication Date
CN102722672A CN102722672A (zh) 2012-10-10
CN102722672B true CN102722672B (zh) 2015-10-14

Family

ID=46948429

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210182641.4A Active CN102722672B (zh) 2012-06-04 2012-06-04 一种检测运行环境真实性的方法及装置

Country Status (1)

Country Link
CN (1) CN102722672B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104951355B (zh) * 2015-07-03 2019-02-26 北京数字联盟网络科技有限公司 识别应用程序虚拟运行环境的方法和装置
CN105912417B (zh) * 2016-04-11 2019-03-15 珠海豹趣科技有限公司 虚拟***的检测方法和相关软件运行方法以及相关装置
CN106204042B (zh) * 2016-07-20 2019-12-10 深圳怡化电脑股份有限公司 一种自助终端业务敏感信息的处理方法及***
CN108287997B (zh) * 2018-01-10 2020-07-31 武汉斗鱼网络科技有限公司 目标应用程序的宿主环境识别方法、装置、介质及设备
CN109309664B (zh) * 2018-08-14 2021-03-23 中国科学院数据与通信保护研究教育中心 一种浏览器指纹探测行为监测方法
CN110597557B (zh) * 2019-09-12 2024-06-07 腾讯科技(深圳)有限公司 一种***信息获取方法、终端及介质
CN111062032A (zh) * 2019-12-13 2020-04-24 上海钧正网络科技有限公司 异常检测方法和***及计算机可读存储介质
CN111538985A (zh) * 2020-01-22 2020-08-14 ***股份有限公司 Android应用运行环境检测方法及其装置
CN111611579B (zh) * 2020-05-26 2022-09-23 福建天晴在线互动科技有限公司 一种基于驱动特征检测powershadow虚拟环境的方法及其***
CN112468446B (zh) * 2020-11-02 2023-04-07 上海绊糖信息科技有限公司 一种保护用户隐私的移动运行环境安全检测***

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1625121A (zh) * 2003-12-05 2005-06-08 中国科学技术大学 一种分层协同的网络病毒和恶意代码识别方法
CN102034050A (zh) * 2011-01-25 2011-04-27 四川大学 基于虚拟机和敏感Native API调用感知的恶意软件动态检测方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7739698B2 (en) * 2006-05-25 2010-06-15 International Business Machines Corporation Multiplatform API usage tool

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1625121A (zh) * 2003-12-05 2005-06-08 中国科学技术大学 一种分层协同的网络病毒和恶意代码识别方法
CN102034050A (zh) * 2011-01-25 2011-04-27 四川大学 基于虚拟机和敏感Native API调用感知的恶意软件动态检测方法

Also Published As

Publication number Publication date
CN102722672A (zh) 2012-10-10

Similar Documents

Publication Publication Date Title
CN102722672B (zh) 一种检测运行环境真实性的方法及装置
Dureuil et al. From code review to fault injection attacks: Filling the gap using fault model inference
CN105760787B (zh) 用于检测随机存取存储器中的恶意代码的***及方法
CN106326737B (zh) 用于检测可在虚拟堆栈机上执行的有害文件的***和方法
JP7154365B2 (ja) ソフトウェアコードをセキュアにするための方法
US10013553B2 (en) Protecting software application
Kim et al. A Brief Survey on Rootkit Techniques in Malicious Codes.
CN104361285B (zh) 移动设备应用程序的安全检测方法及装置
CN109271789B (zh) 恶意进程检测方法、装置、电子设备及存储介质
CN109388946B (zh) 恶意进程检测方法、装置、电子设备及存储介质
CN102043915A (zh) 一种非可执行文件中包含恶意代码的检测方法及其装置
CN110442379A (zh) 保护有条件的推测指令执行
CN106789837B (zh) 网络异常行为检测方法及检测装置
CN103116715A (zh) Windows平台可执行文件API延迟导入保护方法
US20160092313A1 (en) Application Copy Counting Using Snapshot Backups For Licensing
US9514028B2 (en) System and method for determining correct execution of software based on baseline and real time trace events
US20140096258A1 (en) Correcting workflow security vulnerabilities via static analysis and virtual patching
US20240193278A1 (en) Vulnerability analysis of a computer driver
CN106709335B (zh) 漏洞检测方法和装置
Razafindralambo et al. A friendly framework for hidding fault enabled virus for Java based smartcard
US10169190B2 (en) Call trace generation via behavior computation
CN109933986A (zh) 恶意代码检测方法及装置
He et al. Exploiting binary-level code virtualization to protect Android applications against app repackaging
CN110516445A (zh) 反检测恶意代码的识别方法、装置及存储介质
Gao et al. Quorum chain-based malware detection in android smart devices

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
ASS Succession or assignment of patent right

Owner name: QIZHI SOFTWARE (BEIJING) CO., LTD.

Effective date: 20120926

Owner name: BEIJING QIHU TECHNOLOGY CO., LTD.

Free format text: FORMER OWNER: QIZHI SOFTWARE (BEIJING) CO., LTD.

Effective date: 20120926

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 100016 CHAOYANG, BEIJING TO: 100088 XICHENG, BEIJING

TA01 Transfer of patent application right

Effective date of registration: 20120926

Address after: 100088 Beijing city Xicheng District xinjiekouwai Street 28, block D room 112 (Desheng Park)

Applicant after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Applicant after: Qizhi software (Beijing) Co.,Ltd.

Address before: The 4 layer 100016 unit of Beijing city Chaoyang District Jiuxianqiao Road No. 14 Building C

Applicant before: Qizhi software (Beijing) Co.,Ltd.

C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee after: Beijing Qizhi Business Consulting 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.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220330

Address after: 100016 1773, 15 / F, 17 / F, building 3, No.10, Jiuxianqiao Road, Chaoyang District, Beijing

Patentee after: Sanliu0 Digital Security Technology Group 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: Beijing Qizhi Business Consulting Co.,Ltd.