一种JAVA卡帧的边界检查方法与流程

文档序号:12669977阅读:543来源:国知局
一种JAVA卡帧的边界检查方法与流程

本发明涉及智能卡技术领域,尤其涉及一种JAVA卡帧的边界检查方法。



背景技术:

随着电子政务和电子商务的发展,Java卡的应用越来越广泛,为解决用户对一卡多用的需要,目前多应用的Java卡越来越普遍,而应用之间的安全问题也日益重要。

现有的攻击手段中可通过激光攻击java卡的存储介质或者下载恶意Applet应用等方式,修改java方法的局部变量索引或者增减弹栈压栈操作,对方法帧的操作数栈和局部变量区进行越界访问,非法获取卡的存储数据。Java卡需要提供一种帧的边界检查方法,识别针对Java虚拟机的越界访问,即保证应用不能访问权限之外的栈数据。



技术实现要素:

为了解决Java卡平台现有技术中存在的上述问题,本发明提供了一种JAVA卡帧的边界检查方法。

本发明采取的技术方案如下:

一种JAVA卡帧的边界检查方法,包括如下步骤:

步骤S1:Java卡虚拟机执行应用的Java方法时,建立一个方法帧,并压入栈,记录方法帧的起始地址。同时记录两个范围:合法操作数范围和合法局部变量索引范围。

步骤S2:所述Java卡虚拟机执行所述所述Java方法的字节码时如需访问栈数据,获取需要访问的栈数据类型。

步骤S3:根据所述数据类型;如果当前操作数据是局部变量,则执行步骤A1;如果当前操作数据是操作数,则执行步骤B1。

步骤A1:判断局部变量索引是否在合法局部变量索引范围内,是则执行步骤S4,否则抛出异常。

步骤B1:判断操作数地址是否在合法操作数范围内,是则执行步骤S4,否则抛出异常。

步骤S4:Java卡虚拟机执行当前字节码。

进一步的,所述的记录两个范围,其特征是:所述Java卡虚拟机解析所述应用的Java方法的method_header_info数据结构中的max_stack,max_locals,nargs信息结合所述方法帧的起始地址信息。使用0作为合法局部变量索引范围的下边界;使用方法帧下边界加上(max_locals+nargs-1)作为合法局部变量索引范围的上边界;使用方法帧起始地址+((max_locals+nargs)*2)作为合法操作数范围的下边界;使用合法操作数范围的下边界加上(max_stack*2)作为合法操作数范围的上边界。

本发明的有益效果在于:本发明实现了Java卡的多应用安全管理,尤其是通过边界检查的方法控制栈帧数据的访问,提高了多应用共存的安全性。

附图说明

图1是一个Java方法在java卡虚拟机上的执行流程图。

图2是合法操作数范围和合法局部变量索引范围的位置示意图。

图3是以sstore_2字节码为示例的执行流程图。

具体实施方式

下面将结合附图和具体实施例对本发明做进一步的说明。

图1指出了一个java方法在java卡虚拟机上的执行流程。Java卡虚拟机执行该方法时,会为其建立一个方法帧,并压入栈,记录方法帧的起始地址。同时记录两个范围:合法操作数范围和合法局部变量索引范围。然后依次执行java方法中的字节码。直至java方法执行结束,方法帧弹出栈。

图2指出了合法操作数范围和合法局部变量索引范围的位置示意图。从方法帧的起始地址开始,是局部变量区。因此合法局部变量范围为方法帧起始地址到((max_locals+nargs)*2)。则合法局部变量索引范围为0到(max_locals+nargs-1)。局部变量区上方是操作数区。因此合法操作数范围为(方法帧起始地址+((max_locals+nargs)*2))到(方法帧起始地址+(max_locals+nargs)*2+max_stack*2)。

图3是上述Java方法中sstore_2字节码的执行流程图。检查字节码所要写入索引为2的局部变量是否在合法局部变量索引范围内,在则继续执行,不在则抛出异常结束。从帧中将两个字节数据弹栈,并将帧顶指针减2存储。检查帧顶指针是否在合法操作数范围内,在则继续执行,不在则抛出异常结束。将两个字节数据写入到局部变量中。

显然,本领域的技术人员可以对本发明进行各种改动和变形而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变形属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1