1、2014年全国大学生信息安全竞赛作品报告作品名称: 基于沙盒技术的恶意行为分析平台 电子邮箱: 137812951 提交日期: 2015年5月28日 填写说明1. 所有参赛项目必须为一个基本完整的设计。作品报告书旨在能够清晰准确地阐述(或图示)该参赛队的参赛项目(或方案)。2. 作品报告采用A4纸撰写。除标题外,所有内容必需为宋体、小四号字、1.5倍行距。3. 作品报告中各项目说明文字部分仅供参考,作品报告书撰写完毕后,请删除所有说明文字。(本页不删除)4. 作品报告模板里已经列的内容仅供参考,作者可以在此基础上增加内容或对文档结构进行微调。5. 为保证网评的公平、公正,作品报告中应避免出现作
2、者所在学校、院系和指导教师等泄露身份的信息。目 录摘要1第一章 作品概述2第二章 作品设计与实现3第三章 作品测试与分析4第四章 创新性说明5第五章 总结6参考文献7摘要1 作品介绍背景和意义相关研究(基础):看最近几年的硕士论文的第二章国内外研究现状,主要包括几点:(1)目前的病毒主流查杀技术介绍(从杀毒软件厂商角度,主要的查杀技术;从学术研究的角度,论文中查杀技术的主要研究)。(2)沙盒技术的现状,也是从论文研究的角度和目前的沙盒工具两个方面写主要内容:分3点以上,对应本文完成的几个功能块(1) 环境搭建,(2) 病毒行为分类(3) 平台设计与实现(4) 检测报告2 基于沙盒技术的恶意行为
3、分析平台(作品)设计(1)需求分析(简单说明要做的事情)(2)功能分析:功能图具体流程图针对图中的每个功能模块或每个流程都有一段说明 3 作品实现 流程图4 作品测试5 创新性6 总结参考文献摘要(请简要说明创作本作品之动机、功能、特性、创新处、实用性)随着时代的发展,计算机已成为人们生活中不可缺失的工具,尤其是网络,与人们的生活密切相关,且由于网络的普及,人们在网络上的交流愈来愈方便,但恶意代码和网络攻击也日益频繁,造成的危害也越来越大,所以恶意代码的研究和分析工作也就变的不可忽视了。由于恶意代码愈来愈复杂多样性,因此传统的基于特征码检测的静态方法便更难以检测出未知的恶意代码了,而沙盒技术可
4、以对可执行程序进行动态分析与检测,其在一定程度上可以弥补静态分析方法的不足之处。在对基于传统沙盒的分析方法深入研究的基础上,本文提出了一种基于沙盒的恶意代码根据API函数调用行为统计并匹配的统一方案,该方案根据恶意代码的动态行为及其对计算机系统的影响,对其恶意性进行了分级,并能够通过动态分析自动报告恶意代码的恶意等级,使得用户可以一目了然地看出被测程序的恶意程度。基于该方案,本文设计并实现了一款针对可执行程序的恶意代码检测工具Blackbirdbox。与以前的工具相比,本文实现的工具在检测方面有以下四个优点:第一、使用沙盒技术,整套工具都在沙盒环境中运行,使得保证了检测的完整性和系统的无破坏性
5、;第二、实现了一个有针对性的API监视器,在一定程度上缩小了监测范围,提高了检测效率;第三、能够对未知的恶意代码进行检测;第四、能够自动分析并报告被测程序的恶意等级,使得用户更直接的知道其恶意程度。第五、专门针对具有反沙箱技术的恶意代码来研发了一套专门防止反沙盒技术的恶意代码在沙盒中不展露恶意行为的方案。在系统的设计上采用了面向组件的设计思想,使得各个组件之间分工较为清晰,能够区分其功能和达到的结果。最后,本团队利用该检测工具对“熊猫烧香”“某某某”“不知名”等典型恶意代码程序进行了检测,实验结果证明本文提出的检测方法是具有可行性的,且工具有效的实现了功能。声明:测试的所有恶意代码样本都进行过
6、脱壳处理,因此暂不考虑加壳情况。第 43 页 共 7页第一章 作品概述(建议包括:背景分析、相关工作、特色描述及应用前景分析等) 1.1 背景分析 在当今的信息时代,互联网的发展与广泛应用深刻改变 了人们的生活方式,大大加快了人类的工作进程、信息获取,使其自由交流沟通越来越简单。然而,针对这些的攻击和犯罪层出不穷在现有的系统中,大多数用来维持安全性的技术通常作 为独立的程序来实现,但是在实现时把用来加强安全性和监视系统活动的技术与系统被攻击部分隔离开也很重要,这就是沙盒技术的来源。现在,传统的恶意程序分析方法已经得到了最大化的研究 ,基于检测的攻防方法能够快速准确地对已经出现的恶意程序进行检测
7、。但其缺乏一定的灵活性,而且对于未知的恶意程序无能为力。而近些年来,黑客的地下发展、团队协作、 智能化等让这种检测越来越无能为力。因此,提出了新的终端防护技术要求,而沙盒技术正是符合此要求的可以解决这些问题的技术 。 1.2 相关工作首先在前期工作中,对沙盒技术的定义以及含义做了深刻,随后对于目前国内外恶意程序主流的检测方法做了分类以及说明,详情如下:1.21 沙盒技术沙盒在计算机领域主要是指一个严格受控的环境,程序在其中运行时的状态、所使用或访问的资源都受到严格的记录和控制。沙盒根据指令对全系统进行模拟,对一个程序的访问资源、执行环境按照规则赋予一定的访问权限。这样程序只能在建立的沙盒里面进
8、行相关操作,限制了恶意程序的危害。每个程序在自己的受保护的沙盒之中运行,不会影响到其他程序的运行,同样,这些程序的运行也不会影响操作系统的正常运行。 12.2 特征码法 特征码识别技术借助反汇编引擎对二进制程序进行静态反汇编,对得到的静态代码进行一些关键性的代码判断比较,包含此代码就被识别为恶意程序。特征码法早期应用于 SCAN、CPAV等著名病毒检测工具中。国外专家认为特征码法是检测已知病毒的最简单、开销最小的方法。 12.3 基于行为的检测法 它是利用病毒的特有行为特征来监测病毒的一种方法 。 当程序运行时,监视其行为,如果发现了病毒行为,立即报警,另外行为特征识别通常需要使用类神经网络一
9、类方法来训练分析器,并能够准确地用形式化的方法来定义恶意代码的特征。 12.4 基于特征函数的检测方法恶意代码要实现特定功能,必要使用系统的API函数 (包括内核级和用户级的),因此如果某个程序调用了危险的 特定函数集合,我们有理由怀疑其可能是恶意代码。在程序加载之前,对于引入的任何程序文件,我们扫描其代码获得其 系统函数集合(这个过程可能需要代码逆向技术和虚拟机配 合),并将其与我们对多个恶意代码分析后设置好的一系列特 征函数集合做交集运算,这样就可以知道该程序文件使用了哪些危险的函数,并大致可以估计其功能和属于哪种类型。1.3 特色描述本系统采用了虚拟环境+恶意代码分析的思想结合,在创建一
10、个安全的虚拟环境的前提下对恶意代码进行分析。现在市场上大部分的恶意代码检测技术大多为特征库的比配技术,这种技术的优点是能快速匹配效率高,但是对于未知的恶意代码却无能为力,而现在市场上的恶意代码分析技术却没有一个安全的环境,因此本作品是在虚拟仿真层的实现与检测。本系统采用了采用了APIhook技术,虚拟沙箱技术,静态分析技术,动态分析技术,来实现在本机系统下对未知恶意代码的检测与分析。本系统特色如下:(1) :采用沙盒技术来实现虚拟仿真环境的实现,并运用回滚机制使得运行程序不会对本机真实系统产生影响。(2) :对恶意代码进行全方面的监控(3) :对监控结果进行针对性的分析,并生成分析报告(4)
11、:针对分析结果按照行为危害性生成处理意见(5) :采用APIhook技术,生成DLL文件并注入到运行文件中进行监控,返回其调用API函数的地址值,从而实现了精准API监控的技术(6) :针对市面上的某些恶意代码有反沙盒技术,使得其能逃脱沙盒下恶意代码的检测,因此本系统中采用了反沙盒技术的分析,对在构架的仿真虚拟环境中运行的恶意代码进行反沙盒技术的分析,保证在构架的虚拟仿真环境中的漏报率降低。1.4 应用前景分析本系统能够使恶意代码进行在沙盒中运行,对其恶意行为进行监控分析并生成分析报告。并且保护主机的安全不被恶意代码入侵,在如今恶意代码安全事件越来越多的情况下,具有很广阔的应用前景。 1、 保
12、护我们的个人隐私资料,当有黑客利用恶意软件来监控我们的电脑,以窃取我们的个人隐私时,便可以通过本系统来保护。2、 恶意代码是黑客用来控制系统,进行网络攻击的主要形式。本系统便可以通过检测恶意代码来保护我们的系统,维护我们的网络。3、 本系统还可以应用于网络应急响应和恶意代码取证等方面。4、 为企业保护内部关键资料、公司机密文件、客户资料提供服务,提高企业竞争力;5、 防止黑客利用恶意代码来入侵政府、军队的网络,保护政府、军队机要秘密文件不被窃取。6、 为银行业务、电子商务提供服务,保护银行客户的个人资料不被泄露,保护电子商务的信息不被窃取。7、 应用沙盒技术,降低未知程序的安全风险、打造可信的
13、安全环境和提升应用的可靠性。由于在沙盒中进行的操作是相对安全的,即不会对用户计算机本身造成巨大伤害,因此为了保证系统的内核和关键组件不会被病毒、恶意程序、或者程序开发过程中发生的失误或者意外所破坏,让机器能够始终在稳定的情况下运行,引入沙盒技术也是必要的,这样可以极大地降低系统所面临的风险。沙盒技术在信息安全尤其是网络安全领域的崭露头角,给这个行业带来了一种新的思维,也带来了一股清新的空气,我们有理由相信,在信息安全领域,沙盒技术能够得到进一步的发展和完善,同时,也将有更大的施展拳脚的空间。第二章 作品设计与实现(建议包括系统方案、实现原理、硬件框图、软件流程、功能、指标等) 2.1 系统方案
14、对于以上理论基础以及拓展,本团队提出了一下基于沙盒技术的恶意行为分析平台的设计与实现方法,以此建立一个仿真的沙盒环境来运行程序并利用API监视器对此进行判断,以此来根据输出的返回值来判断是否为恶意代码并为其打印出一份行为分析报告。2.2 实现原理下面是对于系统方案的拓展以及原理实现2.2.1沙盒环境的搭建 沙盒环境是在本地操作系统基础上,采用底层技术手段实现访问资源以及进程的限制和隔离,构造出与本地系统共存但相互间完全隔离的虚拟计算环境。其中隔离的内容包括:进程对象、内存、注册表、文件、窗口消息等,也就是说,沙盒内外的应用是相互不知道对方的存在,也不能进行交互的。因此,即使本地系统上存在病毒、
15、木马,也无法感染或探测到沙盒中的重要应用或文件。相应的,当在沙盒中完成业务操作,退出沙盒后,系统会恢复到初始状态,过程中敏感的业务数据不会落在终端本地。 下面介绍一下沙箱环境的搭建。我们的blackbirdbox中的sandbox环境主要是由安装sandbox部分、初始化sandbox部分、开始sandbox部分、停止sandbox部分、回滚以及重定向部分等组成。 首先来介绍一下安装sandbox部分。此部分中调用我们自己定义两个的函数。分别为:检查安装函数(CheckIsInstalled)和sandbox的安装函数(InstallSandBox)。在这部分中我们通过检查安装函数来检查是否已
16、经安装过沙盒,如果安装过则会跳出这部分。如果没有则会运行下一个函数即安装函数来安装沙盒,安装完毕后也一样跳出这一部分。在检查安装函数中通过判断指定打开的注册表是否为空,来判断sandbox是否安装过。下面只是源代码中的部分代码,具体请看源代码。代码示例:RegOpenKeyEx(HKEY_LOCAL_MACHINE,szRegProgramPath,0,KEY_ALL_ACCESS,&hkProgram);if( hkProgram = NULL )/Not installed iInstalled = 0;Else/Installed iInstalled = 1; 而在sandbox安装函
17、数中我们有调用了自己定义的几个函数一起安装sandbox。这些函数分别为创建软件注册CreateSoftwareRegistry()、安装软件注册表函数SetupSoftwareRegistry()、安装注册注册表函数SetupRegRegistry()、创建cloneapi目录函数CreateCloneAPIDirectory()和 安装注册sandbox函数SetupRegSandBox();我们通过调用这些函数最终使得指定的注册表键不为空,从而创建成功沙盒。下面只是源代码中的部分代码,具体请看源代码。代码示例:int SetupRegSandBox(IN const WCHAR * lp
18、SandBoxName)/Create RestorePath /lstrcat(szRestorePath,L);lstrcat(szRestorePath,lpSandBoxName); CreateDirectory(szRestorePath,NULL);/Create RestorePathDrive/WCHAR szRestoreDrivePathMAX_PATH = NULL;lstrcpy(szRestoreDrivePath,szRestorePath);lstrcat(szRestoreDrivePath,L);lstrcat(szRestoreDrivePath,CONF
19、_SandBox_Drive_Name); CreateDirectory(szRestoreDrivePath,NULL); /Create subkey SandBoxXXX /HKEY hkSandBox = NULL;WCHAR szRegSandBoxPath256 = NULL; WCHAR szSubKeyPath256 = NULL; lstrcpy(szRegSandBoxPath,LSOFTWARE);lstrcat(szRegSandBoxPath,CONF_SoftwareRegName);lstrcat(szRegSandBoxPath,L);lstrcat(szRe
20、gSandBoxPath,CONF_SoftwareReg_SandBox);lstrcat(szRegSandBoxPath,L);lstrcat(szRegSandBoxPath,lpSandBoxName);RegCreateKey(HKEY_LOCAL_MACHINE,szRegSandBoxPath,&hkSandBo);RegCloseKey(hkSandBox);/Create subkey SandBoxXXXSoftwarelstrcpy(szSubKeyPath,szRegSandBoxPath);lstrcat(szSubKeyPath,L);lstrcat(szSubK
21、eyPath,CONF_SoftwareReg_SandBox_Software);RegCreateKey(HKEY_LOCAL_MACHINE,szSubKeyPath,&hkSandBox);RegCloseKey(hkSandBox); return 0;int CreateCloneAPIDirectory(void)/Create directory/WCHAR szCloneAPIDirectoryMAX_PATH = NULL;GetModuleFileName(NULL,szCloneAPIDirectory,MAX_PATH);/PathRemoveFileSpec(szC
22、loneAPIDirectory);lstrcat(szCloneAPIDirectory,L);lstrcat(szCloneAPIDirectory,CONF_CloneAPI_DirectoryName);CreateDirectory(szCloneAPIDirectory,NULL);/kernel32.dllwsprintf(szOriginalPath,L%s%s,szSystemDirectory,Lkernel32.dll);wsprintf(szCloneAPIPath,L%s%s,szCloneAPIDirectory,CONF_CloneAPI_CloneKERNEL3
23、2);DeleteFile(szCloneAPIPath);CopyFile(szOriginalPath,szCloneAPIPath,TRUE);/advapi32.dllwsprintf(szOriginalPath,L%s%s,szSystemDirectory,Ladvapi32.dll);wsprintf(szCloneAPIPath,L%s%s,szCloneAPIDirectory,CONF_CloneAPI_CloneADVAPI32);DeleteFile(szCloneAPIPath);CopyFile(szOriginalPath,szCloneAPIPath,TRUE
24、);return 0;(1) 初始化sandbox (2) 。在此部分中我们调用了一个函数:sandbox初始化函数(SandBoxInitalization),在这个函数中我们通过对系统信息的检查、对权值的调整、对sandbox的检查和对环境的检查来完成对sandbox的初始化。在对系统信息的检查中我们主要是对操作系统版本、cup、系统信息、内存、驱动以及网络进行检查。在对环境的检查时我们主要是对组件的检查。下面只是源代码中的部分代码,具体请看源代码。代码示例:wprintf(L检查操作系统版本中.rn);OSVERSIONINFOEX OsVerInfoEx;OsVerInfoEx.dwO
25、SVersionInfoSize = sizeof(OSVERSIONINFOEX);if( !GetVersionEx(OSVERSIONINFO *)&OsVerInfoEx) )return -1;WCHAR szOsVerInfo256 = NULL;WCHAR szOsName32 = NULL;if( OsVerInfoEx.dwPlatformId = VER_PLATFORM_WIN32_NT )lstrcpy(szOsName,LUnknown);if( OsVerInfoEx.dwMajorVersion=4 )lstrcpy(szOsName,LNT);.wprintf(
26、L检查 CPU 信息中.rn);SYSTEM_INFO systeminfo;GetSystemInfo(&systeminfo);WCHAR szNumberOfProcessors256 = NULL;swprintf(szNumberOfProcessors,LCPU: t%d CPU installed.rn,systeminfo.dwNumberOfProcessors);wprintfex(szNumberOfProcessors,FOREGROUND_INTENSITY | FOREGROUND_BLUE);HKEY hCPUKey = NULL;./*调整权值函数*/int A
27、djustPrivileges(void)if( EnableSpecificPrivilege(TRUE,SE_BACKUP_NAME) = FALSE )wprintfex(LEnable SE_BACKUP_NAME privilege failed!rn,FOREGROUND_INTENSITY | FOREGROUND_RED);iRet = -1;if( EnableSpecificPrivilege(TRUE,SE_CHANGE_NOTIFY_NAME) = FALSE )wprintfex(LEnable SE_CHANGE_NOTIFY_NAME privilege fail
28、ed!rn,FOREGROUND_INTENSITY | FOREGROUND_RED);iRet = -1;.return iRet;/*检查环境*/int CheckEnvironment(void)/检查环境int iOpenProcError = 0;HANDLE hSnapshot = NULL;PROCESSENTRY32 pe32;hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );if( hSnapshot = NULL )return -1;pe32.dwSize = sizeof( PROCESSENT
29、RY32 );Process32First( hSnapshot, &pe32 );.return iRet;int SelfCheck(void)wprintfex(L自我检查中.请稍等一会.rnrn,FOREGROUND_INTENSITY | FOREGROUND_GREEN|FOREGROUND_BLUE);.return 1;(3) 开始sandbox(4) ;在这部分中我们调用了BeginSandBoxRoutine函数来进行开始运行sandbox。在这个函数中我们先把要打开的sandbox找到。并将它打开。然后查询这个sandbox的状态,即是否已经在此电脑中安装。如果安装就可以
30、运行。在查询以后我们就可以让可执行文件在这个sandbox中运行。从而来观察这个可执行文件的运行状态。下面只是源代码中的部分代码,具体请看源代码。代码示例:int BeginSandBoxRoutine(void)/Adjust Privileges/AdjustPrivileges();/List SandBox/int iRet = 0;iRet = ListSandBoxToBegin();if( iRet = -1 )return -1;/Waiting order/wprintfex(Lrn通告 请输入一个指数(例如. 1) 或者 sandbox的名字(例如. DefaultBox)
31、:rn,FOREGROUND_INTENSITY | FOREGROUND_GREEN);WCHAR szUserInput256 = NULL;_getws(szUserInput);.int BeginSandBoxDispatch(IN const WCHAR * lpString)if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,szRegSandBoxPath,NULL,KEY_ALL_ACCESS,&hkSandBoxMain) = ERROR_SUCCESS )while( RegEnumKey(hkSandBoxMain,nId,szSandBoxName
32、,CONF_SandBoxNameLength+1) = ERROR_SUCCESS )/RegEnumKey nId+;if( nId = _wtoi(lpString) )if( BeginSandBoxByName(szSandBoxName) = -1 )iRet = -1;elseiRet = 0;.RegCloseKey(hkSandBoxMain);/Load RegHive /BeginSandBoxLoadRegHive(lpSandBoxName);/Create Registry SYNC /BeginSandBoxCreateRegistrySYNC(lpSandBox
33、Name);/Clean Callback /BeginSandBoxCleanCallback(lpSandBoxName);/.WCHAR szCommandLine512 = NULL;wsprintf(szCommandLine,L %s,lpSandBoxName);/Callback RegNotifyChangeKeyValue/HKEY hkRegistrySYNC = NULL;DWORD dwStartupInfo = 0;HANDLE hEventNotifyValue = NULL;DWORD dwType = REG_DWORD;DWORD dwBufLen = si
34、zeof(DWORD);BOOL bIsLauncherCalled = FALSE;.return 0; 接下来我们介绍停止sandbox部分,在这部分中我们调用了StopSandBoxRoutine函数来进行停止sandbox的运行。在这个函数中我们先要找到要停止的sandbox,然后调用Remove Registry SYNC函数 、Save RegHive函数、UnLoad RegHive 函数 、Update RegHive函数来停止sandbox的运行。下面只是源代码中的部分代码,具体请看源代码。代码示例:int StopSandBoxRoutine(void)iRet = Lis
35、tSandBoxToStop(); if( iRet = -1 )return -1;/Waiting order /wprintfex(Lrn通告 请输入指数(例如. 1) 或者sandbox的名称(例如. DefaultBox) :rn,FOREGROUND_INTENSITY | FOREGROUND_GREEN);WCHAR szUserInput256 = NULL;_getws(szUserInput);.StopSandBoxRemoveRegistrySYNC(lpSandBoxName);StopSandBoxSaveRegHive(lpSandBoxName);StopSa
36、ndBoxUnLoadRegHive(lpSandBoxName);.wprintfex(LrnNOTIFY SandBox 停止成功!rn,return 0; 最后我们来介绍一下此沙箱中的回滚和重定向部分。首先此沙箱中的回滚是在文件运行完以后,对系统继续回滚,使系统恢复到初始的状态。其中主要是两部分组成,一部分是如何来判断文件是否已经运行完全的函数,另一部分便是将系统进行回滚操作,将系统恢复成原始状态的函数。下面便是回滚的部分代码。代码示例:template class Rallpublic:Rall():cmd(NULL),m_bIsOK(false)Rall()if( NULL != c
37、md)if( !m_bIsOK ) (*cmd)();delete cmd;cmd = NULL;template void SetRall(Fun fun) if( NULL != cmd) delete cmd; cmd = NULL; cmd = new Functor(fun); template void SetRall(const PtrObj& p, MemFn memFn)if( NULL != cmd) delete cmd; cmd = NULL; cmd = new Functor(p, memFn);void OK() m_bIsOK = true; private:b
38、ool m_bIsOK;Functor* cmd;/*使用:TOOL:Rall r2;DataBase db;if( db.doDB(true) r2.SetRall(&db,&DataBase:UndoDB);else return;TOOL:Rall r1;if( doFun(true) r1.SetRall(UndoFun);else return;r1.OK();r2.OK();*/ 而此沙盒通过重定向技术,把程序生成和修改的文件,定向到自身文件夹中。此沙盒的重定向技术主要针对是注册表和文件。而在重定向注册表时,其实质主要是其实质就是维护注册表键,一。受影响的键不只是HKLM/Soft
39、ware,还包括:HKEY_CLASSES_ROOT、HKEY_CURRENT_USER/Software/Classes、HKEY_LOCAL_MACHINE/Software、HKEY_USERS/*/Software/Classes、HKEY_USERS/*_Classes等键。那么如何来维护这些注册表键呢?其维护的方法是采用一种被称为注册表反射的机制完成的。而注册表反射便是在注册表视图之间复制某些特定的注册表项和项值。下面便是重定向函数的部分代码。代码示例:#include DRIVER_INITIALIZE DriverEntry;DRIVER_UNLOAD DriverUnload
40、;EX_CALLBACK_FUNCTION RegistryCallback;LARGE_INTEGER g_CmRegstryCookie;extern PUSHORT NtBuildNumber;NTSTATUS DriverEntry( PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath ) NTSTATUS Status = STATUS_NOT_SUPPORTED; /KdBreakPoint(); if ( *NtBuildNumber = 6000 ) DriverObject-DriverUnload = Driv
41、erUnload; Status = CmRegisterCallback( RegistryCallback, DriverObject, &g_CmRegstryCookie ); return Status;VOID DriverUnload( PDRIVER_OBJECT DriverObject ) CmUnRegisterCallback( g_CmRegstryCookie );PVOID KmAlloc( SIZE_T PoolSize ) PVOID PoolBase = ExAllocatePoolWithTag( NonPagedPool, PoolSize, MmK_)
42、; if ( PoolBase ) RtlZeroMemory( PoolBase, PoolSize ); return PoolBase;VOID KmFree( PVOID PoolBase ) ExFreePoolWithTag( PoolBase, MmK_);NTSTATUS LfGetObjectName( IN CONST PVOID Object, OUT PUNICODE_STRING* ObjectName ) NTSTATUS Status = STATUS_INSUFFICIENT_RESOURCES; PUNICODE_STRING TmpName; ULONG R
43、eturnLength; ObQueryNameString( Object, (POBJECT_NAME_INFORMATION)&ReturnLength, sizeof(ULONG), &ReturnLength ); *ObjectName = NULL; TmpName = (PUNICODE_STRING)KmAlloc( ReturnLength ); 上述便是我们搭建沙盒环境的设计与实现方法,我们的恶意行为分析平台便是基于这个环境来实现的。2.2.2 API监视器的实现和输出 API 函数监视器的实现(1):自己实现的原因1:能拦截的更加准确,方便分析2:能方便输出,按自己的要求输出(2):Deto