CN101923510A - 软件探测方法和应用该方法的软件探测器及软件探测系统 - Google Patents
软件探测方法和应用该方法的软件探测器及软件探测系统 Download PDFInfo
- Publication number
- CN101923510A CN101923510A CN 201010146146 CN201010146146A CN101923510A CN 101923510 A CN101923510 A CN 101923510A CN 201010146146 CN201010146146 CN 201010146146 CN 201010146146 A CN201010146146 A CN 201010146146A CN 101923510 A CN101923510 A CN 101923510A
- Authority
- CN
- China
- Prior art keywords
- program
- software
- code
- plug
- mounting
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明属于一种软件探测方法和应用该方法的软件探测器及软件探测系统。所述软件探测方法用于对应用软件在运行中的程序流程信息的实时探测,在对被测软件进行代码插装后,通过模型检测判断是否存在“特殊的结构”或“漏洞”,并找出代码执行轨迹,然后将程序流程信息采用无线或有线方式将此信息传送到监管节点或监管网络。本发明在法制监管领域可以对计算机系统内部运行的软件进行实时监控。本发明的软件探测系统构成法制计量监控网络,对计量器具的使用进行监控,为执法打假快速反应提供服务和支撑。能对电子衡器软件或金融监管软件中的“后门程序”和“作弊口令”等特定目标进行探测、并将探测得的信息对外传输,以使监管部门实时监视。
Description
技术领域
本发明涉及一种软件探测技术和软件探测装置和软件探测的网络系统,具体是一种对软件运行中流程信息进行探测的软件探测方法和应用该方法的软件探测器及软件探测系统。
背景技术
计算机系统和网络的大量普及使用使全球跨入了信息化时代。但是,正由于现代社会中几乎一切都在“计算机化”,如经济活动(生产、流通、交换、消费)过程中的管理都已完全基于计算机系统在运行,而计算机系统的核心是“软件”,也就是说都是基于“软件(程序)”在运行,所以从技术层面来看,如果对这些软件的运行不能进行有效地检测和监控,那么监管就会“缺失”,给国家或全球的金融和社会安全造成隐患。
在国内,重要的法制监管领域有十几个,如金融(银监、证监、保监),国资,税务,财政,审计,安监、电监、环境......等。如果对这些法制监管领域的软件运行不能有效地检测、监控,后果不堪设想。
在质检计量系统中,与人民群众生活密切相关的加油机、计价秤、出租车计价器等法制计量产品作弊事件频频发生。一方面,由于受到软件技术手段的制约,质量技术监督行政执法人员无法有效获取相关作弊证据,对不法商贩和经营者的处罚缺少依据,在一定程度上损害了广大消费者的利益;另一方面,由于不法制造商可以通过对软件进行恶意修改或在软件中留有“后门”来扩大市场销路,严重违反了公平竞争的原则。法制计量监管网络的目标是监管使用过程中面上的作弊的情况,主要是要突破和掌握软件作弊探测(或称“软件探头”或“软件探测传感器”)的核心技术。所以,它是从广度来进行的实时监控和动态监管,好比是现在已经在道路交通、治安防范方面普遍使用的视频摄像探测监控系统,使得程序的运行由不可见、不可控变成可见又可控。因此在法制计量监管领域,如何探测电子衡器软件中的“后门程序”和“作弊口令”等特定目标,是本领域的 技术难题。
在“软件测试”领域,国内外现有的软件自动化测试工具,一般都是在程序内部进行故障跟踪和检测,没有将跟踪、检测的信息对外传输和发送。在“无线传感网”领域,现有的传感器往往只能感知常规的“物理量”或“化学量”,不能感知计算机中软件运行的信息。因此,监管部门无法对软件进行实时监视。
法制计量软件探测器开发的特点和要求有:
1、要能采集并发送计量器具软件标识信息和传感器节点标识信息
计量器具软件标识信息,相当于计价秤软件的电子身份信息(ID-0);软件探测传感器节点标识信息也就是标志软件传感器本身的电子身份信息(ID-1)。通过比对可以识别计量器具软件和软件探测传感器节点本身的真伪。
2、要跟踪并发送计量器具使用时的作弊信息,包括:
作弊的口令:通过跟踪分析可以锁定作弊的密码;
作弊的历史记录:作弊信息可以全部记录在案;
3、要具有计量监控传感网软件探测传感器节点自身的管理、保护和安全功能。
发明内容
本发明所要解决的技术问题是提供一种用于对电子衡器软件或金融监管软件中的“后门程序”和“作弊口令”等特定目标进行探测、并将探测得的信息对外传输和发送,以使监管部门能实时监视的软件探测方法和应用该方法的软件探测器及软件探测系统。
为解决上述技术问题,本发明的软件探测方法,包括如下步骤:
A、启动代码插装步骤,该步骤包括:虚拟执行被测软件,即对被测软件的程序源代码进行词法分析和语法分析,以识别出特征代码,该特征代码包括:变量、函数、子程序和面向对象的类;然后对所述程序源代码的程序流程按数据块进行划分,以得到表述所述被测软件的程序结构和静态流程的划分数据并存入一静态数据库中,同时该静态数据库预存有根据被测软件的功能说明书得到的正常程序结构和静态流程;然后在所述程序源代码中插入对应于所述特征代码的探测代码;最后把插入了所述探测代码的程序源代码编译连接成可执行程序;所述探测代码为一段代码或函数,用于收集所述可执行程序运行时生成的动态数据;该动态数据包括:函数、子程序的调用记录,面向对象的类的消息传递,以及由所述函数、子程序的调用记录和面向对象的类的消息传递构成的所述被测软件运行时的程序结构和控制流程;
B、执行模式识别步骤,该步骤用于对所述可执行程序执行模型检测,即:将所述静态数据库中预存的正常程序结构和静态流程与所述探测代码获取的被测软件运行时的程序结构和控制流程进行比较;若二者一致,则判断所述可执行程序正常;否则,则判断所述可执行程序中存在“特殊的结构”或“漏洞”;所述“特殊的结构”是指与被测软件的功能说明书不相关的变量、函数、子程序或类的消息传递;所述“漏洞”是指根据被测软件的功能说明书被测软件中缺少应有的变量、函数、子程序或类的消息传递;
C、当发现存在“特殊的结构”或“漏洞”后,执行模式分析步骤,该步骤用于分析所述可执行程序的控制流程,以找出并上报引起“特殊的结构”或“漏洞”的代码执行轨迹;该代码执行轨迹是由引起执行“特殊的结构”或“漏洞”的一系列代码的集合所构成的程序流程;
D、执行数据处理与传输步骤,该步骤用于根据所述代码执行轨迹,得出被测软件存在“特殊的结构”和/或“漏洞”的信息、及其运行的时间信息和运行次数,然后通过无线或有线的方式,传输到监管节点和/或监管网络。
所述探测代码用于:程序模块的结构化分析;故障跟踪和错误处理;多线程分析(例如:判断死锁和共享冲突等);程序执行效率分析(例如:瓶颈分析等);初始化节点、构造链表,形成被测程序运行所需要的数据结构。
所述控制流程是指:虚拟执行被测软件,即对被测软件的程序源代码进行词法分析和语法分析,识别出特征代码,然后对所述程序源代码的控制流按块进行划分,得到所述被测软件的程序划分数据的流程。
所述静态流程是指:把插入了所述探测代码的程序源代码编译连接成可执行程序;运行该可执行程序得到的被测软件运行时的程序流程。
所述程序流程也即静态流程。
为解决上述技术问题,本发明的应用上述软件探测方法的软件探测器,包括:与用于执行所述可执行程序的处理器相连的探测控制器、与探测控制器相连的无线数据收发器和/或有线数据收发器;当所述探测控制器发现存在“特殊的结构”和/或“漏洞”后,执行所述模式分析步骤,然后将被测软件存在“特殊的结构”和/或“漏洞”的信息、及该“特殊的结构”和/或“漏洞”运行的时间信息和运行次数经所述无线数据收发器和/或有线数据收发器传送至所述监管节点和/或监管网络。
为解决上述技术问题,本发明的应用上述软件探测器的软件探测系统,包括:作为所述监管节点的上位机、与分布于不同地域的多个所述上位机相连的监管服务器系统;所述上位机用于与同地域内的多个所述软件探测器通过无线和/或有线的方式通信连接。
为解决上述技术问题,本发明的软件探测系统的软件平台总体设计采用层次模型,把软件系统分层,从而限制系统变化带来的影响。每一层可以单独的设计,单独的演进、升级。这就大大提高了系统的灵活和稳定性,可以应付广泛的需求变化。
层次模型最基本的是三层模型,包含展示层、逻辑层和数据层。展示层是一个消息通道,逻辑层提供的应该是一个现实映像,数据层提供现实系统的测量。应用系统的逻辑模型同样体现这样的特点,它包含了展示、数据和应用逻辑的大的层次。
一般而言,典型的软件系统的分层自下向上依次是数据层、数据维护层、数据语义层、通信层、应用逻辑层、展示逻辑层、展示层。这样的系统体现了层次模型的灵活性和稳定性。
数据层:可以使用各种格式的数据;
数据维护层:则需要对每一种数据的逻辑存储形式进行维护,保证数据的质量;
数据语义层:则非常的灵活,可以从多个数据源进行数据的抽取,拼合和处理,来共同完成语义的要求。
通信层:通信控制模块控制应用对于数据的访问,也支持对于其他应用模块的访问。这里包括了权限检查、资源调度、事件机制等等;
应用逻辑层:通过通信控制模块得到语义层提供的符合语义要求的信息。在语义层以下,系统处理的都是数据,而过了语义层就成为了信息。全部的信息都被应用层所使用,在这里保存全部的处理逻辑和应用逻辑;
展示逻辑层:这里决定对于某类访问,应该使用什么方式进行展示,哪些信息需要展示;
展示层:真正的和客户或者客户系统进行交互。从应用逻辑层以上,逻辑信息变成了交互信息,在这里可以发生编码、解码、加密、解密等处理。同时,会依据客户的展示逻辑,加载模板和交互信息进行合并处理等等,最终以适当的方式在展示层显示给客户。
软件探测系统的软件平台总体架构与一般的多层架构的软件系统相比较,特点主要在底层,即数据层。
与现有技术相比,本发明具有以下优点:
(1)本发明的软件探测方法实现了对应用软件在运行中的程序流程信息的实时探测,在对被测软件进行代码插装后,通过模型检测,判断是否存在“特殊的结构”或“漏洞”,并找出代码执行轨迹,然后将所述程序流程信息进行处理,最后采用无线或有线方式将此信息传送到监管节点或监管网络。
(2)本发明在法制监管领域可以对计算机系统内部运行的软件进行实时监控,可以快速检测到真实的数据和信息。如,可以组成法制计量监控网络对计量器具使用中的“后门程序”和“作弊口令”等特定目标进行探测和实时监视,为执法打假快速反应提供服务和支撑;能对法制监管领域的软件运行进行探测、并将探测得的信息对外传输和发送,以使监管部门能进行实时监控和监管。
(3)本发明的软件探测系统综合了软件探测技术、嵌入式计算技术、现代网络及无线通信技术、分布式信息处理技术等,能够探测软件运行的信息,通过嵌入式系统对信息进行处理,并通过通信网络将探测的软件运行信息传送到监管层或监管中心。
(4)软件探测器采用的无线数据收发器,是基于TD或GSM的数据传 输模块,它由射频天线、内部闪存、TD或GSM基带处理器、匹配电源和Zip插座组成。其中TD或GSM基带处理器是核心部件,用来处理外部系统通过串口发送过来的AT指令。它的外部集成了标准RS232接口、电源接口、模拟音频输入输出接口和SIM卡,只要将其串口与PC或单片机的串口相连,就可以用AT命令对它进行设置,其通信速率为9600bps。目前移动通信的信号几乎实现了无缝覆盖,因此,利用其完备的网络进行数据传输就成为应用的热点。采用AT指令进行单片机与手机模块间的通信设置,选择以数据、文本等格式的短消息通信方式,这样可随时进行可靠的通信,并可以节省无线传输的成本和网络维护开支。也可以采用其他无线数据收发方式,例如调频、脉冲信号等。
附图说明
图1为实施例中的软件探测器的示例性结构图;
图2为实施例中的代码插装子系统的示例性结构图;
图3为实施例中的软件探测器的结构原理图;
图4为实施例中的软件探测系统的硬件平台总体架构图;
图5为实施例中的软件探测系统的软件平台逻辑层次架构图。
图6为实施例中的在执行SUM-PRO.exe之前,代码跟踪次数为0的程序执行示意图;
图7为实施例中的跟踪数据被自动地更新的程序执行示意图。
具体实施方式
下面结合图1-7对本发明作进一步说明。
(实施例1)
本发明的软件探测方法,包括如下步骤:
A、启动代码插装步骤,该步骤包括:虚拟执行被测软件,即对被测软件的程序源代码进行词法分析和语法分析,以识别出特征代码,该特征代码包括:变量、函数、子程序和面向对象的类;然后对所述程序源代码的程序流程按数据块进行划分,以得到表述所述被测软件的程序结构和静态流程的划分数据并存入一静态数据库中,同时该静态数据库预存有根据被测软件的功能说明书得到的正常程序结构和静态流程;然后在所述程序源代码中插入对应于所述特征代码的探测代码;最后把插入了所述探测代码的程序源代码编译连接成可执行程序;所述探测代码为一段代码或函数,用于收集所述可执行程序运行时生成的动态数据;该动态数据包括:函数、 子程序的调用记录,面向对象的类的消息传递,以及由所述函数、子程序的调用记录和面向对象的类的消息传递构成的所述被测软件运行时的程序结构和控制流程;
B、执行模式识别步骤,该步骤用于对所述可执行程序执行模型检测,即:比较所述静态数据库中预存的正常程序结构和静态流程与所述探测代码获取的被测软件运行时的程序结构和控制流程是否一致;若二者一致,则判断所述可执行程序正常;否则,则判断所述可执行程序中存在“特殊的结构”或“漏洞”;所述“特殊的结构”是指与被测软件的功能说明书不相关的变量、函数、子程序或类的消息传递;所述“漏洞”是指根据被测软件的功能说明书被测软件中缺少应有的变量、函数、子程序或类的消息传递;
C、当发现存在“特殊的结构”或“漏洞”后,执行模式分析步骤,该步骤用于分析所述可执行程序的控制流程,以找出并上报引起“特殊的结构”或“漏洞”的代码执行轨迹;该代码执行轨迹是由引起执行“特殊的结构”或“漏洞”的一系列代码的集合所构成的程序流程;
D、执行数据处理与传输步骤,该步骤用于根据所述代码执行轨迹,得出被测软件存在“特殊的结构”和/或“漏洞”的信息、及其运行的时间信息和运行次数,然后通过无线或有线的方式,传输到监管节点和/或监管网络。
所述的代码插装步骤还包括:建立在进行所述语法分析时生成的用于记录并保存在所述可执行程序运行时产生的所述动态数据的动态数据库文件,包括:
DD文件,用于记录在所述可执行程序运行时各记录点即所述特征代码的累计运行次数、最后一次运行次数、以及运行时间信息;
DDC文件,用于记录在所述可执行程序运行时各判断、条件曾经为真或者为假的数据;
DDH文件,用于记录在所述可执行程序运行时各个记录点对应的程序语句是否运行过的历史数据。
所述在进行词法分析时,读入需要插装的源代码文件,识别出终结符(Token)和语义动作所需要的信息(如行号、Token的偏移量等),并传给语法分析器。同时,词法分析器还将终结符存入符号表;Hash方法是一种 在查表、填表两方面都能高速进行的技术。因此,通常采用Hash技术来组织的符号表为Hash符号表;语法分析器识别分析的源程序的语法,在定义的插装点上插入代码,并生成各种动态数据库文件:DD文件、DDH文件和DDC文件。在动态运行过程中,源程序的运行情况就记录在这些文件中。
下面以C语言为例,对源程序的代码插装子系统100进行描述:
(1)分析C代码工程文件(*.mak),获得所有的C源文件;
(2)对于每一个C源程序文件
分析源程序结构,生成插装信息链表InstrChain;
插装标号语句
添加公用模块_hua.bas,用于声明全局变量和对DLL中函数引用。
(3)以对条件表达式a ||b&&c的插装为例,该条件表达式即为特征代码,其在插装前为:a||b&&c
插装后:
(((a)?(__HUA_local->con[0]|=0xcc【注1】,1)
:(__HUA_local->con[0]|=0x33【注2】,0))||((b)
?(__HUA_local->con[1]|=0xcc【注3】,1)
:(__HUA_local->con[1]|=0x33【注4】,0))&&((c))
?(__HUA_local->con[2]|=0xcc【注5】,1)
:(__HUA_local->con[2]|=0x33【注6】,0))
?(__HUA_local->con[3]|=0xcc【注7】,1)
:(__HUA_local->con[3]|=0x33【注8】,0)
【注1】a曾为true。
【注2】a曾为false。
【注3】b曾为true。
【注4】b曾为false。
【注5】c曾为true。
【注6】c曾为false。
【注7】整个a||b&&c曾为true。
【注8】整个a||b&&c曾为false。
所述代码插装步骤中,在识别出特征代码时,同时生成插装信息链表;然后根据该插装信息链表在所述程序源代码中插入对应于所述特征代码的探测代码;所述根据插装信息链表插装源程序的位置包括:插装源程序文件头部、插装函数头部、插装条件表达式、插装流程控制语句和插装标号语句。
下面以VB语言为例,对模式分析步骤中识别出特征代码时生成的插装信息链表进行描述:
(1)主要功能
C++语言的模式分析子系统是用静态库程序实现的。静态库程序的作用是处理有关对文件的操作,包括检查文件的存在与否、将内存中的统计数据写入文件等。
由于VB语言调用动态连接库相对比较方便,VB语言的模式分析子系统是用动态连接库实现的。动态连接库程序的作用是:
初始化节点、构造链表,形成被分析程序运行所需要的数据结构。
首次调用动态连接库时,挂上被分析程序退出时要执行的函数。
检查用来保存统计数据的文件存在与否。
将内存中的统计数据写入文件。
(2)动态连接库的进入和退出
在Windows操作系统中,调用动态连接库有一个特性可以利用,这就是在调用动态连接库的程序或线程退出运行时,会释放对动态连接库的引 用,在动态连接库中可以获知这一事件,进行退出时用户指定的操作。对插装程序来说,在程序退出时,应进行的操作是调用库函数将内存中的数据写入文件中。
另外一种获知被分析程序退出、进行退出时用户指定的操作的方法是象C++语言那样,将退出时要执行的函数挂在退出执行的函数链上,不过这个操作是被分析程序首次调用动态连接库函数时(Process attach),由动态连接库完成的,具体做法如下:
BOOL APIENTRY DllMain(HANDLE hModule,DWORD
ul_reason_for_call,LPVOID lpReserved)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{//将函数UpDateRunResult挂在退出执行的函数链上
static int HasHooked=0;
if(!HasHooked)atexit(UpdateRunRusult);
};
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
}
return TRUE;
}
(3)输出函数介绍
RegistLocalNode()
注册本地节点,主要操作为:分配一个节点的内存,根据传入的参数分配文件路径名的内存,分配覆盖探测数组和条件探测数组的内存,将节点链在探测数据节点链上,返回分配的节点的内存地址。函数声明如下:
HUADLL_API struct__03HUA_record*_stdcall RegistLocalNode(
char*src_file,char*ddfile,char*confile,
int rp_no,unsigned int con_num,unsigned int deci_rp_num)
SetCurrentDD()
告诉动态连接库当前运行的源程序文件,参数__HUA_local为注册时返回的节点地址。函数声明为:
HUADLL_API void _stdcall SetCurrentDD(struct
__03HUA_record*__HUA_local);
CountRP()
累计覆盖探测点,参数pNode为覆盖探测数组所在节点地址,No为探测点的编号,即数组元素的编号。函数声明为:
HUADLL_API void_stdcall CountRP(struct__03HUA_record
*pNode,unsigned int No);
CountCP()
统计条件探测点,参数pNode为条件探测数组所在节点地址,No为探测点的编号,即数组元素的编号,Cond为条件。函数声明为:
HUADLL_API void_stdcall CountCP(
struct__03HUA_record*pNode,unsigned int No,bool Cond);
所述模式识别类型分析包括正常类型的模式识别和特定类型的模式识别。
所述正常类型的模式识别用于对所述可执行程序执行模型检测,即:将所述静态数据库中预存的正常程序结构和静态流程与所述探测代码获取的被测软件运行时的程序结构和控制流程进行比较,以判断所述可执行程序中存在程序结构和控制流程是否正常。
所述特殊类型的模式识别用于对所述可执行程序执行模型检测,即:将所述静态数据库中预存的正常程序结构和静态流程与所述探测代码获取的被测软件运行时的程序结构和控制流程进行比较,以判断所述可执行程序中是否存在“特殊的结构”和“漏洞”。
所述“特殊的结构”是指与被测软件的功能说明书不相关的变量、函数、子程序或类的消息传递;所述“漏洞”是指根据被测软件的功能说明书被测软件中缺少应有的变量、函数、子程序或类的消息传递。
在插装的代码中就包含有插入代码的特征信息的编码,读取该编码并进行解码就可以还原插装代码的特征信息。
所述模式识别的步骤包括:程序节点探测模式分析和程序段探测模式分析,用于对所述程序源代码的程序流程按数据块进行分析,然后划分出 所述数据块。
所述程序节点探测模式分析包括:判断的入口点和出口点、if...else语句中的else的入口点和出口点、连接的入口点和出口点、以及程序单元的入口点和出口点;
所述程序段探测模式分析是指两个连续的程序分支点间的程序语句序列;所述程序分支点包括:程序节点、以及无条件转移语句与下一条语句之间的位置;所谓无条件转移语句,以C++语言为例,就是goto语句、return语句、break语句和continue语句等这类语句。
在模式识别时,在内存中一个程序的每一个包含函数的源程序文件均对应了一个节点,节点的数据结构为:
struct__03HUA_record{
char*src_file;//被插装的源程序文件的名称和完全路径
char*ddfile;//对应于被插装的源程序文件的dd文件名和路径
char*confile;//对应于被插装的源程序文件的ddc文件名和路径
int*rp_covlist;//指向被插装的源程序的覆盖探测点统计数组
int rp_no;//被插装的源程序的覆盖探测点个数(对应一个源文件)
unsigned char*con;//指向被插装源程序条件探测点运行统计数组
unsigned int con_num;//被插装源程序条件探测点的个数(对应一个源文件)
unsigned int deci_num;//被插装的源程序的条件的个数(对应一个源文件)
int file_used_mark;//被插装的源程序所在源文件曾经运行的标志
int pc;//被插装的源程序的逻辑计数器
struct__03HUA_record*next;//指向下一个源文件节点地址
};
以下通过插入探测代码探测if语句为例:
一、在没有插装探测代码前的if语句源代码程序如下:
Int main()
{
Int i=1;
/*case 1,complete if statement第1种情况,完整的if语句*/
If(i==1)
I++;
Else
i--;
/*conjuction连接*/
I+=2;
/*case 2,no else part第2种情况,没有else部分*/
If(i==0)
I++;
/*conjuction连接*/
i-=2;
}
二、在插装探测代码后的上述if语句代码程序如下:
Int main()
{
Int i=1;
/*case 1,complete if statement第1种情况,完整的if语句*/
If(++__011HUA_RP_NODE_p->rp_covlist[__011HUA_RP_NODE_p->pc=2
],
(i==1)?(++__011HUA_RP_NODE_p->rp_covlist[__011HUA_RP_NODE_p-
>pc=3],1):0)
I++;
Else
If(++__011HUA_RP_NODE_p->rp_covlist[__011HUA_RP_NODE_p->pc=5],0)
;
Else i--;
/*conjuction连接*/
++__011HUA_RP_NODE_p->rp_covlist[__011HUA_RP_NODE_p->pc=6];
I+=2;
/*case 2,no else part第2种情况,没有else部分*/
If(++__011HUA_RP_NODE_p->rp_covlist[__011HUA_RP_NODE_p->pc=7
],
(i==0)?(++__011HUA_RP_NODE_p->rp_covlist[__011HUA_RP_NOD
E_p->pc=8],1):0)
I++;
Else
++__011HUA_RP_NODE_p->rp_covlist[__011HUA_RP_NODE_p->pc=9];
/*conjuction连接*/
++__011HUA_RP_NODE_p->rp_covlist[__011HUA_RP_NODE_p->pc=10];
i-=2;
}
以下通过插入探测代码探测函数头部为例:
一、没有插装前的函数源代码:
Int·main()
{
Int·i=0;
}
二、插装探测代码后的函数头部代码程序:
Int·main()
{
#1·“HUA instr funchd0”1
#1·
/*lineno·is 5*/
_94HUA_on_exit();
_941HUA_bin_DDup date_interval(0);
Stuct·_03HUA_record*_011HUA_RP_NOOE_p=_012HUA_RP_NOOE_F();
If(_93HUA_current_dd=011HUA_RP_NOOE_p,!011HUA_RP_NOOE_p->file_used_mark)
{
_011HUA_RP_NOOE_p->file_used_mark=1;
_011HUA_RP_NOOE_p->next=_90HUA_current_recard;
_90HUA_current_record=_011HUA_RP_NOOE_p;
_92HUA_check_ddfile();
}
++_011HUA_RP_NOOE_p->rp_covlist[_011HUA_RP_NOOE_p->pc=0];
++_011HUA_RP_NOOE_p->rp_covlist[_011HUA_RP_NOOE_p->pc=1];
#5”/home3/wcy/c++doc/instr/instr3.cc”2
#5
Int·i=0
}
(实施例2)
一种应用上述软件探测方法的软件探测器包括:与用于执行所述可执行程序的处理器相连的探测控制器、与探测控制器相连的无线数据收发器和/或有线数据收发器;当所述处理器发现存在“特殊的结构”或“漏洞”后,执行所述模式分析步骤,然后将被测软件存在“特殊的结构”和/或“漏洞”的信息、及该“特殊的结构”和/或“漏洞”运行的时间信息和运行次数传送至所述探测控制器,探测控制器通过所述无线数据收发器和/或有线数据收发器将所述被测软件存在“特殊的结构”和/或“漏洞”的信息、及其运行的时间信息和运行次数传至所述监管节点和/或监管网络。
(实施例3)
一种应用上述软件探测器的软件探测系统包括:作为所述监管节点的上位机、与分布于不同地域的多个所述上位机相连的监管服务器系统;所述上位机用于与同地域内的多个所述软件探测器通过无线和/或有线的方式通信连接。
见图4为实施例中的软件探测系统的硬件平台总体架构图。
一种应用上述软件探测器的软件探测系统的系统总体软件架构设计由以下三个部分组成:探测器(在实施例中称“提取器子系统”,单片机)、监管上位机(PC机)、网络系统服务器。其系统总体软件架构设计如图5所示。
一种应用上述软件探测器的软件探测系统的服务器端设计包括:系统服务器端用于监管信息处理,并为监管上位机节点(上位机子系统,客户端)提供基于XML-RPC接口的Web Service,整体架构使用了基于PHP的MVC框架Symfony,此框架成熟、灵活、扩展性强,适用于大型系统的开发,为服务器端系统提供了坚实稳定的基础。
数据库设计采用了Symfony提供的基于Propel的ORM技术,使得程序员可以使用面向对象的方法对数据库进行访问,而不用手工构造SQL代码,这也杜绝了SQL注入的危险。
另外Propel使用了PHP的PDO模块,这可以使得数据库的操作与数据库引擎相互独立,从而可以非常方便地迁移数据库。例如,我们在测试时使用基于SQLite 3.x的数据库,而在实际运用中,只需要修改一下数据库 的配置文件,就可以用另外的数据库管理系统如MySQL,Oracle和SQLServer来取代之,不需要对代码本身做任何修改。
Propel用一个XML文件来描述数据库的配置,然后动态生成与数据库对象相关的一个PHP类,然后我们就可以直接使用这个类来对数据库进行操作了。在Symfony中,标注名为id的字段的将自动作为数据库表的主键,同时具有AUTO_INCREMENT的属性,名中以id为后辍的字段名将自动作为数据库表的外键,而created_at则作为时间戳,用于保存创建记录时的时间。这些都是数据库设计的默认约定,而在Symfony里加以简化,使得数据库的创建既简便又规范。
系统可以提供直接的对数据库的增、删、改、查操作,根据需要使用授权的数据库访问,只有登录并取得数据库访问权限的用户才能对数据库进行相应的操作。
(软件探测程序跟踪示例1)
SUM-PRODUCT是一个用C++编程的示例程序,它要求输入三个整型变量Low,High和Max。这些整型值不能为负,否则,将输出一个错误信息;而当SUM-PRODUCT接受三个整型值时,在Low到High范围内对每一个数字K(但是它不能大于Max),输出K+K和K*K的值;如果高端(High)的值小于低端(Low)的值,程序直接结束,没有任何输出。
通过输入数据我们可以跟踪程序运行,进行全方位、多层次的监控。
1、示例程序源代码
这个SUM-PRO.cpp源代码列表如下:
#include<stdio.h>
main(void)
//This program prints for each k in the range LOW to HIGH
//k+k and k*k.No more than MAX number of k are used.
{
int low,high,max,k,n=0;
printf(″Enter positive integers LOW,HIGH,and MAX:″);
scanf(″%d%d%d″,&low,&high,&max);
printf(″LOW=%d HIGH=%d MAX=%d\n″,low,high,max);
if(low>=0&&high>=0&&max>=0)
for(k=low;k<=high;k++)
{
++n;
if(n>max)
break;
printf(″%d+%d=%d%d*%d=%d\n″,k,k,k+k,k,k,k*k);
}
else
printf(″Error!The input data are incorrect!\n″);
}
2、运行前的初始状态
在执行SUM-PRO.exe之前,代码跟踪次数为0,反映如下:
可见:所有单元均未被跟踪并反显。
3、程序次运行跟踪
在适当的目录下立即打入SUM-PRO.exe,去执行示例程序:
c:>\SUM-PRO\SUM-PRO.exe
Enter positive integers Low,HIGH,and Max:280
通过示例程序SUM-PRO,斜体字符被显示,上面突出显示的字符被立即输入。跟踪数据被自动地更新,如下所示:
本发明的上述实施例仅为说明本发明所作的举例,而本发明实施方式并不局限于此。对于属于本发明的精神与原理下所作的修改、组合、简化、替代等均为等效替换,都仍然包含在本发明的保护范围之内。
Claims (6)
1.一种软件探测方法,其特征在于包括如下步骤:
A、启动代码插装步骤,该步骤包括:虚拟执行被测软件,即对被测软件的程序源代码进行词法分析和语法分析,以识别出特征代码,该特征代码包括:变量、函数、子程序和面向对象的类;然后对所述程序源代码的程序流程按数据块进行划分,以得到表述所述被测软件的程序结构和静态流程的划分数据并存入一静态数据库中,同时该静态数据库预存有根据被测软件的功能说明书得到的正常程序结构和静态流程;然后在所述程序源代码中插入对应于所述特征代码的探测代码;最后把插入了所述探测代码的程序源代码编译连接成可执行程序;所述探测代码用于收集所述可执行程序运行时生成的动态数据;该动态数据包括:函数、子程序的调用记录,面向对象的类的消息传递,以及由所述函数、子程序的调用记录和面向对象的类的消息传递构成的所述被测软件运行时的程序结构和控制流程;
B、执行模式识别步骤,该步骤用于对所述可执行程序执行模型检测,即:将所述静态数据库中预存的正常程序结构和静态流程与所述探测代码获取的被测软件运行时的程序结构和控制流程进行比较;若二者一致,则判断所述可执行程序正常;否则,则判断所述可执行程序中存在“特殊的结构”或“漏洞”;所述“特殊的结构”是指与被测软件的功能说明书不相关的变量、函数、子程序或类的消息传递;所述“漏洞”是指根据被测软件的功能说明书被测软件中缺少应有的变量、函数、子程序或类的消息传递;
C、当发现存在“特殊的结构”或“漏洞”后,执行模式分析步骤,该步骤用于分析所述可执行程序的控制流程,以找出并上报引起“特殊的结构”或“漏洞”的代码执行轨迹;该代码执行轨迹是由引起执行“特殊的结构”或“漏洞”的一系列代码的集合所构成的程序流程;
D、执行数据处理与传输步骤,该步骤用于根据所述代码执行轨迹,得出被测软件存在“特殊的结构”和/或“漏洞”的信息、及其运行的时间信息和运行次数,然后通过无线或有线的方式,传输到监管节点和/或监管网络。
2.根据权利要求1所述的软件探测方法,其特征在于:所述的代码插装步骤还包括:建立在进行所述语法分析时生成的用于记录并保存在所述可执行程序运行时产生的所述动态数据的动态数据库文件,包括:
DD文件,用于记录在所述可执行程序运行时各记录点即所述特征代码的累计运行次数、最后一次运行次数、以及运行时间信息;
DDC文件,用于记录在所述可执行程序运行时各判断、条件曾经为真或者为假的数据;
DDH文件,用于记录在所述可执行程序运行时各个记录点对应的程序语句是否运行过的历史数据。
3.根据权利要求1所述的一种软件探测方法,其特征在于:所述代码插装步骤中,在识别出特征代码时,同时生成插装信息链表;然后根据该插装信息链表在所述程序源代码中插入对应于所述特征代码的探测代码;所述根据插装信息链表插装源程序的位置包括:插装源程序文件头部、插装函数头部、插装条件表达式、插装流程控制语句和插装标号语句。
4.根据权利要求1所述的软件探测方法,其特征在于:所述模式分析的步骤包括:程序节点探测模式分析和程序段探测模式分析,用于对所述程序源代码的程序流程按数据块进行分析,然后划分出所述数据块;
所述程序节点探测模式分析包括:判断的入口点和出口点、if…else语句中的else的入口点和出口点、连接的入口点和出口点、以及程序单元的入口点和出口点;
所述程序段探测模式分析是指两个连续的程序分支点间的程序语句序列;所述程序分支点包括:程序节点、以及无条件转移语句与下一条语句之间的位置。
5.一种应用上述权利要求1-4之一所述的软件探测方法的软件探测器,其特征在于包括:与用于执行所述可执行程序的中央处理器相连的探测控制器、与探测控制器相连的无线数据收发器和/或有线数据收发器;
当所述软件探测器发现存在“特殊的结构”和/或“漏洞”后,执行所述模式分析步骤,然后将被测软件存在“特殊的结构”和/或“漏洞”的信息、及该“特殊的结构”和/或“漏洞”运行的时间信息和运行次数经所述无线数据收发器和/或有线数据收发器传送至所述监管节点和/或监管网络。
6.一种应用上述权利要求5所述的软件探测器的软件探测系统,其特征在于包括:作为所述监管节点的上位机、与分布于不同地域的多个所述上位机相连的监管服务器系统;所述上位机用于与同地域内的多个所述软件探测器通过无线和/或有线的方式通信连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101461469A CN101923510B (zh) | 2010-04-13 | 2010-04-13 | 软件探测方法和应用该方法的软件探测器及软件探测系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101461469A CN101923510B (zh) | 2010-04-13 | 2010-04-13 | 软件探测方法和应用该方法的软件探测器及软件探测系统 |
Related Child Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210054220.3A Division CN102646068B (zh) | 2010-04-13 | 2010-04-13 | 一种软件探测器的软件探测方法 |
CN201210054195.9A Division CN102662827B (zh) | 2010-04-13 | 2010-04-13 | 一种软件探测方法 |
CN201210054107.5A Division CN102622299B (zh) | 2010-04-13 | 2010-04-13 | 一种软件探测系统的工作方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101923510A true CN101923510A (zh) | 2010-12-22 |
CN101923510B CN101923510B (zh) | 2012-07-04 |
Family
ID=43338461
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101461469A Expired - Fee Related CN101923510B (zh) | 2010-04-13 | 2010-04-13 | 软件探测方法和应用该方法的软件探测器及软件探测系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101923510B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164331A (zh) * | 2011-12-15 | 2013-06-19 | 阿里巴巴集团控股有限公司 | 一种应用程序的漏洞检测方法和装置 |
CN103269341A (zh) * | 2013-05-08 | 2013-08-28 | 腾讯科技(深圳)有限公司 | 一种间谍程序的分析方法和计算机系统 |
CN103336743A (zh) * | 2013-07-25 | 2013-10-02 | 清华大学 | 一种无线传感器代码检测的方法 |
CN104598211A (zh) * | 2013-10-30 | 2015-05-06 | 北大方正集团有限公司 | 管理维护软件程序的方法及装置 |
CN107239702A (zh) * | 2016-03-29 | 2017-10-10 | 腾讯科技(深圳)有限公司 | 一种安全漏洞检测的方法以及装置 |
JP2017535867A (ja) * | 2014-11-17 | 2017-11-30 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | コード・セットへの要求を監視する方法、システム、およびコンピュータ・プログラム |
CN107992408A (zh) * | 2017-11-16 | 2018-05-04 | 南京轩世琪源软件科技有限公司 | 一种软件探测器的软件探测方法 |
CN110414239A (zh) * | 2019-06-28 | 2019-11-05 | 奇安信科技集团股份有限公司 | 一种软件供应链安全分析方法及装置 |
CN111324474A (zh) * | 2020-02-18 | 2020-06-23 | 上海携程商务有限公司 | Celery任务管理方法、系统、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060026387A1 (en) * | 2004-07-31 | 2006-02-02 | Dinechin Christophe D | Method and system for recognizing instructions and instruction blocks in computer code |
CN2894106Y (zh) * | 2006-04-19 | 2007-04-25 | 哈尔滨工程大学 | 基于事件注入的计算机网络可信性评测装置 |
EP1208425B1 (en) * | 1998-11-16 | 2008-09-03 | Esmertec AG | Method and system for testing computer code |
CN101609338A (zh) * | 2008-06-18 | 2009-12-23 | 北京摩软科技有限公司 | 一种对嵌入式设备实时动态测试及故障定位的方法及装置 |
-
2010
- 2010-04-13 CN CN2010101461469A patent/CN101923510B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1208425B1 (en) * | 1998-11-16 | 2008-09-03 | Esmertec AG | Method and system for testing computer code |
US20060026387A1 (en) * | 2004-07-31 | 2006-02-02 | Dinechin Christophe D | Method and system for recognizing instructions and instruction blocks in computer code |
CN2894106Y (zh) * | 2006-04-19 | 2007-04-25 | 哈尔滨工程大学 | 基于事件注入的计算机网络可信性评测装置 |
CN101609338A (zh) * | 2008-06-18 | 2009-12-23 | 北京摩软科技有限公司 | 一种对嵌入式设备实时动态测试及故障定位的方法及装置 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164331B (zh) * | 2011-12-15 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种应用程序的漏洞检测方法和装置 |
CN103164331A (zh) * | 2011-12-15 | 2013-06-19 | 阿里巴巴集团控股有限公司 | 一种应用程序的漏洞检测方法和装置 |
CN103269341A (zh) * | 2013-05-08 | 2013-08-28 | 腾讯科技(深圳)有限公司 | 一种间谍程序的分析方法和计算机系统 |
CN103269341B (zh) * | 2013-05-08 | 2016-02-17 | 腾讯科技(深圳)有限公司 | 一种间谍程序的分析方法和计算机系统 |
CN103336743A (zh) * | 2013-07-25 | 2013-10-02 | 清华大学 | 一种无线传感器代码检测的方法 |
CN104598211B (zh) * | 2013-10-30 | 2019-05-24 | 北大方正集团有限公司 | 管理维护软件程序的方法及装置 |
CN104598211A (zh) * | 2013-10-30 | 2015-05-06 | 北大方正集团有限公司 | 管理维护软件程序的方法及装置 |
JP2017535867A (ja) * | 2014-11-17 | 2017-11-30 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | コード・セットへの要求を監視する方法、システム、およびコンピュータ・プログラム |
US10496520B2 (en) | 2014-11-17 | 2019-12-03 | International Business Machines Corporation | Request monitoring to a code set |
CN107239702A (zh) * | 2016-03-29 | 2017-10-10 | 腾讯科技(深圳)有限公司 | 一种安全漏洞检测的方法以及装置 |
CN107992408A (zh) * | 2017-11-16 | 2018-05-04 | 南京轩世琪源软件科技有限公司 | 一种软件探测器的软件探测方法 |
CN107992408B (zh) * | 2017-11-16 | 2019-06-07 | 广东马上到网络科技有限公司 | 一种软件探测器的软件探测方法 |
CN110414239A (zh) * | 2019-06-28 | 2019-11-05 | 奇安信科技集团股份有限公司 | 一种软件供应链安全分析方法及装置 |
CN111324474A (zh) * | 2020-02-18 | 2020-06-23 | 上海携程商务有限公司 | Celery任务管理方法、系统、设备及存储介质 |
CN111324474B (zh) * | 2020-02-18 | 2023-04-18 | 上海携程商务有限公司 | Celery任务管理方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN101923510B (zh) | 2012-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101923510B (zh) | 软件探测方法和应用该方法的软件探测器及软件探测系统 | |
Li et al. | Object-oriented metrics that predict maintainability | |
Ampatzoglou et al. | The effect of GoF design patterns on stability: a case study | |
Liebig et al. | An analysis of the variability in forty preprocessor-based software product lines | |
CN105787367B (zh) | 一种软件更新的补丁安全性检测方法及系统 | |
CN103246602B (zh) | 代码覆盖率确定方法及系统、代码覆盖检测方法及系统 | |
Bockermann et al. | The streams framework | |
CN112860556B (zh) | 覆盖率统计方法、装置、计算机系统和可读存储介质 | |
Gupta et al. | Package level cohesion measurement in object-oriented software | |
CN109977670A (zh) | 基于插件加载的安卓应用安全监测方法、存储介质 | |
CN113190330B (zh) | 一种区块链威胁感知系统及方法 | |
CN102622299B (zh) | 一种软件探测系统的工作方法 | |
Guerra et al. | A reference architecture for organizing the internal structure of metadata-based frameworks | |
CN108111364A (zh) | 一种业务系统的测试方法及装置 | |
CN105577472A (zh) | 一种数据采集测试方法和装置 | |
CN114168565B (zh) | 业务规则模型的回溯测试方法、装置、系统及决策引擎 | |
CN116383833A (zh) | 软件程序代码的测试方法及其装置、电子设备、存储介质 | |
CN103176786A (zh) | 一种基于插件的安全配置检查框架及其构造方法 | |
Huo et al. | Autolog: A log sequence synthesis framework for anomaly detection | |
Yang et al. | CrossFuzz: Cross-contract fuzzing for smart contract vulnerability detection | |
Fabre et al. | Building dependable COTS microkernel-based systems using MAFALDA | |
Kundu et al. | A UML model-based approach to detect infeasible paths | |
CN102662827B (zh) | 一种软件探测方法 | |
CN115292418B (zh) | 跨系统业务流程自动化处理方法及系统 | |
CN106294053A (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 | ||
C53 | Correction of patent for invention or patent application | ||
CB03 | Change of inventor or designer information |
Inventor after: Zhang Kedong Inventor after: Zhang Mi Inventor after: Wu Huafang Inventor before: Zhang Kedong |
|
COR | Change of bibliographic data |
Free format text: CORRECT: INVENTOR; FROM: ZHANG KEDONG TO: ZHANG KEDONG ZHANG MING WU HUAFANG |
|
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: 20120704 Termination date: 20180413 |