CN103268441B - 一种计算机程序进行指令级监控和分析系统及方法 - Google Patents
一种计算机程序进行指令级监控和分析系统及方法 Download PDFInfo
- Publication number
- CN103268441B CN103268441B CN201310186311.7A CN201310186311A CN103268441B CN 103268441 B CN103268441 B CN 103268441B CN 201310186311 A CN201310186311 A CN 201310186311A CN 103268441 B CN103268441 B CN 103268441B
- Authority
- CN
- China
- Prior art keywords
- function
- instruction
- virtual machine
- analysis
- level
- 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.)
- Expired - Fee Related
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种计算机程序进行指令级监控和分析系统及方法。该监控和分析系统,包括云端服务器,宿主机,虚拟机,数据库DB和本地分析系统;云端服务器用于记录数据,同时作为异地数据分析系统对数据进行分析;宿主机用于提供一个环境存储动态链接库,并在需要的时候运行动态链接库中的函数;虚拟机用于调用init函数和callback函数,并提供函数SetCallback来设置callback函数;数据库DB用于存储指令级监控所得到的数据,以便供本地分析系统随时调用分析。本发明通过指令级别上的监控,实时、简单、准确地监控任意程序中的所有运行细节,并对这些细节进行数据分析,对恶意代码、后门间谍等程序的自动分析或者辅助分析带来巨大进步。
Description
技术领域
本发明涉及计算机安全和程序分析技术,尤其是一种计算机程序进行指令级监控和分析系统及方法。
背景技术
现有的计算机程序监控和分析技术只能做到函数级监控和分析,无法做到指令级别上的监控和分析。这里的“函数”指的是计算机程序中实现某个特定功能的一段子程序,而“指令”则是指每一条实现某种控制或运算的代码,指CPU指令,也就是计算机运行的最小单位。
函数级监控,指的是现有技术中被监控的程序对某个或某些特定函数的监视,包括有没有调用过这个(些)函数,调用的时间、调用参数和执行结果等,以便确定被监控的程序有没有执行这个(些)函数的功能,如果有则监控它调用这个(些)函数的执行动作和执行结果。并根据这样的监控结果来分析被监控程序的行为动作,以便进一步做出某种判断和告警等处理。
这种函数级监控技术有3个明显缺陷:
1)监控的最大精度只能精确到函数,而不是指令:也就是说,只能监控到被监控的程序是否执行过某个(些)函数,无法进一步细化到指令层次上的监控。
2)要监控的函数必须事先进行钩挂:要监控程序有没有执行过某个函数,必须事先对这个函数进行过钩挂处理,否则没办法监控到。所谓“钩挂”,指的是通过修改某个函数的入口地址或者函数体中的某些指令(通常是入口处的指令),来改变这个函数的执行流程,使该函数被调用时,首先执行一段设置好的监控程序代码,再去执行该函数本身;或者先执行该函数本身再执行一段监控程序代码;甚至完全不再执行原来的函数本身,而专门执行特定的监控程序代码等。这样,当调用被修改函数时,总是会执行一段设定好的监控程序代码,通过在这段监控程序代码中,记录这个函数的调用者身份,调用参数和执行结果等信息,才能实现对这个函数的监控。
3)要监控的函数必须是事先“公知”的:由于必须对要监控的函数进行钩挂处理,所以在被监控之前,必须详细知道这些函数的技术细节,这些细节包括:函数的加载地址,函数的参数,函数的执行效果和含义等。在现实环境中,一般只有操作系统本身的函数才能满足这些条件。而操作系统自身的函数数量极大,不可能实现完全监控,同时,它还有其他缺点,诸如:许多函数的技术细节没有公开,有些函数可能发生变化等。并且,即便能“强行”实现监控,也会因监控代码过于庞大而影响到操作系统本身,改变被监控程序的执行环境,使监控变得失真。
这三个缺陷导致了一些对程序的监控无法全面和详细的必然结果:由于只有操作系统本身的若干个函数才能够监控到,那么被监控的程序中大量的自有函数将无法监控到,它们的行为会“一团漆黑”;被监控的程序调用了没有事先钩挂的操作系统函数,这些动作也将无从得知,即造成“知之不详”的状况;同时,无法实现真正的行为自动分析。
发明内容
本发明的目的是提供一种计算机程序进行指令级监控和分析系统及方法,通过指令级别上的监控,实时、简单、准确地监控任意程序中的所有运行细节,并对这些细节进行数据分析,对恶意代码、后门间谍等程序的自动分析或者辅助分析带来巨大进步。
本发明的目的是这样实现的,一种计算机程序进行指令级监控和分析系统,其特征是:包括云端服务器,宿主机,虚拟机,数据库DB和本地分析系统;云端服务器用于记录数据,同时作为异地数据分析系统对数据进行分析;宿主机用于提供一个环境存储动态链接库,并在需要的时候运行动态链接库中的函数;虚拟机用于调用init函数和callback函数,并提供函数SetCallback来设置callback函数;数据库DB用于存储指令级监控所得到的数据,以便在数据分析时,供本地分析系统随时调用分析。
一种计算机程序进行指令级监控和分析方法,其特征是:至少包括如下步骤:
步骤201:开始本发明中指令级的监控过程;
步骤202:定制一个虚拟机并使它运行就绪;
步骤203:虚拟机执行一个初始化函数init,并加载一个动态链接库Attach.dll,在调用完成init函数后,继续按照正常虚拟机的代码运行;
步骤204:虚拟机虚拟执行一条指令,开始检测过程;
步骤205:在虚拟机执行完成一条指令之后,调用一次回调函数callback(PCALLBACKDATApstCallBackLog),在callback函数中,读取当前这条指令执行的记录,记录内容为LogRecord;
步骤206:将对当前指令的监控结果存储到数据库DB中,为指令级分析提供数据支持;
步骤207:判断当前指令级监控是否结束,若是进行步骤208,否则,进行步骤204;
步骤208:结束对当前程序的指令级监控;
所述步骤203函数init的工作流程,包括如下步骤,其特征是:
步骤301:开始初始化函数init的过程;
步骤302:加载动态链接库Attach.dll;
步骤303:从动态链接库Attach.dll中获得Start函数地址;
步骤304:执行函数Start;
步骤305:结束init函数的执行过程;
所述步骤304函数Start的工作流程,包括如下步骤,其特征是:
步骤401:开始执行函数Start;
步骤402:调用SetCallback设置一个CallBack函数指针;
步骤403:启动线程LoggingThread,以便于记录指令操作结果;
步骤404:结束Start函数的执行过程;
所述步骤205函数callcallback的工作过程,包括如下步骤,其特征是:
步骤501:开始执行函数callcallback的过程;
步骤502:读取本次指令的执行结果LogRecord;
步骤503:将读取的LogRecord传递给LoggingThread线程,并写入数据库DB中;
步骤504:结束本次函数callcallback的执行过程。
本发明的优点是:1)、内存变迁分析:从DB数据库中查询出分析任意一段内存的所有记录,根据这些记录中记下的指令动作、指令的PID,TID和操作数,找出其被篡改、拷贝、或发送的肇事者和实际证据;
2)、程序运行分析:从DB数据库中查询出任何程序、任意线程的完整运行记录,顺序显示,即可得到这个程序的完整运行线路,得出程序的运行目的和技术实现细节的详细而确切信息,为程序分析提供有力帮助;
3)、可视化运行演示:可以前款A,B中查询出来的记录进行进行动画方式的展示,通过调节展示的速度,能够直观地看出程序的思路和目的,后门等行为。
4)、程序故障分析:对需要分析的程序,通过前款C中说明的方法,得到程序允许的动画演示,然后将该动画进行反向演示,逆向追查,可以方便地发现程序的故障原因和问题。
5)、程序漏洞分析:对需要分析的程序,通过前款C中说明的方法,得到程序允许的动画演示,通过对程序执行细节的分析,能够清晰地看到程序的溢出过程,为程序的漏洞分析提供快速有力的工具。
6)、程序正确性验证:在得到程序运行的精确线路的基础上,通过对程序运行线路,即程序运行中涉及到的所有内存地址以及这些地址的出现序列中,所有环境(内存、变量)的无规则枚举,观察程序的运行线路有无改变,可以对程序的正确性验证提供迈出现实性的一大步。
下面结合实施例附图对本发明作进一步说明:
附图说明
图1本发明结构示意图;
图2指令级监控过程工作流程图;
图3init函数的工作流程图;
图4start函数的工作流程图;
图5CallBack函数工作流程图。
图中:1、云端服务器,2、宿主机,3、虚拟机,4、数据库DB,5、本地分析系统。
具体实施方式
本发明的结构示意图如图1所示。一种计算机程序进行指令级监控和分析的方法,其特征是:包括云端服务器1,宿主机2,虚拟机3,数据库DB4和本地分析系统5;云端服务器1用于记录数据,同时作为异地数据分析系统对数据进行分析;宿主机2用于提供一个环境存储动态链接库,并在需要的时候运行动态链接库中的函数;虚拟机3用于调用init函数和callback函数,并提供函数SetCallback来设置callback函数;数据库DB4用于存储指令级监控所得到的数据,以便在数据分析时,供本地分析系统5随时调用分析。
如图2所示,是本发明中主流程步骤至少包括:
步骤201:开始指令级的监控过程;
步骤202:定制一个虚拟机并使它运行就绪;
步骤203:虚拟机执行一个初始化函数init,并加载一个动态链接库Attach.dll,在调用完成init函数后,继续按照正常虚拟机的代码运行;
步骤204:虚拟机虚拟执行一条指令,开始检测过程;
步骤205:在虚拟机执行完成一条指令之后,调用一次回调函数callback(PCALLBACKDATApstCallBackLog),在callback函数中,读取当前这条指令执行的记录,记录内容为LogRecord;
步骤206:将对当前指令的监控结果存储到数据库DB中,为指令级分析提供数据支持;
步骤207:判断当前指令级监控是否结束,若是进行步骤208,否则,进行步骤204;
步骤208:结束对当前程序的指令级监控。
如图3所示,所述步骤203函数init的工作流程,包括如下步骤,其特征是:
步骤301:开始初始化函数init的过程;
步骤302:加载动态链接库Attach.dll;
步骤303:从动态链接库Attach.dll中获得Start函数地址;
步骤304:执行函数Start;
步骤305:结束init函数的执行过程;
如图4所示,所述步骤304函数Start的工作流程,包括如下步骤,其特征是:
步骤401:开始执行函数Start;
步骤402:调用SetCallback设置一个CallBack函数指针;
步骤403:启动线程LoggingThread,以便于记录指令操作结果;
步骤404:结束Start函数的执行过程;
如图5所示,所述步骤205函数callcallback的工作过程,包括如下步骤,其特征是:
步骤501:开始执行函数callcallback的过程;
步骤502:读取本次指令的执行结果LogRecord;步骤503:将读取的LogRecord传递给LoggingThread线程,并写入数据库DB中;
步骤504:结束本次函数callcallback的执行过程。
本发明中,对程序进行指令级监控的方法,需要使用现有的虚拟机技术,定制一个虚拟机产品,使得用于本发明的虚拟机具有一般虚拟机的功能之外,还具有如下处理功能:
1)、虚拟机运行到正常虚拟机就绪状态后,调用一个初始化函数init,然后继续按照正常虚拟机的代码运行。这里的名称init为指代名称,只是为了叙述方便,并不影响本发明的实现。
2)、在init函数中,加载一个动态链接库Attach.dll,并调用该动态链接库Attach.dll中的一个固定的函数Start()。
3)、在函数Start()中首先调用SetCallback设置一个callback函数指针,使每条指令执行结束时,可以通过callback回调函数。
4)、在虚拟机执行完成任何一条指令之后,调用一次回调函数callback(PCALLBACKDATApstCallBackLog),在callback函数中,读取当前这条指令执行的记录,记录内容为LogRecord,具体内容见下文LogRecord说明。
5)、在LoggingThread线程循环中读取LogRecord并写入数据库DB中;一直循环到监控过程结束。
上述1)-5)流程能够确保将在虚拟机中执行的任何程序的每条指令的运行结果记录到数据库DB中,为下边分析方法提供数据支撑。
●在该监控过程中,LogRecord包括下列内容中至少一项:指令所属的程序PID;
●指令所属的线程TID;
●指令的源操作数和源地址;
●指令的目的操作数及目的地址;
●指令的内容,包括传送,运算,跳转,比较,循环;
●指令的执行状态:完成,失败,中断,挂起;
●该指令所在的程序名称。
记录下的数据可以存储在数据库中,数据库技术已经足够成熟,完全可以保存下这些海量的数据。
而虚拟机要做的修改包括三点:一是调用init函数,二是调用callback;三是提供一个函数SetCallback,用来设置callback函数。动态链接库中实际实现的是callback,AttachStart函数和LoggingThread线程,它们均运行于宿主机环境中,因此不会影响到虚拟机的运行。
另外,本发明也可以推广到采用硬件方式实现指令级监控。具体方法不再本申请阐述范围。
本实施例没有详细叙述的部分和英文缩写属本行业的公知常识,在网上可以搜索到,这里不一一叙述。
Claims (1)
1.一种计算机程序进行指令级监控和分析方法,其特征是:该方法至少包括如下步骤:
步骤201:开始本发明中指令级的监控过程;
步骤202:定制一个虚拟机并使它运行就绪;
步骤203:虚拟机执行一个初始化函数init,并加载一个动态链接库Attach.dll,在调用完成init函数后,继续按照正常虚拟机的代码运行;
步骤204:虚拟机虚拟执行一条指令,开始检测过程;
步骤205:在虚拟机执行完成一条指令之后,调用一次回调函数callback(PCALLBACKDATApstCallBackLog),在callback函数中,读取当前这条指令执行的记录,记录内容为LogRecord;
步骤206:将对当前指令的监控结果存储到数据库DB中,为指令级分析提供数据支持;
步骤207:判断当前指令级监控是否结束,若是进行步骤208,否则,进行步骤204;
步骤208:结束对当前程序的指令级监控;
所述步骤203函数init的工作流程,包括如下步骤,其特征是:
步骤301:开始初始化函数init的过程;
步骤302:加载动态链接库Attach.dll;
步骤303:从动态链接库Attach.dll中获得Start函数地址;
步骤304:执行函数Start;
步骤305:结束init函数的执行过程;
所述步骤304函数Start的工作流程,包括如下步骤:
步骤401:开始执行函数Start;
步骤402:调用SetCallback设置一个CallBack函数指针;
步骤403:启动线程LoggingThread,以便于记录指令操作结果;
步骤404:结束Start函数的执行过程;
该方法采用的计算机程序进行指令级监控和分析系统包括云端服务器(1),宿主机(2),虚拟机(3),数据库DB(4)和本地分析系统(5);云端服务器(1)用于记录数据,同时作为异地数据分析系统对数据进行分析;宿主机(2)用于提供一个环境存储动态链接库,并在需要的时候运行动态链接库中的函数;虚拟机(3)用于调用init函数和callback函数,并提供函数SetCallback来设置callback函数;数据库DB(4)用于存储指令级监控所得到的数据,以便在数据分析时,供本地分析系统(5)随时调用分析。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310186311.7A CN103268441B (zh) | 2013-05-20 | 2013-05-20 | 一种计算机程序进行指令级监控和分析系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310186311.7A CN103268441B (zh) | 2013-05-20 | 2013-05-20 | 一种计算机程序进行指令级监控和分析系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103268441A CN103268441A (zh) | 2013-08-28 |
CN103268441B true CN103268441B (zh) | 2016-06-08 |
Family
ID=49012069
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310186311.7A Expired - Fee Related CN103268441B (zh) | 2013-05-20 | 2013-05-20 | 一种计算机程序进行指令级监控和分析系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103268441B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2506168A1 (en) * | 2011-03-28 | 2012-10-03 | Hon Hai Precision Industry Co., Ltd. | Data sorting system and method |
CN102739689A (zh) * | 2012-07-16 | 2012-10-17 | 四川师范大学 | 一种用于云存储系统的文件数据传输装置和方法 |
CN102981951A (zh) * | 2012-11-01 | 2013-03-20 | 珠海金山网络游戏科技有限公司 | 云测试开发平台及云测试开发方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154259A (zh) * | 2007-08-27 | 2008-04-02 | 电子科技大学 | 通用自动化脱壳引擎与方法 |
CN101373502B (zh) * | 2008-05-12 | 2012-06-20 | 公安部第三研究所 | 基于Win32平台下病毒行为的自动化分析系统 |
CN101645119B (zh) * | 2008-08-07 | 2012-05-23 | 中国科学院软件研究所 | 一种基于虚拟硬件环境的恶意代码自动分析方法及系统 |
-
2013
- 2013-05-20 CN CN201310186311.7A patent/CN103268441B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2506168A1 (en) * | 2011-03-28 | 2012-10-03 | Hon Hai Precision Industry Co., Ltd. | Data sorting system and method |
CN102739689A (zh) * | 2012-07-16 | 2012-10-17 | 四川师范大学 | 一种用于云存储系统的文件数据传输装置和方法 |
CN102981951A (zh) * | 2012-11-01 | 2013-03-20 | 珠海金山网络游戏科技有限公司 | 云测试开发平台及云测试开发方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103268441A (zh) | 2013-08-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109302522B (zh) | 测试方法、装置以及计算机系统和介质 | |
CN107506300B (zh) | 一种用户界面测试方法、装置、服务器和存储介质 | |
US8510842B2 (en) | Pinpointing security vulnerabilities in computer software applications | |
US9721092B2 (en) | Monitoring an application in a process virtual machine | |
US20110107307A1 (en) | Collecting Program Runtime Information | |
CN104035863B (zh) | 一种浏览器测试方法及装置 | |
US20090172664A1 (en) | Adding a profiling agent to a virtual machine to permit performance and memory consumption analysis within unit tests | |
US20140380280A1 (en) | Debugging tool with predictive fault location | |
US20160239400A1 (en) | Embedding and executing trace functions in code to gather trace data | |
CN112181833A (zh) | 一种智能化模糊测试方法、装置及系统 | |
US9594670B2 (en) | Managing software dependencies during software testing and debugging | |
US10725889B2 (en) | Testing multi-threaded applications | |
CN102402479B (zh) | 用于静态分析的中间表示结构 | |
CN113688398B (zh) | 漏洞扫描结果的评估方法、装置及系统 | |
CN107193747B (zh) | 代码测试方法、装置和计算机设备 | |
Holl et al. | Mobile application quality assurance | |
US8621438B2 (en) | Generating debug information on demand | |
US20130152042A1 (en) | Automated and heuristically managed solution to quantify cpu and path length cost of instructions added, changed or removed by a service team | |
CA2811617C (en) | Commit sensitive tests | |
Zaccarelli et al. | Stream2segment: An open‐source tool for downloading, processing, and visualizing massive event‐based seismic waveform datasets | |
CN112817831A (zh) | 应用性能监测方法、装置、计算机系统和可读存储介质 | |
US20140258785A1 (en) | Identifying a storage location for a storage address requested during debugging | |
US9600347B2 (en) | Verifying synchronization coverage in logic code | |
US10216620B2 (en) | Static code testing of active code | |
CN111274130A (zh) | 一种自动化测试方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160608 Termination date: 20210520 |