软件探测方法和应用该方法的软件探测器及软件探测系统的制作方法

文档序号:6600725阅读:183来源:国知局
专利名称:软件探测方法和应用该方法的软件探测器及软件探测系统的制作方法
技术领域
本发明涉及一种软件探测技术和软件探测装置和软件探测的网络系统,具体是一 种对软件运行中流程信息进行探测的软件探测方法和应用该方法的软件探测器及软件探 测系统。
背景技术
计算机系统和网络的大量普及使用使全球跨入了信息化时代。但是,正由于现代 社会中几乎一切都在“计算机化”,如经济活动(生产、流通、交换、消费)过程中的管理都已 完全基于计算机系统在运行,而计算机系统的核心是“软件”,也就是说都是基于“软件(程 序)”在运行,所以从技术层面来看,如果对这些软件的运行不能进行有效地检测和监控,那 么监管就会“缺失”,给国家或全球的金融和社会安全造成隐患。在国内,重要的法制监管领域有十几个,如金融(银监、证监、保监),国资,税务,
财政,审计,安监、电监、环境......等。如果对这些法制监管领域的软件运行不能有效地
检测、监控,后果不堪设想。在质检计量系统中,与人民群众生活密切相关的加油机、计价秤、出租车计价器等 法制计量产品作弊事件频频发生。一方面,由于受到软件技术手段的制约,质量技术监督 行政执法人员无法有效获取相关作弊证据,对不法商贩和经营者的处罚缺少依据,在一定 程度上损害了广大消费者的利益;另一方面,由于不法制造商可以通过对软件进行恶意修 改或在软件中留有“后门”来扩大市场销路,严重违反了公平竞争的原则。法制计量监管网 络的目标是监管使用过程中面上的作弊的情况,主要是要突破和掌握软件作弊探测(或称 “软件探头”或“软件探测传感器”)的核心技术。所以,它是从广度来进行的实时监控和动 态监管,好比是现在已经在道路交通、治安防范方面普遍使用的视频摄像探测监控系统,使 得程序的运行由不可见、不可控变成可见又可控。因此在法制计量监管领域,如何探测电子 衡器软件中的“后门程序”和“作弊口令”等特定目标,是本领域的技术难题。在“软件测试”领域,国内外现有的软件自动化测试工具,一般都是在程序内部进 行故障跟踪和检测,没有将跟踪、检测的信息对外传输和发送。在“无线传感网”领域,现有 的传感器往往只能感知常规的“物理量”或“化学量”,不能感知计算机中软件运行的信息。 因此,监管部门无法对软件进行实时监视。法制计量软件探测器开发的特点和要求有1、要能采集并发送计量器具软件标识信息和传感器节点标识信息计量器具软件标识信息,相当于计价秤软件的电子身份信息(ID-O);软件探测传 感器节点标识信息也就是标志软件传感器本身的电子身份信息(ID-I)。通过比对可以识别 计量器具软件和软件探测传感器节点本身的真伪。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源程序文件
8
>分析源程序结构,生成DD文件、DDH文件和DDC文件;>分析源程序结构,生成插装信息链表InstrChain ;>根据插装信息链表插装源程序今插装源程序文件头部今插装函数头部今插装条件表达式今插装流程控制语句今插装标号语句>统计标号后代码的执行次数,统计数据将保存到DD文件里。>添加公用模块_hua. bas,用于声明全局变量和对DLL中函数引用。>修改工程文件,将_hua. bas添加到工程文件中。(3)以对条件表达式a I |b&&c的插装为例,该条件表达式即为特征代码,其在插 装前为:a |b&&c插装后(((a) ? (―HUA_local->con
=Oxcc注 1,1) (―HUA_local->con
| = 0x3注 2,0)) | | ((b)? (―HUA_local_>con[l] I = Oxcc注 3,1) (―HUA_local_>con[l] I = 0x3注 4,0))&&((c))? (―HUA_local_>con[2] I = Oxcc注 5,1) (―HUA_local_>con[2] | = 0x3注 6,0))? (―HUA_local_>con[3] I = Oxcc注 7,1) (―HUA_local_>con[3] | = 0x3注 8,0)注1] a 曾为 true。注2a曾为false。注3b曾为true。注4b曾为false。注5c曾为true。注6c曾为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, DWORDul_reason_for_cal1, LPVOID IpReserved){


}(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 ()
switch(ul_reason_for_cal1)
{
case DLL_PR0CESS_ATTACH
{//将函数UpDateRunResult挂在退出执行的函数链上 static int HasHooked = O ;
if( ! HasHooked)atexit(UpdateRunRusult); };
case DLL_THREAD_ATTACH case DLL_THREAD_DETACH
case DLL_PR0CESS_DETACH
}
return TRUE ;
告诉动态连接库当前运行的源程序文件,参数—HUA_l0cal为注册时返回的节点 地址。函数声明为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, boo1 Cond);所述模式识别类型分析包括正常类型的模式识别和特定类型的模式识别。所述正常类型的模式识别用于对所述可执行程序执行模型检测,即将所述静态 数据库中预存的正常程序结构和静态流程与所述探测代码获取的被测软件运行时的程序 结构和控制流程进行比较,以判断所述可执行程序中存在程序结构和控制流程是否正常。所述特殊类型的模式识别用于对所述可执行程序执行模型检测,即将所述静态 数据库中预存的正常程序结构和静态流程与所述探测代码获取的被测软件运行时的程序 结构和控制流程进行比较,以判断所述可执行程序中是否存在“特殊的结构”和“漏洞”。所述“特殊的结构”是指与被测软件的功能说明书不相关的变量、函数、子程序或 类的消息传递;所述“漏洞”是指根据被测软件的功能说明书被测软件中缺少应有的变量、 函数、子程序或类的消息传递。在插装的代码中就包含有插入代码的特征信息的编码,读取该编码并进行解码就 可以还原插装代码的特征信息。所述模式识别的步骤包括程序节点探测模式分析和程序段探测模式分析,用于 对所述程序源代码的程序流程按数据块进行分析,然后划分出所述数据块。所述程序节点探测模式分析包括判断的入口点和出口点、if. . . else语句中的 else的入口点和出口点、连接的入口点和出口点、以及程序单元的入口点和出口点;所述程序段探测模式分析是指两个连续的程序分支点间的程序语句序列;所述程 序分支点包括程序节点、以及无条件转移语句与下一条语句之间的位置;所谓无条件转 移语句,以C++语言为例,就是goto语句、return语句、break语句和continue语句等这类 语句。在模式识别时,在内存中一个程序的每一个包含函数的源程序文件均对应了一个 节点,节点的数据结构为struct—03HUA_record {char*src_file ;//被插装的源程序文件的名称和完全路径char^ddfile -JI对应于被插装的源程序文件的dd文件名和路径
110152]char*confile ;//对应于被插装的源程序文件的ddc文件名和路径
0153]int*rp_covlist ;//指向被插装的源程序的覆盖探测点统计数组
0154]int rp_no ;//被插装的源程序的覆盖探测点个数(对应一个源文件)
0155]unsigned char^con ;//指向被插装源程序条件探测点运行统计数组
0156]unsigned int con_num ;//被插装源程序条件探测点的个数(对应一个源文件)
0157]unsigned int deCi_num ;//被插装的源程序的条件的个数(对应一个源文件)
0158]int file_used_mark ;//被插装的源程序所在源文件曾经运行的标志
0159]int pc ;//被插装的源程序的逻辑计数器
0160]struct—03HUA_record*next ;//指向下一个源文件节点地址
0161]};
0162]以下通过插入探测代码探测if语句为例
0163]一、在没有插装探测代码前的if语句源代码程序如下
0164]Int main()
0165]{
0166]Int i = l;
0167]/*case 1,complete if statement 第 1 种情况,完整的 if 语句 */
0168]If (i == 1)
0169]I++;
0170]Else
0171]i—;
0172]/^conjuction 连接氺/
0173]1+ = 2 ;
0174]/*case 2, no else part 第 2 种情况,没有 else 部分 */
0175]If (i == 0)
0176]I++;
0177]/^conjuction 连接氺/
0178]i- = 2 ;
0179]}
0180]二、在插装探测代码后的上述if语句代码程序如下
0181]Int main()
0182]{
0183]Int i = l;
0184]/*case 1,complete if statement 第 1 种情况,完整的 if 语句 */
0185]I f (++_01 lHUA_RP_N0DE_p->rp_covl i st [_01 lHUA_RP_N0DE_p->pc = 2
0186]],
0187](i == 1) ? (++—01 lHUA_RP_N0DE_p->rp_covlist [—01 lHUA_RP_N0DE_p-
0188]>pc = 3],l):0)
0189]I++;
0190]Else
I f (++_01 lHUA_RP_NODE_p->rp_covl i st [_01 lHUA_RP_NODE_p->pc = 5],0);Else i—;/^conjuction 氺/++—01 lHUA_RP_NODE_p->rp_covlist [—01 lHUA_RP_NODE_p->pc = 6];1+ = 2 ;/*case 2,no else part 第 2 种情况,没有 else 部分 */I f (++_01 lHUA_RP_NODE_p->rp_covl i st [_01 lHUA_RP_NODE_p->pc = 7],(i == 0) ? (++—01 lHUA_RP_NODE_p->rp_covlist [—011HUA_RP_N0DE_p->pc = 8], 1) :0)I++ ;Else++—01 lHUA_RP_NODE_p->rp_covlist [—01 lHUA_RP_NODE_p->pc = 9];/^conjuction 氺/++—01 lHUA_RP_NODE_p->rp_covlist [—01 lHUA_RP_NODE_p->pc = 10];i- = 2 ;}以下通过插入探测代码探测函数头部为例一、没有插装前的函数源代码Int · mainO{Int · i = O ;}二、插装探测代码后的函数头部代码程序Int · mainO{#1 ‘ "HUA instr funchdO" 1#1 ·Alineno · is 5氺/94HUA on exit O ;_941HUA_bin_DDup date interval(0);Stuct · _03HUA_record*_01lHUA_RP_N00E_p = 012HUA RP NOOE F Q ;If ( 93HUA current dd = 01lHUA_RP_N00E_p, ! 011HUA_RP_N00E_p->file_ used_mark){OllHUA RP NOOE p~>file used mark = 1 ;_011HUA_RP_N00E_p->next = _90HUA_current_recard ;_90HUA_current_record = _011HUA_RP_N00E_p ;
92HUA check ddfileO ;} ++_01IHUA RP NOOE p->rp covlist「01 lHUA_RP_N00E_p->pc = 0];++ OllHUA RP NOOE p->rp covlist「 OllHUA RP NOOE p->pc = 1];#5,,/home3/wcy/c++doc/instr/instr3. cc,,2#5Int · i = O}(实施例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的字段的将自动作为数据库表的主键,同时具有AUT0_INCREMENT的属性,名中以id 为后辍的字段名将自动作为数据库表的外键,而createcLat则作为时间戳,用于保存创建记录时的时间。这些都是数据库设计的默认约定,而在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, η = O ;
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++)
{
++η ;
if(n>max) break ;
printf (" % 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-PR0\SUM-PR0. exe
Enter positive integers Low, HIGH, and Max 280通过示例程序SUM-PRO,斜体字符被显示,上面突出显示的字符被立即输入。跟踪 数据被自动地更新,如下所示 本发明的上述实施例仅为说明本发明所作的举例,而本发明实施方式并不局限于 此。对于属于本发明的精神与原理下所作的修改、组合、简化、替代等均为等效替换,都仍然 包含在本发明的保护范围之内。
权利要求
一种软件探测方法,其特征在于包括如下步骤A、启动代码插装步骤,该步骤包括虚拟执行被测软件,即对被测软件的程序源代码进行词法分析和语法分析,以识别出特征代码,该特征代码包括变量、函数、子程序和面向对象的类;然后对所述程序源代码的程序流程按数据块进行划分,以得到表述所述被测软件的程序结构和静态流程的划分数据并存入一静态数据库中,同时该静态数据库预存有根据被测软件的功能说明书得到的正常程序结构和静态流程;然后在所述程序源代码中插入对应于所述特征代码的探测代码;最后把插入了所述探测代码的程序源代码编译连接成可执行程序;所述探测代码用于收集所述可执行程序运行时生成的动态数据;该动态数据包括函数、子程序的调用记录,面向对象的类的消息传递,以及由所述函数、子程序的调用记录和面向对象的类的消息传递构成的所述被测软件运行时的程序结构和控制流程;B、执行模式识别步骤,该步骤用于对所述可执行程序执行模型检测,即将所述静态数据库中预存的正常程序结构和静态流程与所述探测代码获取的被测软件运行时的程序结构和控制流程进行比较;若二者一致,则判断所述可执行程序正常;否则,则判断所述可执行程序中存在“特殊的结构”或“漏洞”;所述“特殊的结构”是指与被测软件的功能说明书不相关的变量、函数、子程序或类的消息传递;所述“漏洞”是指根据被测软件的功能说明书被测软件中缺少应有的变量、函数、子程序或类的消息传递;C、当发现存在“特殊的结构”或“漏洞”后,执行模式分析步骤,该步骤用于分析所述可执行程序的控制流程,以找出并上报引起“特殊的结构”或“漏洞”的代码执行轨迹;该代码执行轨迹是由引起执行“特殊的结构”或“漏洞”的一系列代码的集合所构成的程序流程;D、执行数据处理与传输步骤,该步骤用于根据所述代码执行轨迹,得出被测软件存在“特殊的结构”和/或“漏洞”的信息、及其运行的时间信息和运行次数,然后通过无线或有线的方式,传输到监管节点和/或监管网络。
2.根据权利要求1所述的软件探测方法,其特征在于所述的代码插装步骤还包括建 立在进行所述语法分析时生成的用于记录并保存在所述可执行程序运行时产生的所述动 态数据的动态数据库文件,包括DD文件,用于记录在所述可执行程序运行时各记录点即所述特征代码的累计运行次 数、最后一次运行次数、以及运行时间信息;DDC文件,用于记录在所述可执行程序运行时各判断、条件曾经为真或者为假的数据;DDH文件,用于记录在所述可执行程序运行时各个记录点对应的程序语句是否运行过 的历史数据。
3.根据权利要求1所述的一种软件探测方法,其特征在于所述代码插装步骤中,在识 别出特征代码时,同时生成插装信息链表;然后根据该插装信息链表在所述程序源代码中 插入对应于所述特征代码的探测代码;所述根据插装信息链表插装源程序的位置包括插 装源程序文件头部、插装函数头部、插装条件表达式、插装流程控制语句和插装标号语句。
4.根据权利要求1所述的软件探测方法,其特征在于所述模式分析的步骤包括程序 节点探测模式分析和程序段探测模式分析,用于对所述程序源代码的程序流程按数据块进 行分析,然后划分出所述数据块;所述程序节点探测模式分析包括判断的入口点和出口点、if…else语句中的else的 入口点和出口点、连接的入口点和出口点、以及程序单元的入口点和出口点;所述程序段探测模式分析是指两个连续的程序分支点间的程序语句序列;所述程序分 支点包括程序节点、以及无条件转移语句与下一条语句之间的位置。
5.一种应用上述权利要求1-4之一所述的软件探测方法的软件探测器,其特征在于包 括与用于执行所述可执行程序的中央处理器相连的探测控制器、与探测控制器相连的无 线数据收发器和/或有线数据收发器;当所述软件探测器发现存在“特殊的结构”和/或“漏洞”后,执行所述模式分析步骤, 然后将被测软件存在“特殊的结构”和/或“漏洞”的信息、及该“特殊的结构”和/或“漏 洞”运行的时间信息和运行次数经所述无线数据收发器和/或有线数据收发器传送至所述 监管节点和/或监管网络。
6.一种应用上述权利要求5所述的软件探测器的软件探测系统,其特征在于包括作 为所述监管节点的上位机、与分布于不同地域的多个所述上位机相连的监管服务器系统; 所述上位机用于与同地域内的多个所述软件探测器通过无线和/或有线的方式通信连接。
全文摘要
本发明属于一种软件探测方法和应用该方法的软件探测器及软件探测系统。所述软件探测方法用于对应用软件在运行中的程序流程信息的实时探测,在对被测软件进行代码插装后,通过模型检测判断是否存在“特殊的结构”或“漏洞”,并找出代码执行轨迹,然后将程序流程信息采用无线或有线方式将此信息传送到监管节点或监管网络。本发明在法制监管领域可以对计算机系统内部运行的软件进行实时监控。本发明的软件探测系统构成法制计量监控网络,对计量器具的使用进行监控,为执法打假快速反应提供服务和支撑。能对电子衡器软件或金融监管软件中的“后门程序”和“作弊口令”等特定目标进行探测、并将探测得的信息对外传输,以使监管部门实时监视。
文档编号G06F11/36GK101923510SQ20101014614
公开日2010年12月22日 申请日期2010年4月13日 优先权日2010年4月13日
发明者张克东 申请人:张克东
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1