CN103093142B - 一种Java卡对象访问的控制方法 - Google Patents
一种Java卡对象访问的控制方法 Download PDFInfo
- Publication number
- CN103093142B CN103093142B CN201210574908.4A CN201210574908A CN103093142B CN 103093142 B CN103093142 B CN 103093142B CN 201210574908 A CN201210574908 A CN 201210574908A CN 103093142 B CN103093142 B CN 103093142B
- Authority
- CN
- China
- Prior art keywords
- current
- current accessed
- accessed object
- java card
- virtual machine
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种Java卡对象访问的控制方法,属于智能卡技术领域。该方法包括:Java卡虚拟机根据当前被执行指令得到当前访问对象的类型;如果当前访问对象是方法调用,则包括判断当前访问对象是否是共享接口方法调用,是则判断当前访问对象所属的包是否是活动包,否则执行当前访问对象是读写对象的判断;如果当前访问对象是读写对象,则判断当前访问对象是否是不受防火墙限制的对象或满足基本检测条件,如果是其他类型则判断当前访问对象是否满足基本检测条件;上述判断为是则允许访问,否则抛出异常。本发明实现了Java卡的多应用安全管理。
Description
技术领域
本发明属于智能卡技术领域,特别涉及一种Java卡对象访问的控制方法。
背景技术
随着电子政务和电子商务的发展,Java卡的应用越来越广泛,为解决用户对一卡多用的需要,目前多应用的Java卡越来越普遍,而应用之间的安全问题也日益重要。
现有技术中,多个应用(applet)存在于同一智能卡中,因此Java卡平台需要提供一种控制机制将应用隔离,即保证某一applet不能随便访问其他applet的对象。
发明内容
为了解决现有技术中存在的上述问题,本发明提出了一种Java卡对象访问的控制方法。
本发明采取的技术方案是:一种Java卡对象访问的控制方法包括:
步骤S1:Java卡虚拟机解释执行当前应用的Java程序;
步骤S2:所述Java卡虚拟机获取所述Java程序中当前被执行指令提供的对象引用,根据所述对象引用从预设存储区获取当前访问对象,并读取所述当前访问对象的环境值;
步骤S3:所述Java卡虚拟机根据当前被执行指令得到当前访问对象的类型;如果当前访问对象类型是方法调用,则执行步骤A1;如果当前访问对象类型是读写对象,则执行步骤B1;否则执行步骤C1;
步骤A1:判断当前访问对象是否是共享接口方法调用,是则执行步骤A2,否则执行步骤B1;
步骤A2:判断当前访问对象所属的包是否是活动包,是则执行步骤S4,否则抛出异常;
步骤B1:判断当前访问对象是否是不受防火墙限制的对象或满足基本检测条件,是则执行步骤S4,否则抛出异常;
步骤C1:判断当前访问对象是否满足基本检测条件,是则执行步骤S4,否则抛出异常;
步骤S4:Java卡虚拟机执行当前被执行指令。
所述步骤S2具体为:所述Java卡虚拟机根据当前被执行指令中的参数,从虚拟机运行栈上获取对象引用,从预设存储区获取与所述对象引用对应的当前访问对象,读取当前访问对象的第二个字节为所述当前访问对象的环境值。
上述步骤A1 所述判断当前访问对象是否是共享接口方法调用包括:
步骤2-1:判断当前被执行指令的第一个字节是否为第三预设值,是则继续下一步,否则当前访问对象不是共享接口方法调用;
步骤2-2:根据当前被执行指令获得当前访问对象所在类型的引用,根据所述引用获得类型信息;
步骤2-3:根据所述类型信息的第1个字节判断当前访问对象是否是共享接口方法调用。若所述类型信息的第1个字节的第2位为1,则当前访问对象是共享接口方法调用。
上述步骤A2所述判断当前访问对象所属的包是否是活动包具体为:Java卡虚拟机遍历所有通道,判断当前访问对象的环境值的高4位是否与某一通道中存储的环境值的高4位相等,是则当前访问对象所属的包是活动包,否则当前访问对象所属的包不是活动包。进一步的,某一通道中存储的环境值是指某一通道对应的全局变量中的环境值。
上述步骤B1所述不受防火墙限制的对象包括入口点对象和全局数组对象。
步骤B1和C1所述满足基本检测条件包括满足当前执行环境为系统环境或当前访问对象的环境值等于当前执行环境的环境值。
所述步骤C1具体为:
步骤C1-1:判断当前执行环境是否为系统环境,是则执行步骤S4,否则执行步骤C1-2;
步骤C1-2:判断当前访问对象的环境值是否与当前执行环境的环境值相等,是则执行步骤S4,否则抛出异常。
所述步骤B1具体为:判断当前访问对象是否是不受防火墙限制的对象,是则执行步骤S4,否则执行步骤C1。
所述判断当前执行环境是否为系统环境具体为判断当前执行环境的环境值是否为第二预设值。
所述判断当前访问对象是否是不受防火墙限制的对象具体包括:
步骤B1-1:判断当前访问对象是否为入口点对象,是则执行步骤S4,否则执行步骤 B1-2;
步骤B1-2:判断当前访问对象是否为全局数组对象,是则执行步骤S4,否则执行步骤C1。
所述判断当前访问对象是否为入口点对象具体为判断当前访问对象的第一个字节是否为第一预设值。
所述判断当前访问对象是否为全局数组对象具体为判断当前访问对象的第一个字节是否与全局数组属性值匹配。全局数组属性值包括0x70、 0x90 、 0xB0 、 0xD0 和 0xF0。
所述步骤S1之前还包括:
步骤1-1:Java卡虚拟机接收到APDU应用选择命令,解析所述APDU应用选择命令并从中获取应用标识符;
步骤1-2:所述Java卡虚拟机根据所述应用标识符遍历卡片上所有的包,查找到所述应用标识符对应的包索引;根据所述应用标识符遍历卡片上所有已安装的应用列表,查找到所述应用标识符对应的应用索引;
步骤1-3:所述Java卡虚拟机根据所述包索引和所述应用索引计算得到当前执行环境的环境值。
所述步骤1-3具体为Java卡虚拟机将所述包索引作为高4位,将所述应用索引作为低4位,两者拼接组成的一个字节即为得到的当前执行环境的环境值。
本发明取得的有益效果如下:本发明实现了Java卡的多应用安全管理,尤其是通过一种防火墙检测机制控制多应用对象的访问,提高了多应用之间的安全性。
附图说明
图1是实施例1提供的一种Java卡对象访问的控制方法流程图;
图2是实施例2提供的一种Java卡对象访问的控制方法流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述,以下实施例中一个应用的Java程序等同于一个applet。
实施例1
本实施例提供了一种Java卡对象访问的控制方法,如图1所示,包括以下步骤:
步骤1:Java卡虚拟机解释执行当前应用的Java程序;
本实施例中具体地,所述当前应用的Java程序由多条被执行指令组成,Java卡虚拟机解释执行当前应用的Java程序具体为依次执行所述被执行指令。
本实施例优选的本步骤之前还包括:
步骤1-1:Java卡虚拟机接收到APDU应用选择命令,解析所述APDU应用选择命令并从中获取应用标识符(AID);
进一步的,在Java卡中有多个通道,步骤1-1还包括:
Java卡虚拟机解析所述APDU应用选择命令并从中获取当前被选择通道,具体地,Java卡虚拟机根据所述APDU应用选择命令的第一个字节得到当前被选择通道。
步骤1-2:Java卡虚拟机根据 AID 遍历卡片上所有的包,查找到该AID对应的包索引;根据 AID 遍历卡片上所有已安装的应用列表,查找到该AID对应的应用索引;
具体地,卡片上的包中包含有已安装应用的Java程序,卡片上的包的包索引用于标识包的存储位置,AID和包索引一一对应,AID和应用列表中的应用索引一一对应。
优选的本步骤具体为:Java卡虚拟机解释执行包索引所对应包中的当前应用的Java程序。
进一步的,上述步骤1-2之后还包括:
步骤1-3:Java卡虚拟机根据包索引和应用索引计算得到当前执行环境的环境值(CC值);
具体地,Java卡虚拟机将得到的包索引作为高4位,将得到的应用索引作为低4位,两者拼接组成的一个字节即为当前执行环境的环境值。进一步的,本步骤计算得到的当前执行环境的CC值保存在当前被选择通道对应的全局变量中。
步骤2:Java卡虚拟机获取Java程序中当前被执行指令提供的对象引用,根据对象引用从预设存储区获取当前访问对象,并读取当前访问对象的环境值;
本实施例中具体地,所述预设存储区用于存储所有访问对象,对象引用与预设存储区中存储的访问对象一一对应,所述访问对象由对象头和数据域组成。
本步骤具体为:Java卡虚拟机解释执行当前被执行指令,根据指令中提供的参数,从Java卡虚拟机运行栈上获取相应的对象引用,从预设存储区中获取与所述对象引用对应的当前访问对象,读取当前访问对象的第二个字节为当前访问对象的环境值。
步骤3:Java卡虚拟机根据当前被执行指令得到当前访问对象的类型;
当访问对象类型是方法调用时,执行步骤4,当访问对象类型是读写对象时,执行步骤6,当前访问对象类型是其他时,执行步骤7。
具体地,当前被执行指令的第一个字节为0x8B或0x8E时,当前访问对象是方法调用,当前被执行指令的第一个字节为0x83、0x84、0x85、0x86、0x87、0x88、0x89、0x90、0xA9、0xAA、0xAB、0xAC、0xAD、0xAE、0xAF、0xB0、0xB1、0xB2、0xB3、0xB4、0xB5、0xB6、0xB7、0xB8、0x94之中任一数值时,当前访问对象是读写对象,否则当前访问对象是其他类型,本实施例中具体地当前被执行指令的第一个字节是0x93时表示当前访问对象是其他类型。
步骤4:判断当前访问对象是否是共享接口方法调用,是则执行步骤5,否则执行步骤6;
本实施例中具体地,根据当前被执行指令的第一个字节和当前访问对象判断当前访问对象是否是共享接口方法调用,当被执行指令的第一个字节为0x8E时当前访问对象可能是共享接口方法调用,因此,当被执行指令的第一个字节为0x8E时判断当前访问对象是否是共享接口具体为:
根据当前被执行指令获得当前访问对象所调用的接口方法所在类型的引用,根据所述引用得到类型信息,根据类型信息的第1个字节判断当前访问对象是否是共享接口方法调用,具体地,当所述类型信息的第一个字节的第二位为1时则当前访问对象是共享接口方法调用。
步骤5:判断当前访问对象所属的包是否是活动包,是则执行步骤8,否则抛出异常;
本实施例中具体地,Java卡虚拟机遍历所有通道,判断当前访问对象的CC值的高4位是否与某一通道中存储的CC值的高4位相等,是则当前访问对象所属的包为活动包允许访问,否则抛出异常。
步骤6:判断当前访问对象是否是不受防火墙限制的对象或满足基本检测条件,是则执行步骤8,否则抛出异常;
本实施例中具体地,不受防火墙限制的对象包括入口点对象、全局数组对象。
判断是否满足基本检测条件具体为:
(1)当前执行环境为系统环境;
(2)当前访问对象的环境值等于当前执行环境的环境值;
若满足上述任一条件则当前访问对象满足基本检测条件。
步骤7:判断当前访问对象是否满足基本检测条件,是则执行步骤8,否则抛出异常;
本步骤的判断与步骤6所述判断是否满足基本检测条件相同,在此不再赘述。
步骤8:Java卡虚拟机执行当前被执行指令。
实施例2
在实施例1的基础上,本实施例提供了一种Java卡对象访问的控制方法,如图2所示,包括以下步骤:
步骤101:Java卡虚拟机解释执行当前应用的Java程序;
本实施例中具体地,所述当前应用的Java程序由多条被执行指令组成,Java卡虚拟机解释执行当前应用的Java程序具体为依次执行所述被执行指令。
本实施例优选的本步骤之前还包括:
步骤1-1:Java卡虚拟机接收到APDU应用选择命令,解析所述APDU应用选择命令并从中获取应用标识符(AID);
具体包括:1)Java卡虚拟机判断接收到的APDU应用选择命令的前四个字节是否为00 A4 04 00,是则继续,否则抛出异常;
2)Java卡虚拟机根据所述APDU应用选择命令的第五个字节获取AID的长度;
3)从第六个字节开始读取长度为AID长度的数据即为获取到的AID。
进一步的,在Java卡中有多个通道,步骤1-1还包括:
Java卡虚拟机解析所述APDU应用选择命令并从中获取当前被选择通道,具体地,Java卡虚拟机根据所述APDU应用选择命令的第一个字节得到当前被选择通道。
本实施例中优选的:Java卡虚拟机接收到0x01 0xA4 0x04 0x000x08 0xA0 0x00 0x00 0x00 0x03 0x00 0x00 0x00;其中0x01 0xA4 0x04 0x00 代表接收到的是APDU 应用选择命令,0x08 代表后面 AID 的长度,则从该命令中获取的AID为: 0xA00x00 0x00 0x00 0x03 0x00 0x00 0x00 ,第一个字节0x01表示当前被选择通道为通道1。
步骤1-2:Java卡虚拟机根据 AID 遍历卡片上所有的包,查找到该AID对应的包索引;根据 AID 遍历卡片上所有已安装的应用列表,查找到该AID对应的应用索引;
具体地,卡片上的包中包含有已安装应用的Java程序,卡片上的包的包索引用于标识包的存储位置,AID和包索引一一对应,AID和应用列表中的应用索引一一对应。
本实施例中优选的,若卡片上有3个包,AID 所代表的应用在第2个包中,则Java卡遍历卡片上所有的包之后查找到的包索引为2;若卡片上安装了3个应用,AID所代表的应用为第3个,则遍历卡片上所有已安装的应用列表查找到的应用索引为3。
优选的本步骤具体为:Java卡虚拟机解释执行包索引所对应包中的当前应用的Java程序。
进一步的,上述步骤1-2之后还包括:
步骤1-3:Java卡虚拟机根据包索引和应用索引计算得到当前执行环境的环境值(CC值);
具体地,Java卡虚拟机将得到的包索引作为高4位,将得到的应用索引作为低4位,两者拼接组成的一个字节即为当前执行环境的环境值。进一步的,本步骤计算得到的当前执行环境的CC值保存在当前被选择通道对应的全局变量中。
本实施例中优选的:步骤1-2中查找得到的包索引为2,应用索引为3,则本步骤中Java卡虚拟机根据包索引和应用索引计算得到当前执行环境的环境值是 23 。
步骤102:Java卡虚拟机获取Java程序中当前被执行指令提供的对象引用,根据对象引用从预设存储区获取当前访问对象,并读取当前访问对象的环境值;
本实施例中具体地,所述预设存储区用于存储所有访问对象,对象引用与预设存储区中存储的访问对象一一对应,所述访问对象由对象头和数据域组成。
本步骤具体为:Java卡虚拟机解释执行当前被执行指令,根据指令中提供的参数,从Java卡虚拟机运行栈上获取相应的对象引用,从预设存储区获取与所述对象引用对应的当前访问对象,读取当前访问对象的第二个字节。
步骤103:Java卡虚拟机根据当前被执行指令得到当前访问对象的类型;
当访问对象类型是方法调用时,执行步骤104,当访问对象类型是读写对象时,执行步骤106,当前访问对象类型是其他时,执行步骤107。
具体地,当前被执行指令的第一个字节为0x8B或0x8E时,当前访问对象是方法调用,当前被执行指令的第一个字节为0x83、0x84、0x85、0x86、0x87、0x88、0x89、0x90、0xA9、0xAA、0xAB、0xAC、0xAD、0xAE、0xAF、0xB0、0xB1、0xB2、0xB3、0xB4、0xB5、0xB6、0xB7、0xB8、0x94之中任一数值时,当前访问对象是读写对象,否则当前访问对象是其他类型,本实施例中具体地当前被执行指令的第一个字是0x93时表示当前访问对象是其他类型。
本实施中优选的,若当前被执行指令为调用实例方法指令(invokevirtual指令),则当前访问对象类型是方法调用具体为调用实例方法,若当前被执行指令为调用接口方法指令(invokeinterface 指令),则当前访问对象类型是方法调用具体为调用接口方法;若当前被执行指令为读对象(getfield)或写对象(putfield)指令,则当前访问对象类型是读写对象,进一步的若当前被访问对象的第一个字节为0x20,则当前访问对象类型是读写普通对象,若当前被访问对象的第一个字节为其他取值,则当前访问对象类型是读写数组对象。例如,被访问对象的第一个字节取值为0x60 、 0x80 、 0xA0 、 0xC0 、 0xE0时分别代表布尔数组、字节数组、short数组、int数组、引用数组;若当前被执行指令为抛出异常指令(athrow指令),则当前访问对象类型是其他类型具体为抛出异常对象。
步骤104:判断当前访问对象是共享接口方法调用,是则执行步骤105,否则执行步骤106;
本实施例中,判断当前访问对象是否是共享接口方法调用具体如下:
步骤2-1:判断当前被执行指令的第一个字节是否是第三预设值,是则继续下一步,否则当前访问对象不是共享接口方法调用;
具体地,第三预设值为0x8E。
步骤2-2:根据当前被执行指令提供的对象所调用的接口方法所属类型的引用找到类型信息;
步骤2-3:根据类型信息的第1个字节判断当前访问对象是否是共享接口方法调用;
优选的,若所述类型信息的第1个字节的第2位为1,则当前访问对象不是共享接口方法调用。
步骤105:判断当前访问对象所属的包是否是活动包,是则执行步骤109,否则抛出异常;
本实施例中具体地,Java卡虚拟机遍历所有通道,判断当前访问对象的CC值的高4位是否与某一通道中存储的CC值的高4位相等,是则当前访问对象所属的包为活动包,允许访问,否则抛出异常。
步骤106:判断当前访问对象是否是不受防火墙限制的对象,是则执行步骤109,否则执行步骤107;
本实施例中判断是否是不受防火墙限制的对象具体包括:
(1)判断当前访问对象是否为入口点对象,是则允许访问当前访问对象执行步骤109,否则继续下一步;
具体地,判断当前访问对象的第一个字节是否为第一预设值,是则允许访问当前访问对象,否则继续下一步。
本实施例中优选的,第一预设值为0x28。
(2)判断当前访问对象是否为全局数组对象,是则允许访问当前访问对象执行步骤109,否则执行步骤107;
具体地,判断当前访问对象的第一个字节是否与全局数组属性值匹配,是则允许访问当前访问对象执行步骤109,否则执行步骤107。
本实施例中优选的,全局数组属性值包括0x70 、 0x90 、 0xB0、 0xD0 和 0xF0,上述全局数组属性值分别表示该访问对象是全局布尔数组、全局字节数组、全局Short数组、全局Int数组、全局引用数组。
进一步的,上述(1)、(2)的判断可以不分先后顺序。
步骤107:判断当前执行环境是否为系统环境,是则执行步骤109,否则执行步骤108;
具体地,判断当前执行环境的环境值是否为第二预设值,是则允许访问当前访问对象执行步骤109,否则执行步骤108。
本实施例中优选的,第二预设值为0x00。
步骤108:判断当前访问对象的环境值是否与当前执行环境的环境值相等,是则允许访问当前访问对象执行步骤109,否则抛出异常。
具体地,判断当前访问对象的第二个字节是否与当前执行环境的环境值相等,是则允许访问当前访问对象,否则抛出异常。
进一步的,上述步骤106、107和步骤108的顺序可以互换。
步骤109:Java卡虚拟机执行当前被执行指令。
实施例3
在实施例1或2的基础上,本实施例以具体的访问对象类型为例对Java卡对象访问的控制方法进行详细说明。Java卡虚拟机解释执行当前被执行指令时,从Java卡虚拟机运行栈上可以获取相应的对象引用。本实施例中优选的,系统环境的CC值为0x00。,Java卡虚拟机根据接收到的APDU应用选择命令得到的当前执行环境的CC值0x21。
当前被执行指令为0xAE 0x03时,从Java卡虚拟机运行栈上获取的对象引用优选为0x96,根据指令的第一个字节得到该指令为getfield_b_this 指令,得到访问对象类型是读写对象,Java卡虚拟机访问当前访问对象前执行以下操作:
步骤A1:根据对象引用找到当前访问对象为:0x20 0x00 0x00 0x13 0x04 0x00 0x01 0x00 0x08 0x00 0x05,根据当前访问对象的第一个字节得到当前访问对象的类型为读写普通对象;
步骤A2:根据当前访问对象的第二个字节得到当前访问对象的环境值;
具体地,得到的当前访问对象的CC值为0x00。
步骤A3:判断当前执行环境是否为系统环境,是则允许访问,否则继续下一步;
具体的,判断当前执行环境的CC值是否等于系统环境的CC值,本实施例中,当前执行环境的CC值0x21与系统环境的CC值0x00不等,继续下一步。
步骤A4:判断当前访问对象的CC值是否与当前执行环境的CC值相同,是则允许访问,否则抛出异常。
本实施例中,当前访问对象的CC值0x00与当前执行环境的CC值0x21不等,抛出异常。
进一步的,当判断结果是允许访问时,根据当前被执行指令的第二个字节获取当前访问对象的数据,具体为第二个字节0x03表示待提取的数据的编号,执行允许访问具体为Java卡虚拟机从当前访问对象0x200x00 0x00 0x13 0x04 0x00 0x01 0x00 0x08 0x00 0x05的数据中提取第三组数据即0x00 0x05,每2个字节为一个单位,其中前五个字节0x20 0x00 0x00 0x13 0x04为对象头,其余字节为数据。
当前被执行指令为0x26时,从Java卡虚拟机运行栈上获取的对象引用优选为0x83,根据指令的第一个字节得到该指令为加载指令(saload指令),得到访问对象类型是读写对象,Java卡虚拟机访问当前访问对象前执行以下操作:
步骤B1:根据对象引用找到当前访问对象为:0xA0 0x00 0x00 0x0A 0x16 0x00 0x0A 0x00 0x03 0x00 0x08 0x00 0x38 0x00 0x12 0x00 0x35 0x00 0x06 0x00 0x07 0x00 0x08 0x00 0x09 0x00 0x0A;根据当前访问对象的第二个字节得到当前访问对象的CC值为0x00;
步骤B2:判断当前访问对象是否是全局数组对象,是则允许访问,否则继续下一步;
本实施例中具体地,根据当前访问对象的第一个字节为0xA0得到当前访问对象是全局数组对象,允许访问。
进一步的,若判断结果为否则继续执行步骤B3。
步骤B3:判断当前访问对象是否是入口点对象,是则允许访问,否则继续下一步;
具体地,判断当前访问对象的第一个字节的第5位(从最低位第0位向高位开始数)是否为1,本实施例中当前访问对象的第一个字节0xA0的第5位为1,允许访问。
步骤B4:判断当前执行环境是否为系统环境,是则允许访问,否则继续下一步;
具体的,判断当前执行环境的CC值是否等于系统环境的CC值,本实施例中,判断结果为否,继续下一步。
步骤B5:判断当前访问对象的CC值是否与当前执行环境的CC值相同,是则允许访问,否则抛出异常。
本实施例中,当前访问对象的CC值0x00与当前执行环境的CC值0x21不等,抛出异常。
当前被执行指令为0x93时,从Java卡虚拟机运行栈上获取的对象引用优选为0x90,当前被执行指令为athrow 指令,用于执行将虚拟机运行栈中栈顶的异常对象抛出的操作,Java卡虚拟机访问此异常对象前执行以下操作:
步骤C1:根据对象引用找到当前访问对象为:0x28 0x00 0x00 0x6B 0x04 0xFC 0x08;根据当前访问对象的第二个字节得到当前访问对象的环境值为0x00;
步骤C2:判断当前执行环境是否为系统环境,是则允许访问,否则继续下一步;
步骤C3:判断当前访问对象的CC值是否与当前执行环境的CC值相同,是则允许访问,否则抛出异常。
当前被执行指令为0x8E, 1, 0x0002, 2时,从Java卡虚拟机运行栈上获取的对象引用优选为0x68,根据指令的第一个字节得到该指令为invokeinterface指令,得到访问对象类型是方法调用,根据指令的第二个字节为1得到要调用的方法有1个参数,根据第三、四个字节得到被调用方法所在类型的引用,根据第五个字节得到被调用的方法的ID,该ID用于表示被调用方法在类型虚方法表中的索引;Java卡虚拟机访问当前访问对象前执行以下操作:
步骤E1:根据对象引用找到当前访问对象为:0x20 0x01 0x02 0x05 0x08;根据当前访问对象的第二个字节得到当前访问对象的CC值为0x01;
步骤E2:判断当前访问对象是否是共享接口方法调用,是则执行步骤E3,否则执行步骤E4;
本实施例中具体地,根据指令中提供的0x0002找到对象所调用接口所属的类型信息,根据类型信息的第1个字节判断当前访问对象是否是共享接口方法调用。优选的,若当前访问对象的类型信息的第1个字节的第2位为1,则当前访问对象是共享接口方法调用。
例如:根据invokeinterface指令中提供的0x0002可以找到类型的信息如下:0x81, 0x00, 0x00,根据所述类型地址的第1个字节0x81可知,它的(10000001)第2位为0,表示该类型不是共享接口方法调用。
步骤E3:判断当前访问对象所属的包是否是活动包,是则允许访问,否则抛出异常;
本实施例中具体地,Java卡虚拟机遍历所有通道,判断当前访问对象的CC值的高4位是否与某一通道中存储的CC值的高4位相等,是则当前访问对象所属的包为活动包允许访问,否则抛出异常。
例如:卡片上有2个通道,第1个通道中存储的CC值为0x00,第2个通道中存储的CC值为0x40,那么第1个通道中的CC值(0x00)的高4位与当前访问对象的CC值(0x01)的高4位相同,表示当前访问对象所属的包为活动包。
步骤E4:判断当前访问对象是否是不受防火墙限制的对象或满足基本检测条件,是则允许方法,否则抛出异常。
本实施例中具体地,判断当前访问对象是否为不受防火墙限制的对象或是否满足基本检测条件在前面已做了详细描述,在此不再赘述。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (15)
1.一种Java卡对象访问的控制方法,其特征是:所述方法包括
步骤S1:Java卡虚拟机解释执行当前应用的Java程序;
步骤S2:所述Java卡虚拟机获取所述Java程序中当前被执行指令提供的对象引用,根据所述对象引用从预设存储区获取当前访问对象,并读取所述当前访问对象的环境值;
步骤S3:所述Java卡虚拟机根据当前被执行指令得到当前访问对象的类型;如果当前访问对象类型是方法调用,则执行步骤A1;如果当前访问对象类型是读写对象,则执行步骤B1;否则执行步骤C1;
步骤A1:判断当前访问对象是否是共享接口方法调用,是则执行步骤A2,否则执行步骤B1;
步骤A2:判断当前访问对象所属的包是否是活动包,是则执行步骤S4,否则抛出异常;
步骤B1:判断当前访问对象是否是不受防火墙限制的对象或满足基本检测条件,是则执行步骤S4,否则抛出异常;
步骤C1:判断当前访问对象是否满足基本检测条件,是则执行步骤S4,否则抛出异常;
步骤S4:Java卡虚拟机执行当前被执行指令;
步骤B1和C1所述基本检测条件是指当前执行环境为系统环境或当前访问对象的环境值等于当前执行环境的环境值。
2.根据权利要求1所述的控制方法,其特征是:所述步骤S2具体为:所述Java卡虚拟机根据当前被执行指令中的参数,从虚拟机运行栈上获取对象引用,从预设存储区获取与所述对象引用对应的当前访问对象,读取当前访问对象的第二个字节为所述当前访问对象的环境值。
3.根据权利要求1所述的控制方法,其特征是:步骤A1所述判断当前访问对象是否是共享接口方法调用包括:
步骤2-1:判断当前被执行指令的第一个字节是否为第四预设值,是则继续下一步,否则当前访问对象不是共享接口方法调用;
步骤2-2:根据当前被执行指令获得当前访问对象所在类型的引用,根据所述引用得类型信息;
步骤2-3:根据所述类型信息的第1个字节判断当前访问对象是否是共享接口方法调用。
4.根据权利要求3所述的控制方法,其特征是:若所述类型信息的第1个字节的第2位为1,则当前访问对象是共享接口方法调用。
5.根据权利要求1所述的控制方法,其特征是:步骤A2所述判断当前访问对象所属的包是否是活动包具体为:Java卡虚拟机遍历所有通道,判断当前访问对象的环境值的高4位是否与某一通道中存储的环境值的高4位相等,是则当前访问对象所属的包是活动包,否则当前访问对象所属的包不是活动包。
6.根据权利要求1所述的控制方法,其特征是:步骤B1所述不受防火墙限制的对象包括入口点对象和全局数组对象。
7.根据权利要求1所述的控制方法,其特征是:所述步骤C1具体为:
步骤C1-1:判断当前执行环境是否为系统环境,是则执行步骤S4,否则执行步骤C1-2;
步骤C1-2:判断当前访问对象的环境值是否与当前执行环境的环境值相等,是则执行步骤S4,否则抛出异常。
8.根据权利要求7所述的控制方法,其特征是:所述步骤B1具体为:判断当前访问对象是否是不受防火墙限制的对象,是则执行步骤S4,否则执行步骤C1。
9.根据权利要求7所述的控制方法,其特征是:所述判断当前执行环境是否为系统环境具体为判断当前执行环境的环境值是否为第三预设值。
10.根据权利要求8所述的控制方法,其特征是:所述判断当前访问对象是否是不受防火墙限制的对象具体包括:
步骤B1-1:判断当前访问对象是否为入口点对象,是则执行步骤S4,否则执行步骤B1-2;
步骤B1-2:判断当前访问对象是否为全局数组对象,是则执行步骤S4,否则执行步骤C1。
11.根据权利要求9所述的控制方法,其特征是:所述判断当前访问对象是否为入口点对象具体为判断当前访问对象的第一个字节是否为第二预设值。
12.根据权利要求9所述的控制方法,其特征是:所述判断当前访问对象是否为全局数组对象具体为判断当前访问对象的第一个字节是否与全局数组属性值匹配。
13.根据权利要求12所述的控制方法,其特征是:全局数组属性值包括0x70、0x90、0xB0、0xD0和0xF0。
14.根据权利要求1所述的控制方法,其特征是:所述步骤S1之前还包括:
步骤1-1:Java卡虚拟机接收到APUD应用选择命令,解析所述APDU应用选择命令并从中获取应用标识符;
步骤1-2:所述Java卡虚拟机根据所述应用标识符遍历卡片上所有的包,查找到所述应用标识符对应的包索引;根据所述应用标识符遍历卡片上所有已安装的应用列表,查找到所述应用标识符对应的应用索引;
步骤1-3:所述Java卡虚拟机根据所述包索引和所述应用索引计算得到当前执行环境的环境值。
15.根据权利要求14所述的控制方法,其特征是:所述步骤1-3具体为Java卡虚拟机将所述包索引作为高4位,将所述应用索引作为低4位,两者拼接组成的一个字节即为得到的当前执行环境的环境值。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210574908.4A CN103093142B (zh) | 2012-12-26 | 2012-12-26 | 一种Java卡对象访问的控制方法 |
PCT/CN2013/084042 WO2014101495A1 (zh) | 2012-12-26 | 2013-09-24 | Java卡对象访问的控制方法 |
US14/345,425 US9465934B2 (en) | 2012-12-26 | 2013-09-24 | Control method for accessing java card object |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210574908.4A CN103093142B (zh) | 2012-12-26 | 2012-12-26 | 一种Java卡对象访问的控制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103093142A CN103093142A (zh) | 2013-05-08 |
CN103093142B true CN103093142B (zh) | 2015-07-22 |
Family
ID=48205699
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210574908.4A Active CN103093142B (zh) | 2012-12-26 | 2012-12-26 | 一种Java卡对象访问的控制方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9465934B2 (zh) |
CN (1) | CN103093142B (zh) |
WO (1) | WO2014101495A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103093142B (zh) | 2012-12-26 | 2015-07-22 | 飞天诚信科技股份有限公司 | 一种Java卡对象访问的控制方法 |
CN105635198B (zh) * | 2014-10-27 | 2019-09-13 | 中国移动通信集团公司 | 一种一致性管理方法及装置 |
CN105045597B (zh) * | 2015-08-07 | 2018-03-06 | 中国联合网络通信集团有限公司 | 一种java卡对象调用方法及装置 |
CN105282156A (zh) * | 2015-10-22 | 2016-01-27 | 成都芯安尤里卡信息科技有限公司 | 一种Java卡防火墙漏洞的检测方法和装置 |
CN105426239A (zh) * | 2015-11-03 | 2016-03-23 | 大唐微电子技术有限公司 | 一种在Java卡中实现本地方法调用的方法及装置 |
CN106096408A (zh) * | 2016-06-03 | 2016-11-09 | 成都信息工程大学 | 一种Java卡越界访问静态变量漏洞的检测方法和装置 |
CN106789074B (zh) * | 2016-12-27 | 2020-08-25 | 广州智慧城市发展研究院 | 一种Java卡的应用身份验证方法及验证系统 |
CN107968784B (zh) * | 2017-12-01 | 2019-08-30 | 恒宝股份有限公司 | 一种提高JavaCard共享接口访问安全的认证方法及认证系统 |
CN113867826A (zh) * | 2020-06-11 | 2021-12-31 | 深圳市文鼎创数据科技有限公司 | 扩展包访问控制方法、装置、Java智能卡及存储介质 |
CN113326041B (zh) * | 2021-08-02 | 2021-11-02 | 飞天诚信科技股份有限公司 | 一种虚方法的调用方法、电子设备及计算机可读存储介质 |
CN117056906B (zh) * | 2023-07-27 | 2024-03-29 | 北京握奇数据股份有限公司 | 一种指令访问控制方法、系统、存储介质及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6389484B1 (en) * | 1996-06-26 | 2002-05-14 | Sun Microsystems, Inc. | Transport independent invocation and servant interfaces that permit both typecode interpreted and compiled marshaling |
CN101777061A (zh) * | 2009-12-31 | 2010-07-14 | 北京握奇数据系统有限公司 | 一种java卡对象管理方法及java卡 |
CN102004884A (zh) * | 2009-08-28 | 2011-04-06 | 华为技术有限公司 | 一种获取可执行文件输入表的方法及装置 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6907608B1 (en) * | 1999-01-22 | 2005-06-14 | Sun Microsystems, Inc. | Techniques for permitting access across a context barrier in a small footprint device using global data structures |
EP1477877A1 (en) * | 2003-05-12 | 2004-11-17 | Infineon Technologies AG | Method of implementing a java card firewall into a smart card controller |
US7543331B2 (en) * | 2003-12-22 | 2009-06-02 | Sun Microsystems, Inc. | Framework for providing a configurable firewall for computing systems |
US7232073B1 (en) * | 2004-12-21 | 2007-06-19 | Sun Microsystems, Inc. | Smart card with multiple applications |
CN100498741C (zh) * | 2007-01-08 | 2009-06-10 | 中国信息安全产品测评认证中心 | 一种智能卡与u盘复合设备及其通过认证程序控制闪存读写的方法 |
US7685586B1 (en) * | 2009-03-19 | 2010-03-23 | International Business Machines Corporation | Global escape analysis using instantiated type analysis |
WO2010141182A2 (en) * | 2009-06-02 | 2010-12-09 | Saffron Technology, Inc. | Methods, systems and computer program products for providing a distributed associative memory base |
US8782644B2 (en) * | 2011-02-15 | 2014-07-15 | Oracle International Corporation | Preventing unsafe sharing through confinement of mutable captured variables |
KR102024600B1 (ko) * | 2012-06-25 | 2019-09-24 | 엘지전자 주식회사 | 양방향 서비스를 처리하는 장치 및 방법 |
CN103093142B (zh) * | 2012-12-26 | 2015-07-22 | 飞天诚信科技股份有限公司 | 一种Java卡对象访问的控制方法 |
-
2012
- 2012-12-26 CN CN201210574908.4A patent/CN103093142B/zh active Active
-
2013
- 2013-09-24 US US14/345,425 patent/US9465934B2/en active Active
- 2013-09-24 WO PCT/CN2013/084042 patent/WO2014101495A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6389484B1 (en) * | 1996-06-26 | 2002-05-14 | Sun Microsystems, Inc. | Transport independent invocation and servant interfaces that permit both typecode interpreted and compiled marshaling |
CN102004884A (zh) * | 2009-08-28 | 2011-04-06 | 华为技术有限公司 | 一种获取可执行文件输入表的方法及装置 |
CN101777061A (zh) * | 2009-12-31 | 2010-07-14 | 北京握奇数据系统有限公司 | 一种java卡对象管理方法及java卡 |
Non-Patent Citations (1)
Title |
---|
一种Java IC卡专用CPU结构研究;王涛 等;《电子学报》;20001130;第28卷(第11期);第77页-80页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103093142A (zh) | 2013-05-08 |
US20150286818A1 (en) | 2015-10-08 |
WO2014101495A1 (zh) | 2014-07-03 |
US9465934B2 (en) | 2016-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103093142B (zh) | 一种Java卡对象访问的控制方法 | |
CN107480029B (zh) | 一种函数调用时间的监控方法及装置 | |
JP3632598B2 (ja) | 変更定数プールを備えたJavaランタイム・システム | |
EP1830263A2 (en) | Executing applications in a multi-threaded environment | |
CN101957770A (zh) | 一种移动设备上应用程序的启动方法及装置 | |
CN106598579A (zh) | 区块链上集成动态类型编程语言方法和装置 | |
US11593277B2 (en) | Method of secure memory addressing | |
KR101691063B1 (ko) | 콜백을 이용하는 isa 브리징 | |
CN105550029B (zh) | 一种进程调度方法及装置 | |
CN103677778B (zh) | 一种CAP文件Classref常量的解析方法 | |
CN107317832A (zh) | 报文转发方法及装置 | |
CN102103489A (zh) | 一种提高静态域访问指令执行效率的方法 | |
CN108021370A (zh) | 字节码的优化方法、装置、存储介质、处理器及终端 | |
US20070234012A1 (en) | Methods and apparatus for dynamic register scratching | |
CN104657281B (zh) | 一种Java卡包数据管理方法 | |
KR101957552B1 (ko) | 액티비티 스택에 기반한 테스트 시나리오 생성 방법 | |
CN1172237C (zh) | 在非持久存储器内建立对象并保持可访问性的方法和装置 | |
CN111026508B (zh) | 一种java智能卡及其虚拟机组件优化方法 | |
CN103294542B (zh) | 进程保护的方法及其装置 | |
CN109932997B (zh) | 一种可编程逻辑控制器内核系统 | |
CN112395083B (zh) | 一种资源文件的释放方法、装置和计算机可读存储介质 | |
CN103577177B (zh) | 一种图形库调用方法和设备 | |
CN110162965A (zh) | 一种运行时访问控制方法及计算装置 | |
CN106100790A (zh) | 一种数据传输方法及系统 | |
CN1324471C (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 |