一种程序特征序列生成方法和装置与流程

文档序号:21888915发布日期:2020-08-18 17:38阅读:124来源:国知局
一种程序特征序列生成方法和装置与流程
本发明涉及程序特征分析
技术领域
,尤其涉及一种程序特征序列生成方法和装置。
背景技术
:程序在运行前,需要进行可信检查,检查程序是否遭到篡改,以确保所运行的程序是预期的程序。程序在运行过程中,同样需要进行可信检查,确保程序运行的行为与预期行为一致。现有技术中,多采用程序签名的方法检查程序是否遭到篡改,但这种方法仅适用于程序运行前的检查。在程序运行过程中,由于程序已经被打散在内存中,指令部分、数据部分、堆栈部分都有所不同,数据部分会时刻变化,因此难以在程序运行过程中检查程序是否遭到篡改。技术实现要素:本发明提供了一种程序特征序列生成方法和装置,解决了现有技术难以在程序运行过程中检查程序是否遭到篡改的问题。本发明提供的一种程序特征序列的生成方法,所述程序包括多条程序指令;所述多条程序指令分别具有对应的指令序号;所述的方法包括:当扫描所述程序时,扫描所述多条程序指令中指令序号最小的未扫描的程序指令,并判断当前扫描的程序指令的指令类型;当所述指令类型为跳转类指令时,生成所述当前扫描的程序指令的跳转关系数字对,并保存所述跳转关系数字对;判断所述当前运行的程序指令的指令序号是否等于预设阈值;若否,则跳转至扫描所述多条程序指令中指令序号最小的未扫描的程序指令的步骤;若是,则采用保存的所述跳转关系数字对生成特征序列,并停止扫描所述程序。可选地,所述多条程序指令还具有对应的指令地址;所述当所述指令类型为跳转类指令时,生成所述当前扫描的程序指令的跳转关系数字对,并保存所述跳转关系数字对的步骤,包括:当所述指令类型为跳转类指令时,在所述当前扫描的程序指令中提取跳转地址;计算所述跳转地址与所述当前扫描的程序指令的指令地址之间的差值;获取预设计数器的当前计数器值;采用所述当前计数器值和所述差值生成所述当前扫描的程序指令的跳转关系数字对,并保存所述跳转关系数字对。可选地,所述的方法还包括:若所述指令类型为非跳转类指令,则跳转至扫描所述多条程序指令中指令序号最小的未扫描的程序指令的步骤。可选地,所述跳转类指令包括条件跳转指令;所述当所述指令类型为跳转类指令时,在所述当前扫描的程序指令中提取跳转地址的步骤,包括:当所述指令类型为条件跳转指令时,在所述当前扫描的程序指令中提取跳转地址。可选地,所述跳转类指令还包括非条件跳转指令;所述方法还包括:当所述指令类型为非条件跳转指令时,则跳转至扫描所述多条程序指令中指令序号最小的未扫描的程序指令的步骤。本发明提供的一种程序特征序列生成装置,所述程序包括多条程序指令;所述多条程序指令分别具有对应的指令序号;包括:指令类型判断模块,用于当扫描所述程序时,扫描所述多条程序指令中指令序号最小的未扫描的程序指令,并判断当前扫描的程序指令的指令类型;跳转关系数字对生成模块,用于当所述指令类型为跳转类指令时,生成所述当前扫描的程序指令的跳转关系数字对,并保存所述跳转关系数字对;判断模块,用于判断所述当前运行的程序指令的指令序号是否等于预设阈值;第一跳转模块,用于若否,则跳转至扫描所述多条程序指令中指令序号最小的未扫描的程序指令的步骤;特征序列生成模块,用于若是,则采用保存的所述跳转关系数字对生成特征序列,并停止扫描所述程序。可选地,所述多条程序指令还具有对应的指令地址;所述跳转关系数字对生成模块,包括:跳转地址提取子模块,用于当所述指令类型为跳转类指令时,在所述当前扫描的程序指令中提取对应的跳转地址;差值计算子模块,用于计算所述跳转地址与所述当前扫描的程序指令的指令地址之间的差值;当前计数器值获取模块子,用于获取预设计数器的当前计数器值;跳转关系数字对生成子模块,用于采用所述当前计数器值和所述差值生成所述当前扫描的程序指令的跳转关系数字对,并保存所述跳转关系数字对。可选地,所述的装置还包括:第二跳转模块,用于若所述指令类型为非跳转类指令,则跳转至扫描所述多条程序指令中指令序号最小的未扫描的程序指令的步骤。可选地,所述跳转类指令包括条件跳转指令;所述跳转地址提取子模块,包括:跳转地址提取单元,用于当所述指令类型为条件跳转指令时,在所述当前扫描的程序指令中提取跳转地址。可选地,所述跳转类指令还包括非条件跳转指令;所述跳转地址提取子模块,还包括:跳转单元,用于当所述指令类型为非条件跳转指令时,则跳转至扫描所述多条程序指令中指令序号最小的未扫描的程序指令的步骤。从以上技术方案可以看出,本发明具有以下优点:本发明在扫描程序时,依次扫描程序指令,当程序指令为跳转类指令时,计算该程序指令的指令地址与跳转地址之间的差值;采用该差值和该程序指令所对应的计数器值生成跳转关系数字对,以根据跳转关系数字对生成特征序列。从而通过判断该特征序列是否为预期的特征序列来判断运行中的程序是否被篡改。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。图1为本发明提供的一种程序特征序列生成方法实施例的步骤流程图;图2为本发明提供的一种程序特征序列生成装置实施例的结构框图。具体实施方式本发明实施例提供了一种程序特征序列的生成方法和装置,用于解决现有技术难以在程序运行过程中检查程序是否遭到篡改的技术问题。为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。请参阅图1,图1为本发明实施例提供的一种程序特征序列的生成方法的步骤流程图。本发明提供的一种程序特征序列的生成方法,所述程序包括多条程序指令;所述多条程序指令分别具有对应的指令序号和指令地址;所述的方法包括:步骤101,当扫描所述程序时,扫描所述多条程序指令中指令序号最小的未扫描的程序指令,并判断当前扫描的程序指令的指令类型;在实际应用中,出于保证信息安全的目的,在运行程序时,需要检测程序是否被篡改。而在程序运行过程中,由于程序已经被打散在内存中,指令部分、数据部分、堆栈部分都有所不同,数据部分会时刻变化,因此难以检测程序是否被篡改。本发明提供的程序特征序列生成方法,通过分析程序跳转等情况,建立描述程序指令地址变化的序列,作为区分程序的特征指纹,当该特征指纹与预先设置的程序特征指纹不一致时,表征程序跳转情况出现变化,程序遭到篡改。在本发明实施例中,程序指令根据扫描顺序具有对应的指令序号和指令地址。其中,指令序号用以表征该程序指令为第几条被扫描的程序指令;指令地址用以表征程序指令的存储地址。程序指令可以包括跳转类指令和非跳转类指令,其中跳转类指令记录了该条程序指令扫描完毕后需要跳转扫描的程序指令的指令地址,用于在该条程序指令扫描完毕后进行相应的跳转。基于上述教导,在程序开始运行时,需要逐一判断程序指令是否为跳转指令,以记录程序的跳转情况。步骤102,生成所述当前扫描的程序指令的跳转关系数字对,并保存所述跳转关系数字对。在本发明实施例中,在依照程序指令的指令序号由小到大遍历程序指令的过程中,当遍历到的当前正在扫描的程序指令为跳转类指令时,可以提取当前扫描的跳转类指令的跳转关系,生成跳转关系数字对,用于表征当前扫描的跳转类指令的跳转关系。在本发明实施例中,步骤102可以包括以下子步骤:s11,当所述指令类型为跳转类指令时,在所述当前扫描的程序指令中提取对应的跳转地址;在本发明实施例中,在依照程序指令的指令序号由小到大遍历程序指令的过程中,当遍历到的当前正在扫描的程序指令为跳转类指令时,提取该正在扫描的程序指令的跳转地址,但不扫描跳转操作,并记录当前正在扫描的程序指令为第几条被扫描指令。用于标识该程序指令的扫描顺序是否被篡改。在本发明实施例中,当指令类型为非跳转类指令时,则跳转至扫描所述多条程序指令中指令序号最小的未扫描的程序指令的步骤。具体地,当指令类型为非跳转类指令时,说明当前扫描的程序指令并未包括跳转信息,因此无需记录跳转情况,顺序扫描下一条程序指令即可。在本发明实施例中,跳转类程序指令包括条件跳转指令和非条件跳转指令。当当前扫描的程序序列为条件跳转指令时,在当前扫描的程序指令中提取跳转地址的步骤包括:当指令类型为条件跳转指令时,在当前扫描的程序指令中提取跳转地址。当当前扫描的程序序列为非条件跳转指令时,顺序扫描下一条指令。s12,计算所述跳转地址与所述当前扫描的程序指令的指令地址之间的差值;在获取到正在扫描的程序指令的跳转地址和自身的指令地址后,可以计算该程序指令的跳转地址与指令地址之间的差值,用于确定该程序指令的跳转内容是否被篡改。在一个示例中,当正在扫描的程序指令的指令地址为n1,跳转地址为n5时,跳转地址和指令地址之间的差值为(n5-n1)。s13,获取预设计数器的当前计数器值;在本发明实施例中,已扫描的程序指令的数量可以通过计数器来进行统计。在一个示例中,当程序开始运行时,将计数器的计数器值n置0。从程序的起始地址开始分析程序指令。将计数器的计数器值加1,开始分析第1条程序指令。在第一条指令分析结束后,将计数器的计数器值再次加1,开始分析第2条程序指令。计数器值用以表征当前正在扫描的程序指令为第几条被扫描的程序指令。s14,采用所述当前计数器值和所述差值生成所述当前扫描的程序指令的跳转关系数字对,并保存所述跳转关系数字对;在获取到预设计数器的当前计数器值和当前扫描的程序指令的指令地址和跳转地址之间的差值后,可以生成用以表征当前扫描的程序指令的扫描顺序与跳转情况的跳转关系数字对。在程序运行过程中,可以保存在这个过程中生成的每一个跳转关系数字对,以用以构建表征该程序跳转情况的特征序列。步骤103,判断所述当前运行的程序指令的指令序号是否等于预设阈值;在实际应用中,程序的指令数量是固定的,因此可以通过判断是否遍历到最后一条程序指令来判断程序是否扫描完毕。具体地,可以通过判断当前扫描的程序指令的指令序号是否为设定的最后一条程序的指令信号来判定。步骤104,若否,则跳转至扫描所述多条程序指令中指令序号最小的未扫描的程序指令的步骤;当程序的所有程序指令并未全部扫描完毕时,则需要按照程序指令的扫描顺序来确定需要扫描的程序指令,在本发明实施例中,程序指令的扫描顺序是按照指令序号的大小从小到大确定的。因此,在扫描完一条程序指令后,需要扫描的程序指令为未扫描的程序指令中指令序号最小的程序指令。步骤105,若是,则采用保存的所述跳转关系数字对生成特征序列,并停止扫描所述程序。若当前扫描的程序指令为程序的最后一条程序指令,表现为当前扫描的程序指令的指令序号为预先设定的指令序号的阈值,则表征该程序的所有程序指令以扫描完毕。此时程序运行结束,将在程序运行过程中所产生的所有的跳转关系数字对以序列的形式进行保存,便生成表征该程序跳转情况的特征序列。通过该特征序列可以判断程序是否被篡改。本发明在程序运行时,依次扫描程序指令,当程序指令为跳转类指令时,计算该程序指令的指令地址与跳转地址之间的差值;采用该差值和该程序指令所对应的计数器值生成跳转关系数字对,以根据跳转关系数字对生成特征序列。从而根据该特征序列判断运行中的程序是否被篡改。为便于本领域技术人员理解本发明实施例,下面通过具体示例进行说明。如表1所示,假设程序具有1-n10条程序指令,在开始运行程序前,将预设计数器的计数器值n置0,即令n=0。当触发程序运行后,第一步:计数器值n=1,扫描第1条程序指令,判断第1条程序指令为非跳转类指令,则顺序分析第二条程序指令;第二步:计数器值n=2,扫描第2条程序指令,判断第2条程序指令为跳转类指令,跳转地址为n1,则记录跳转关系数字对(2,n1-2);......第n2步:计数器值n=n2,扫描第n2条指令,判断第n2条程序指令为跳转类指令,跳转地址为n6,则记录跳转关系数字对(n2,n6-n2),此时特征序列为[(2,n1-2),(n2,n6-n2)];......第n5步:计数器值n=n5,扫描第n5条指令,判断第n5条指令为跳转类指令,跳转地址为n1,则记录跳转关系数字对(n5,n1-n5),此时特征序列为[(2,n1-2),(n2,n6-n2),(n5,n1-n5)];......第n8步:计数器值n=n8,扫描第n8条指令,判断第n8条指令为跳转类指令,跳转地址为n10,则记录跳转关系数字对(n8,n10-n8),此时特征序列为[(2,n1-2),(n2,n6-n2),(n5,n1-n5),(n8,n10-n8)];......第n10步:计数器值n=n10,扫描第n10条程序指令,判断第n10条程序指令为非跳转类指令,由于n10为最后一条程序指令,扫描完毕后结束程序运行。指令地址指令跳转地址1非跳转类指令2跳转类指令n1......n1非跳转类指令n2跳转类指令n6n3非跳转类指令......n4非跳转类指令n5跳转类指令n1n6非跳转类指令......n7非跳转类指令n8跳转类指令n10n9非跳转类指令......n10非跳转类指令表1请参阅图2,图2为本发明实施例提供的一种程序特征序列的生成裝置的步骤流程图。本发明提供的一种程序特征序列生成装置,包括:指令类型判断模块201,用于当扫描所述程序时,扫描所述多条程序指令中指令序号最小的未扫描的程序指令,并判断当前扫描的程序指令的指令类型;跳转关系数字对生成模块202,用于当所述指令类型为跳转类指令时,生成所述当前扫描的程序指令的跳转关系数字对,并保存所述跳转关系数字对;判断模块203,用于判断所述当前运行的程序指令的指令序号是否等于预设阈值;第一跳转模块204,用于若否,则跳转至扫描所述多条程序指令中指令序号最小的未扫描的程序指令的步骤;特征序列生成模块205,用于若是,则采用保存的所述跳转关系数字对生成特征序列,并停止扫描所述程序。在本发明实施例中,所述多条程序指令还具有对应的指令地址;所述跳转关系数字对生成模块202,包括:跳转地址提取子模块,用于当所述指令类型为跳转类指令时,在所述当前扫描的程序指令中提取对应的跳转地址;差值计算子模块,用于计算所述跳转地址与所述当前扫描的程序指令的指令地址之间的差值;当前计数器值获取模块子,用于获取预设计数器的当前计数器值;跳转关系数字对生成子模块,用于采用所述当前计数器值和所述差值生成所述当前扫描的程序指令的跳转关系数字对,并保存所述跳转关系数字对。在本发明实施例中,所述的装置还包括:第二跳转模块,用于若所述指令类型为非跳转类指令,则跳转至扫描所述多条程序指令中指令序号最小的未扫描的程序指令的步骤。在本发明实施例中,所述跳转类指令包括条件跳转指令;所述跳转地址提取子模块,包括:跳转地址提取单元,用于当所述指令类型为条件跳转指令时,在所述当前扫描的程序指令中提取跳转地址。在本发明实施例中,所述跳转类指令还包括非条件跳转指令;所述跳转地址提取子模块,还包括:跳转单元,用于当所述指令类型为非条件跳转指令时,则跳转至扫描所述多条程序指令中指令序号最小的未扫描的程序指令的步骤。在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不扫描。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1