CN104657185B - 一种Java卡的Java代码补丁方法 - Google Patents
一种Java卡的Java代码补丁方法 Download PDFInfo
- Publication number
- CN104657185B CN104657185B CN201510108055.9A CN201510108055A CN104657185B CN 104657185 B CN104657185 B CN 104657185B CN 201510108055 A CN201510108055 A CN 201510108055A CN 104657185 B CN104657185 B CN 104657185B
- Authority
- CN
- China
- Prior art keywords
- patch
- java
- information table
- code
- card
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种Java卡的Java代码补丁方法,对Java卡内存储于ROM区域Java代码和EEPROM区域Java代码提供了两种不同处理方式,对于ROM区域的Java代码,只需事先分配补丁管理表,采用多级补丁信息表的方法,无需事先分配空间给补丁信息表,补丁信息表在打补丁的时候动态分配,这样可以大大减少事先分配的空间;对于EEPROM区域Java代码,无需开辟额外空间进行管理,直接在原方法地址进行修改,减少查表的操作,进一步提高方法执行的速度;本发明的Java代码补丁方法用户不用更换Java卡即可对Java卡中的Java方法打补丁,达到功能升级或者缺陷修复的目的,在打补丁后能确保Java卡的运行效率,满足客户对时间敏感应用的需要,能够避免更新应用程序造成的客户数据丢失,并且具有修复需要的时间短的优点。
Description
技术领域
本发明涉及Java智能卡领域,具体涉及一种Java卡的Java代码补丁方法。
背景技术
随着金融电子化的全面发展,为解决用户对一卡多用的需要,支持多应用的Java卡得到了越来越多的普及应用。Java卡作为一种智能卡,其存储体系主要由读写存储器(RAM)、只读存储器(ROM)和可擦写编程存储器(EEPROM)组成,其中RAM用于存放运算过程中的中间数据和结果数据,ROM用于存放智能卡的操作系统,EEPROM是智能卡的主要存储器,用于存放卡人的个人信息及发行单位的信息和应用数据。
然而,随着用户需求的变更、业务的多样化变化,Java卡产品在投放使用后,很可能出现缺陷或者对功能提出升级的要求,若固化到Java卡ROM或者EEPROM中的Java代码无法升级维护,则需要用户更换Java卡,影响用户的生活,若在进行打补丁升级时,使用的Java卡的空间较大,在处理一些对时间敏感的应用(如快捷支付)时,不能保证Java卡的运行效率。
现有的Java卡补丁方法中如发现原有程序存在缺陷,一般通过删除原程序,下载并安装新的应用程序的方法,该方法会造成客户数据的丢失,并且由于应用程序本身的内存较大,需要进行的修改较少,若整个应用程序重新下载,需要较长的时间。
发明内容
为解决上述问题,本发明的目的是提供一种Java卡的Java代码补丁方法。
本发明为实现上述目的,通过以下技术方案实现:
一种Java卡的Java代码补丁方法,包括如下步骤:
(1)在Java卡芯片中预先在EEPROM中分配一块区域作为Java代码的补丁管理表,在为不同的包打补丁时,动态从EEPROM中分配一块区域作为Java代码的补丁信息表,若每个包内补丁数目超过10,则需要多级补丁信息表;
Java代码补丁由补丁管理表、补丁信息表和补丁代码组成;
补丁管理表大小为固化到ROM区域的Java包的个数×3字节,其中3字节的数据分别为1字节的补丁个数和2字节的补丁信息表的偏移地址;
每级补丁信息表的大小为62字节,每级补丁信息表内包含10个补丁方法,补丁信息表的数据信息包括本级的10个补丁方法×6字节和2字节的下一级补丁信息表的偏移地址,其中6字节的数据分别为2字节方法的绝对地址、2字节修正后方法的异常信息偏移地址和2字节修正后方法的方法体偏移地址;
(2)产生要修改的Java方法的补丁代码,所述的补丁代码包括异常处理信息和方法体;
(3)将所有方法的Java补丁代码通过应用协议数据单元命令以数据流的方式从卡外下载到卡内,并存储至ROM区域或EEPROM区域,在卡内实现补丁代码存储的步骤为:
如待打补丁的包的ID小于固化到ROM中Java包的个数,为ROM区域的包;对于ROM区域的包采取第一补丁方法;如待打补丁的包的ID不小于固化到ROM中Java包的个数,为EEPROM区域的包;对于EEPROM区域的包采取第二补丁方法;
所述的第一补丁方法为在Java卡芯片中预先分配一定大小的EEPROM作为Java补丁代码空间,该空间包含补丁管理表和补丁信息表,所述的补丁管理表用于维护固化在ROM区域的每个包的补丁数及其对应的补丁信息表的偏移地址;所述的补丁信息表的空间不需要事先分配,而是在打补丁的时候从EEPROM中分配,所述的补丁信息表存储指定个数的方法的绝对地址、修正后方法的异常信息偏移地址、修正后方法的方法体偏移地址和下一级补丁信息表的偏移地址。
所述的第二补丁方法不采用额外的空间,在原有方法的入口地址处,使用第一个字节作为是否打补丁的标志位;如果第一个字节不等于0,表示该方法没有打过补丁;如果等于0,表示方法该打过补丁,则后面2个字节表示新方法的偏移地址。。
为进一步实现本发明的目的,还可以采用以下技术方案:
优选的一种Java卡的Java代码补丁方法,第一补丁方法包括以下步骤:
①将卡片定位到补丁管理表,访问补丁管理表的静态数组变量,增加补丁方法的个数,检查是否存在补丁信息表,如不存在则需要额外分配空间来存储补丁信息表;
②在补丁信息表中增加一条新的补丁方法信息,包括三部分内容:方法的绝对地址、修正后方法的异常信息偏移地址和修正后方法的方法体偏移地址;
③如果补丁信息表中补丁信息已满,需要从EEPROM申请新的空间,建立下一级补丁信息表,并在现有补丁信息表最后写入新表的偏移地址,然后转到第二步继续执行。
优选的一种Java卡的Java代码补丁方法,第二补丁方法包括以下步骤:
①卡片定位到原方法的方法体,将第一字节更新为0;
②从EEPROM分配空间来存储补丁代码,并将补丁代码的偏移地址写入到原方法的方法体的第2和第3字节中。
本发明的优点在于:
本发明对Java卡内存储于ROM区域Java代码和EEPROM区域Java代码提供了两种不同处理方式,对于ROM区域的Java代码,只需事先分配补丁管理表,采用多级补丁信息表的方法,无需事先分配空间给补丁信息表,补丁信息表在打补丁的时候动态分配,这样可以大大减少事先分配的空间;对于EEPROM区域Java代码,无需开辟额外空间进行管理,直接在原方法地址进行修改,减少查表的操作,进一步提高方法执行的速度。
本发明的Java卡的Java代码补丁方法,解决了Java智能卡代码出厂后固化到Java智能卡芯片的ROM或者EEPROM后维护更新难的问题,用户不用更换Java卡即可对Java卡中的Java方法打补丁,达到功能升级或者缺陷修复的目的;由于本发明Java卡的Java代码补丁方法打补丁占用的内存小,所以在打补丁后能确保Java卡的运行效率,满足客户对时间敏感应用的需要,提高了面向用户的Java智能卡应用程序升级的灵活性。本发明的Java卡的Java代码补丁方法,能够避免更新应用程序造成的客户数据丢失,并且修复需要的时间短。
附图说明
如图1为ROM区域的Java包补丁机制;图2为ROM区域代码补丁的更新示意图;
如图3为EEPROM区域的Java包补丁机制。
具体实施方式
一种Java卡的Java代码补丁方法,包括如下步骤:
(1)在Java卡芯片中预先在EEPROM中分配一块区域作为Java代码的补丁管理表,在为不同的包打补丁时,动态从EEPROM中分配一块区域作为Java代码的补丁信息表,若每个包内补丁数目超过10,则需要多级补丁信息表;
Java代码补丁由补丁管理表、补丁信息表和补丁代码组成;
补丁管理表大小为固化到ROM区域的Java包的个数×3字节,其中3字节的数据分别为1字节的补丁个数和2字节的补丁信息表的偏移地址;
每级补丁信息表的大小为62字节,每级补丁信息表内包含10个补丁方法,补丁信息表的数据信息包括本级的10个补丁方法×6字节和2字节的下一级补丁信息表的偏移地址,其中6字节的数据分别为2字节方法的绝对地址、2字节修正后方法的异常信息偏移地址和2字节修正后方法的方法体偏移地址;
(2)产生要修改的Java方法的补丁代码,所述的补丁代码包括异常处理信息和方法体;
(3)将所有方法的Java补丁代码通过应用协议数据单元命令以数据流的方式从卡外下载到卡内,并存储至ROM区域或EEPROM区域,在卡内实现补丁代码存储的步骤为:
如待打补丁的包的ID小于固化到ROM中Java包的个数,为ROM区域的包;对于ROM区域的包采取第一补丁方法;如待打补丁的包的ID不小于固化到ROM中Java包的个数,为EEPROM区域的包;对于EEPROM区域的包采取第二补丁方法;
所述的第一补丁方法为在Java卡芯片中预先分配一定大小的EEPROM作为Java补丁代码空间,该空间包含补丁管理表和补丁信息表,所述的补丁管理表用于维护固化在ROM区域的每个包的补丁数及其对应的补丁信息表的偏移地址;所述的补丁信息表的空间不需要事先分配,而是在打补丁的时候从EEPROM中分配,所述的补丁信息表存储指定个数的方法的绝对地址、修正后方法的异常信息偏移地址、修正后方法的方法体偏移地址和下一级补丁信息表的偏移地址。
所述的第二补丁方法不采用额外的空间,在原有方法的入口地址处,使用第一个字节作为是否打补丁的标志位;如果第一个字节不等于0,表示该方法没有打过补丁;如果等于0,表示方法该打过补丁,则后面2个字节表示新方法的偏移地址。。
为进一步实现本发明的目的,还可以采用以下技术方案:
优选的一种Java卡的Java代码补丁方法,第一补丁方法包括以下步骤:
①将卡片定位到补丁管理表,访问补丁管理表的静态数组变量,增加补丁方法的个数,检查是否存在补丁信息表,如不存在则需要额外分配空间来存储补丁信息表;
②在补丁信息表中增加一条新的补丁方法信息,包括三部分内容:方法的绝对地址、修正后方法的异常信息偏移地址和修正后方法的方法体偏移地址;
③如果补丁信息表中补丁信息已满,需要从EEPROM申请新的空间,建立下一级补丁信息表,并在现有补丁信息表最后写入新表的偏移地址,然后转到第二步继续执行。
优选的一种Java卡的Java代码补丁方法,第二补丁方法包括以下步骤:
①卡片定位到原方法的方法体,将第一字节更新为0;
②从EEPROM分配空间来存储补丁代码,并将补丁代码的偏移地址写入到原方法的方法体的第2和第3字节中。
实施例1
一种Java卡的Java代码补丁方法,包括以下步骤:
(1)在Java卡芯片中预先在EEPROM中分配一块区域作为Java代码的补丁管理表,在为不同的包打补丁时,动态从EEPROM中分配一块区域作为Java代码的补丁信息表,若每个包内补丁数目超过10,则需要多级补丁信息表;
Java代码补丁由补丁管理表、补丁信息表和补丁代码组成;
补丁管理表大小为固化到ROM区域的Java包的个数×3字节,其中3字节的数据分别为1字节的补丁个数和2字节的补丁信息表的偏移地址;补丁管理表的结构如表1所示。
表1 补丁管理表的结构
每级补丁信息表的大小为62字节,每级补丁信息表内包含10个补丁方法,补丁信息表的数据信息包括本级的10个补丁方法×6字节和2字节的下一级补丁信息表的偏移地址,其中6字节的数据分别为2字节方法的绝对地址、2字节修正后方法的异常信息偏移地址和2字节修正后方法的方法体偏移地址;补丁信息表的结构如表2所示。
表2 补丁信息表的结构
方法1绝对地址(2字节)|修正后方法的异常信息偏移地址(2字节)|修正后方法的方法体偏移地址(2字节) |
包ID=i的补丁信息表 |
方法1绝对地址(2字节)|修正后方法的异常信息偏移地址(2字节)|修正后方法的方法体偏移地址(2字节) |
下一级补丁信息表的偏移地址(2字节) |
(2)产生要修改的Java方法的补丁代码,所述的补丁代码包括异常处理信息和方法体;具体为在Java卡外对修改后的Java代码文件进行编译,产生相应的掩膜文件,并从该掩膜文件中提取要修改的Java方法的Java代码,进而产生该方法的补丁代码;
(3)将所有方法的Java补丁代码通过应用协议数据单元命令APDU以数据流的方式从卡外下载到卡内,并存储至ROM区域或EEPROM区域,该补丁代码除了方法体和异常信息外,还包括包ID和方法标识信息,在Java卡内实现补丁代码存储的步骤为:
如待打补丁的包的ID小于固化到ROM中Java包的个数,为ROM区域的包;对于ROM区域的包采取第一补丁方法;如待打补丁的包的ID不小于固化到ROM中Java包的个数,为EEPROM区域的包;对于EEPROM区域的包采取第二补丁方法;
所述的第一补丁方法为在Java卡芯片中预先分配一定大小的EEPROM作为Java补丁代码空间,该空间包含补丁管理表和补丁信息表,所述的补丁管理表用于维护固化在ROM区域的每个包的补丁数及其对应的补丁信息表的偏移地址;所述的补丁信息表的空间不需要事先分配,而是在打补丁的时候从EEPROM中分配,所述的补丁信息表存储指定个数的方法的绝对地址、修正后方法的异常信息偏移地址、修正后方法的方法体偏移地址和下一级补丁信息表的偏移地址。
所述的第二补丁方法不采用额外的空间,在原有方法的入口地址处,使用第一个字节作为是否打补丁的标志位;如果第一个字节不等于0,表示该方法没有打过补丁;如果等于0,表示方法该打过补丁,则后面2个字节表示新方法的偏移地址。
实施例2
对存储于ROM中Java包的补丁方法,包括以下步骤:
①将卡片定位到补丁管理表,访问补丁管理表的静态数组变量,增加补丁方法的个数,检查是否存在补丁信息表,如不存在则需要额外分配空间来存储补丁信息表;
②在补丁信息表中增加一条新的补丁方法信息,包括三部分内容:方法的绝对地址、修正后方法的异常信息偏移地址和修正后方法的方法体偏移地址;
③如果补丁信息表中补丁信息已满,需要从EEPROM申请新的空间,建立下一级补丁信息表,并在现有补丁信息表最后写入新表的偏移地址,然后转到第二步继续执行。
ROM区域代码补丁的更新的执行流程如下:
如果包ID小于固化到ROM区域的包的数量,则检查补丁管理表中该包的补丁个数。如果补丁个数大于0,则跳转到补丁信息表,依次遍历查询要执行的方法是否打过补丁:如果打过补丁,则根据补丁信息表的内容,跳转到补丁方法体进行运行;如果没有打过补丁,则返回原有方法的方法体中继续执行。
如图1所示ROM区域的Java包补丁机制;图2为ROM区域代码补丁的更新示意图。
实施例3
对存储于EEPROM中Java包的补丁方法,包括以下步骤:
①卡片定位到原方法的方法体,将第一字节更新为0;
②从EEPROM分配空间来存储补丁代码,并将补丁代码的偏移地址写入到原方法的方法体的第2和第3字节中。
如图3所示的EEPROM区域的Java包补丁机制。
Claims (3)
1.一种Java卡的Java代码补丁方法,其特征在于:包括如下步骤:
⑴在Java卡芯片中预先在EEPROM中分配一块区域作为Java代码的补丁管理表,在为不同的包打补丁时,动态从EEPROM中分配一块区域作为Java代码的补丁信息表,若每个包内补丁数目超过10,则需要多级补丁信息表;
Java代码补丁由补丁管理表、补丁信息表和补丁代码组成;
补丁管理表大小为固化到ROM区域的Java包的个数×3字节,其中3字节的数据分别为1字节的补丁个数和2字节的补丁信息表的偏移地址;
每级补丁信息表的大小为62字节,每级补丁信息表内包含10个补丁方法,补丁信息表的数据信息包括本级的10个补丁方法×6字节和2字节的下一级补丁信息表的偏移地址,其中6字节的数据分别为2字节方法的绝对地址、2字节修正后方法的异常信息偏移地址和2字节修正后方法的方法体偏移地址;
⑵产生要修改的Java方法的补丁代码,所述的补丁代码包括异常处理信息和方法体;所述方法体为修正后方法的方法体;
⑶将所有方法的Java补丁代码通过应用协议数据单元命令以数据流的方式从卡外下载到卡内,并存储至ROM区域或EEPROM区域,在卡内实现补丁代码存储的步骤为:
如待打补丁的包的ID小于固化到ROM中Java包的个数,为ROM区域的包;对于ROM区域的包采取第一补丁方法;如待打补丁的包的ID不小于固化到ROM中Java包的个数,为EEPROM区域的包;对于EEPROM区域的包采取第二补丁方法;
所述的第一补丁方法为在Java卡芯片中预先分配一定大小的EEPROM作为Java补丁代码空间,该空间包含补丁管理表和补丁信息表,所述的补丁管理表用于维护固化在ROM区域的每个包的补丁数及其对应的补丁信息表的偏移地址;所述的补丁信息表的空间不需要事先分配,而是在打补丁的时候从EEPROM中分配,所述的补丁信息表存储指定个数的方法的绝对地址、修正后方法的异常信息偏移地址、修正后方法的方法体偏移地址和下一级补丁信息表的偏移地址;
所述的第二补丁方法不采用额外的空间,在原有方法的入口地址处,使用第一个字节作为是否打补丁的标志位;如果第一个字节不等于0,表示该方法没有打过补丁;如果等于0,表示方法该打过补丁,则后面2个字节表示新方法的偏移地址;所述原有方法为是补丁信息表内的补丁方法。
2.根据权利要求1所述的一种Java卡的Java代码补丁方法,其特征在于:第一补丁方法包括以下步骤:
①将卡片定位到补丁管理表,访问补丁管理表的静态数组变量,增加补丁方法的个数,检查是否存在补丁信息表,如不存在则需要额外分配空间来存储补丁信息表;
②在补丁信息表中增加一条新的补丁方法信息,包括三部分内容:方法的绝对地址、修正后方法的异常信息偏移地址和修正后方法的方法体偏移地址;
③如果补丁信息表中补丁信息已满,需要从EEPROM申请新的空间,建立下一级补丁信息表,并在现有补丁信息表最后写入新表的偏移地址,然后转到第二步继续执行。
3.根据权利要求1所述的一种Java卡的Java代码补丁方法,其特征在于:第二补丁方法包括以下步骤:
①卡片定位到原方法的方法体,将第一字节更新为0;所述原方法为补丁信息表内的补丁方法;
②从EEPROM分配空间来存储补丁代码,并将补丁代码的偏移地址写入到原方法的方法体的第2和第3字节中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510108055.9A CN104657185B (zh) | 2015-03-12 | 2015-03-12 | 一种Java卡的Java代码补丁方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510108055.9A CN104657185B (zh) | 2015-03-12 | 2015-03-12 | 一种Java卡的Java代码补丁方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104657185A CN104657185A (zh) | 2015-05-27 |
CN104657185B true CN104657185B (zh) | 2017-08-11 |
Family
ID=53248364
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510108055.9A Active CN104657185B (zh) | 2015-03-12 | 2015-03-12 | 一种Java卡的Java代码补丁方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104657185B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111352764B (zh) * | 2020-03-27 | 2023-09-05 | 上海金卓科技有限公司 | 一种芯片修复的方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1661551A (zh) * | 2004-02-27 | 2005-08-31 | 微软公司 | 代码重写 |
CN102033771A (zh) * | 2010-12-24 | 2011-04-27 | 北京握奇数据系统有限公司 | 一种在Java Card中应用补丁程序的方法及装置 |
CN103677933A (zh) * | 2013-12-19 | 2014-03-26 | 大唐微电子技术有限公司 | 一种为智能卡打补丁的方法和系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7139559B2 (en) * | 2002-12-09 | 2006-11-21 | Qualcomm Inc. | System and method for handshaking between wireless devices and servers |
US7526771B2 (en) * | 2003-11-12 | 2009-04-28 | Ntt Docomo, Inc. | Method and apparatus for configuring an application while the application is running |
US8676753B2 (en) * | 2009-10-26 | 2014-03-18 | Amazon Technologies, Inc. | Monitoring of replicated data instances |
-
2015
- 2015-03-12 CN CN201510108055.9A patent/CN104657185B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1661551A (zh) * | 2004-02-27 | 2005-08-31 | 微软公司 | 代码重写 |
CN102033771A (zh) * | 2010-12-24 | 2011-04-27 | 北京握奇数据系统有限公司 | 一种在Java Card中应用补丁程序的方法及装置 |
CN103677933A (zh) * | 2013-12-19 | 2014-03-26 | 大唐微电子技术有限公司 | 一种为智能卡打补丁的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104657185A (zh) | 2015-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200366463A1 (en) | Apparatuses for Providing a Set of Cryptographically Protected, Filtered, and Sorted Transaction Data Records of a Link of a Blockchain | |
WO2019117311A1 (ja) | ブロックチェーン・ネットワークにおいて過去のトランザクションにアクセス可能とするための方法及びノード | |
CN107924326A (zh) | 对经更新的类型的迁移方法进行覆盖 | |
CN105677904B (zh) | 基于分布式文件系统的小文件存储方法及装置 | |
CN108229107A (zh) | 一种Android平台应用程序的脱壳方法及容器 | |
JP5225071B2 (ja) | 埋め込みシステム、特にスマートカードにロードされる疑似コードの検証方法 | |
CN102902576A (zh) | 一种渲染网页的方法、服务器和系统 | |
CN102609305A (zh) | 一种服务器集群中内存共享方法 | |
CN107085605A (zh) | 用于数据打包的方法、装置及电子设备 | |
CN104657185B (zh) | 一种Java卡的Java代码补丁方法 | |
CN107391181A (zh) | 一种系统分区的方法及装置 | |
CN108446110A (zh) | Lua脚本生成方法、装置、终端及计算机可读介质 | |
US20140086241A1 (en) | Self Adapting Driver for Controlling Datapath Hardware Elements | |
CN110119601B (zh) | 基于应用程序安装包的程序加固方法及装置 | |
CN109643239B (zh) | Java卡应用存储器占用空间优化 | |
CN103677933A (zh) | 一种为智能卡打补丁的方法和系统 | |
CN104657281B (zh) | 一种Java卡包数据管理方法 | |
CN107145377A (zh) | 软件编译方法及系统 | |
CN109739868B (zh) | 一种数据处理方法及其相关设备 | |
CN103366000A (zh) | 一种大体积xml报文的解析方法 | |
JP7284002B2 (ja) | 半導体装置、制御方法およびプログラム | |
CN105631505B (zh) | 一种支持java卡补丁函数的智能卡 | |
CN114637988A (zh) | 一种面向二进制的函数级软件随机化方法 | |
CN111861292B (zh) | 运单号生成方法、装置、服务器和存储介质 | |
CN107783778A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |