CN100451969C - 一种复合条件分支结构的识别方法 - Google Patents
一种复合条件分支结构的识别方法 Download PDFInfo
- Publication number
- CN100451969C CN100451969C CNB2006101696773A CN200610169677A CN100451969C CN 100451969 C CN100451969 C CN 100451969C CN B2006101696773 A CNB2006101696773 A CN B2006101696773A CN 200610169677 A CN200610169677 A CN 200610169677A CN 100451969 C CN100451969 C CN 100451969C
- Authority
- CN
- China
- Prior art keywords
- node
- branched structure
- cascade
- cascade branched
- nodes
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及一种识别复合条件分支结构的方法,其步骤包括对可执行文件进行反汇编,得到该可执行文件的中间代码;从上述中间代码中提取控制流信息,得到控制流图;遍历控制流图,得到级联分支结构:将级联分支结构对应的控制流图识别为复合条件分支结构、在可执行文件的控制流信息基础上,本发明可以精确、自动化识别复合条件分支结构,准确结构化程序控制流图,比现有的识别方法要更加准确,漏报和误报的情形有明显改善,实现效率高。可用于反编译、软件测试等设备中。
Description
技术领域
本发明属于逆向工程和程序分析领域,具体涉及一种识别复合条件分支结构的方法,可用于反编译、软件测试等设备中,能够有效地将程序控制流图结构化。
背景技术
反编译是从可执行文件(表现为计算机可执行的二进制编码)获得与源程序等效的高级代码的技术,是逆向工程领域的核心技术之一,在不同的应用领域发挥着重要的作用。
最初,反编译技术主要应用于辅助程序移植,如将程序从第二代计算机向第三代计算机迁移;到了70年代和80年代,反编译技术开始被用于再工程(Re-engineering),包括对遗失源码或第三方的二进制程序进行理解、文档化、重构和修改;从90年代中后期开始,信息安全领域对反编译技术有了巨大的应用需求,比如挖掘软件安全漏洞、分析恶意软件等工作,都对反编译技术有着很高的依赖。
控制流分析是反编译中的重要研究领域,复合条件分支识别、嵌套循环识别和多路分支(switch)识别是其中最重要的三个控制结构识别问题,也是反编译自动化的核心技术之一。如果不能准确识别这三种控制结构,会严重制约反编译技术的发展,限制反编译技术在其它领域的应用。
复合条件分支的识别是结构化程序设计语言中条件分支语句的编译问题的逆命题。当高级语言程序被编译成了二进制程序以后,其中的分支语句常常因为内部的复合条件而分裂成了多个条件跳转指令,其单入口的结构化特性遭到了破坏。如图1所示,含有复合条件分支结构的代码对应图2中的控制流图结构。虽然原程序遵从单入口多出口的结构化程序设计原则,但该程序被编译后产生的二进制程序的控制流图中含有若干多入口、多出口结构,不再符合结构化原则。
复合条件分支识别,就是如何将二进制程序中分立的条件跳转指令识别成一个完整的复合条件分支语句,从而在反编译生成的高级语言程序结构中仍然保持较好的结构化特性。如果该问题不能较好的获得解决,即不能准确的将属于同一个复合条件分支语句的条件跳转指令集合识别出来,则需要补充额外的goto语句来衔接控制流,将会直接影响到反编译最终生成的源程序的结构化特性,进而降低其可读性,同时增大后期分析的难度。
复合条件分支识别问题被提出的时间很晚,研究进展缓慢。虽然从可执行文件获得程序控制流信息的技术已经很成熟,但是仍然没有方法可以在程序控制流信息基础上准确有效识别复合条件分支结构。
C.Cifuentes提出的启发式方法是目前才用较多的方法(参见C.Cifucntes,“Reversecompilation techniques”,PhD Thesis,Queenslanc University of Technology,1994),但该方法存在大量漏报,许多复合条件分支彼此相关时,大量复合条件分支结构不能被识别。
E.Moretti等人提出的方法(参见E.Moretti,G.Chanteperdrix,and A.Osorio,“NewAlgorithms for Control-Flow Graph Structuring”Proceeding of the Fifth EuropeanConference on Software Maintenance and Reengineering,2001)需要使用复杂的Interval/DSG结构,不仅操作复杂,效率低,而且在某些情形下会将不是复合条件分支结构的语句错误地识别为复合条件分支结构。
K.Kaspersky提出的方法(参见K.Kaspersky,Hacker Disassembling Uncovered,黑客反汇编揭秘,A-List LLC,P384,2004)虽然有效,但是需要人为手工判断,无法自动化识别复合条件分支结构。
发明内容
本发明的目的在于提供一种基于级联分支网络的复合条件分支识别的方法,能够精确、自动化识别复合条件分支结构。
本发明的复合条件分支结构的识别方法,其步骤包括;
1.对可执行文件进行反汇编,得到该可执行文件的中间代码;
2.从上述中间代码中提取控制流信息,得到控制流图;
3.遍历控制流图,识别满足下述条件的级联分支结构;
1)具有唯一的入口节点,其该节点为该级联分支结构中所有其他节点的必经节点;
2)具有两出口节点,该级联分支结构中的其他节点均存在到两出口节点的路径;
3)除出口节点外的其他节点均是分支节点;
4)该级联分支结构中没有循环路径;
4.将包含级联分支结构对应的控制流图识别为复合条件分支结构。
本发明可以采取下述扩展步骤遍历控制流图,得到级联分支结构:
按序遍历控制流图的所有节点,将首次访问的且不属于任何已知级联分支结构的分支节点作为级联分支结构的第一个节点;接着访问该节点的直接后继节点,如该后继节点为分支节点,且不会与级联分支结构中的其他节点构成循环,同时该后继节点的所有直接前驱节点均在级联分支结构内,则将该后继节点作为级联分支结构的节点,直到没有新的节点可以作为该级联分支结构的节点。
对于上述确定的级联分支结构,还可通过收缩步骤删除其中的冗余节点,以得到精确的级联分支结构,其步骤如下:
检查上述级联分支结构中的节点是否具有位于级联分支结构之外的直接后继分支节点,当这些节点的总数不等于2时,删除距离级联分支结构第一个节点最远的节点,直到上述总数为2,将删除上述节点后的级联分支结构作为精确的级联分支结构。
下面阐述本发明方法的原理,给出级联分支网络及相关概念的适当说明。由于程序控制流图、基本块等概念为本领域基本概念,不作具体说明,可参考《编译程序设计原理》一书(杜淑敏等,北京大学出版社,2003)。
扩展基本块:在程序控制流图中,如果一个基本块b(对应为控制流图中的一个节点)有且仅有一个直接后继基本块c,且基本块c有且仅有一个直接前驱基本块b,称b,c是“可扩展的基本块”;合并可扩展的基本块b、c后,形成扩展基本块b′,并在程序控制流图中,用b′代替b、c。重复所述过程,直至程序控制流图中没有可扩展的基本块。
分支基本块:分支基本块b(对应为控制流图中的分支节点)是一个有两个直接后继节点的扩展基本块。
偏序关系“<<”:在控制流图G中,对于两个节点bi、bj,如果存在一条从bi到bj的路径,称bi<<bj。
级联分支网络:级联分支网络T=(N’,E’,h’,t,f)是控制流图(N,E,h)的子图,进一步满足:
1)除t,f外,N’中节点都是分支基本块;E’是N’中节点之间边的集合;
2)h’是T唯一的入口节点,是T中所有其他节点的必经节点(dominator);
3)t、f是T有且仅有的两个出口节点;t、f外,T中任意节点n,都有n<<t且n<<f:
T中没有循环路径;由于级联分支网络内部没有循环路径,所以各节点之间存在一致的偏序关系“<<”。;
本发明所述的级联分支网络概念,是级联分支结构的拓扑表示:任意复合条件结构对应的控制流图一定是级联分支网络,而任意级联分支网络,一定对应某种复合条件分支结构。因此,得到精确的级联分支结构,就可以识别复合条件分支结构。
由于现在反汇编技术已经十分成熟,利用各种反汇编工具,如IDA Pro、Objdump,可以自动化获得可执行文件的中间代码表示以及提取程序的控制流信息。在可执行文件的控制流信息基础上,本发明可以精确识别复合条件分支结构,准确结构化程序控制流图。
与现有技术不同之处在于,本发明首次提出与复合条件分支结构等价的级联分支网络的概念,并在级联分支网络的结构特征基础上定义一种偏序关系,从而通过判定级联分支网络结构实现复合条件分支结构的精确识别。
本发明有如下优势:
1.本发明所述方法比传统的C.Cifucntes提出的方法更加准确,能够识别复合条件分支相互耦合的情况;
2.本发明所述方法比E.Moretti提出的方法更加准确,不会将两个相邻的复合条件分支识别成一个复合条件分支,也不需要使用Interval/DSG等复杂数据结构进行辅助识别,效率更高。
3.本发明所述方法是完全自动化识别复合条件分支结构,比K.Kaspersky提出的手工检测方法更具实用性和推广价值。
本发明的方法比现有的识别方法要更加准确,漏报和误报的情形有明显改善;同时本方法是决定性方法,不需要进行启发式搜索或者使用Interval/DSG等复杂数据结构,实现效率与现有识别方法相比更高:而且本发明是完全自动化识别复合条件分支结构的方法。
附图说明
图1是高级语言中含复合条件分支结构的代码示例
图2是图1中代码对应的控制流图
图3是图2中包含的分支网络结构
图4是本发明实例的分支网络结构扩展过程示意图
图5是图4中分支网络上界规模收缩过程示意图
图6是具体实施实例中分支网络扩展步骤流程图
图7是具体实施实例中分支网络收缩步骤流程图
图8为本发明方法在反编译过程中所处环节示意图
具体实施方式
本发明方法在反编译过程中所处的位置如图8所示,在将可执行文件进行反编译后,得到中间代码信息,提取控制流信息,得到程序控制流图。由前所述,现在反汇编技术已经十分成熟,利用各种反汇编工具,如IDA Pro、Objdump,可以自动化获得可执行文件的中间代码表示以及提取程序的控制流信息。
对反汇编得到的控制流图进行遍历,得到级联分支结构,具体可以采用下述步骤:
1.级联网络扩展步骤:在程序控制流图中,界定级联分支网络结构的规模上界,确定所有可能属于该级联分支网络的节点。
2.级联网络收缩步骤:在上述过程基础上,根据上述的偏序关系,在级联分支网络结构的上界规模中,删除冗余节点,精确识别分支网络结构。
所述扩展步骤,具体包括下列操作:
1)给定由反汇编得到的未识别复合条件分支结构的程序控制流图G=(N,E,h),以及程序基本块空集合N1;
2)按序遍历控制流图G,将首次访问到的且不属于任何级联分支网络的分支基本块h’添加到集合N1中;
3)集合P={bj|任意bi∈N1,bj是bi的直接后继,bj是分支节点,且 }中的任意基本块bi,如果bj所有的直接前驱节点都属于N1,且N1中节点与bj不会构成环路径,则将bi添加到N1中;重复步骤3),直至N1不再变化。
经过上述扩展步骤,可以得到包含级联分支结构的信息,完全可以用于复合条件分支结构的识别。
但通过扩展步骤得到的级联分支结构可能包含一些冗余节点,为保证得到精确的不存在冗余节点的级联分支结构,以便更加精确地识别复合条件分支结构,本发明还可进行收缩步骤,删除冗余节点。
所述收缩步骤,具体包括下列操作:
1)给定由反汇编得到的未识别级联分支结构的程序控制流图G=(N,E,h),以及扩展步骤得到的程序基本块集合N1,起始分支基本块h’;其中N1为扩展步骤中确定的级联分支网络上界集合;
2)计算集合O={bj|任意bi∈N1,bi是bi的直接后继,且 }。
3)如果集合O中元素个数不等于2,删除N1中由偏序关系”<<”定义的“最大”节点。由于是偏序关系,所以可能有多个“最大”节点,此时则将这些“最大”节点全部删除(在本发明中,N1中“最大”的节点具体指N1中距离h’最远的节点)。跳转到步骤2);
4)如果集合O中元素个数等于2,令O中两个元素分别为t和f,则T=(N1’,E1’,h’,t,f)形成级联分支网络。
下面结合附图和实施实例对本发明的具体实施方案作进一步的描述。
在具体实施实例中,本发明通过判定图3所示的级联分支网络结构,进而识别图1代码所示的复合条件分支结构。
图1中代码示例的完整控制流图见图2。
为精确判定级联分支网络结构,首先进行分支网络扩展步骤,以界定级联分支网络结构规模的上界,确定所有可能属于该级联分支网络的节点。然后进行分支网络收缩步骤:在级联分支网络结构上界基础上,删除冗余节点,精确识别级联分支网络结构。
图4为实施实例中级联分支网络结构的扩展步骤示意图。参见图6,详细解释分支网络扩展步骤具体工作流程:
给定未识别复合条件分支结构的程序控制流图G=(N,E,h),以及程序基本块空集合N1;
1.将首次访问且不属于任何已确定的级联分支网络结构的分支节点h’添加至集合N1;如图4(1)所示,分支节点“a<=b”添加至集合N1中;
2.继续执行下列操作:
1)确定N1节点的直接后继节点中,既是分支节点又不属于N1的节点构成的集合P;在实施实例中,N1中节点“a<b”的直接后继节点“a==0”和“a!=c”都是分支节点,且不属于N1,集合P={“a==0”,“a!=c”};
2)对于集合P中任意节点bj,如果bj的直接前驱都在N1中,且bj不会与N1中节点构成循环路径,则将bj添加至N1中;实施实例中,“a==0”和“a!=c”的直接前驱都在N1中,且与N1中节点不构成循环路径。“a==0”和“a!=c”添加至N1中;
3)N1发生变化,继续执行扩展步骤;重新确定N1节点的直接后继节点中,既是分支节点又不属于N1的节点构成的集合:P={“c==0”,“c!=d”};进一步判断,“c==0”、“c!=d”的直接前驱都在N1中,且“c==0”、“c!=d”与N1中节点不构成循环路径。“c==0”,“c!=d”添加至N1中;
4)此时N1每一个节点的直接后继节点中,既是分支节点又不属于N1的节点构成的集合:P={},N1不再发生变化,级联分支网络上界规模确定。图4(3)为实施实例的级联分支网络扩展的结果,实线所绘节点为级联分支网络的上界规模。
图5为实例中级联分支网络结构收缩步骤示意图。参加图7,详细解释分支网络收缩步骤具体操作:
1.初始集合N1是扩展步骤确定的级联分支网络上界集合;本实例中,N1中节点为图5(3)中实线所绘节点,h’为节点”a<=b”;
2.确定N1所有节点的直接后继节点中,不属于N1的节点构成的集合O。如图5(3)虚线所绘节点,O={“printf(“OK”)”,“printf(“###”)”,“fin”};
3.集合O中元素个数不等于2时,根据前文定义的偏序关系”<<”,将N1中“最大”的节点删除。在实施实例中,O中节点个数为3,其中节点“c!=d”为“最大”节点,将其删除;
4.参见图5(4),删除节点“c!=d”后,N1所有节点的直接后继节点中,不属于N1的节点构成的集合O={“printf(“OK”)”,“c!=d”}。此时O中元素个数为2;
5.O中元素个数为2时,精确判定级联分支网络:(N1,h’,t,f),其中N1={“a<b”,“a==0”,“a!=c”,“c==0”},h’=”a<b”,,t=“printf(“OK”)”,f=“c!=d”。
6.进一步,N1可以精确识别图1中所示的复合条件分支。将N1中分支结点合并后,即为(a>b)&&(a!=0))||((a==c)&&(c!=0))复合条件分支。
在级联分支网络扩展步骤和级联分支网络收缩步骤处理后,本发明可以有效判定级联分支网络,精确识别复合条件结构,有效结构化程序控制流图。本发明已在申请人研制的反编译工具上应用,取得了很好效果,实现了本发明的目的。
Claims (6)
1.一种复合条件分支结构的识别方法,其步骤包括:
1)对可执行文件进行反汇编,得到该可执行文件的中间代码;
2)从上述中间代码中提取控制流信息,得到控制流图;
3)遍历控制流图,识别满足下述条件的级联分支结构;
3-1)具有唯一的入口节点,其中该节点为该级联分支结构中所有其他节点的必经节点;
3-2)具有两出口节点,该级联分支结构中的其他节点均存在到两出口节点的路径;
3-3)除出口节点外,其他节点均为分支节点;
3-4)该级联分支结构中没有循环路径;
4)将包含级联分支结构的控制流图结构识别为复合条件分支结构。
2.如权利要求1所述的复合条件分支结构的识别方法,其特征在于步骤3)采取下述扩展步骤遍历控制流图,得到级联分支结构:
按序遍历控制流图的所有节点,将首次访问的且不属于任何已知级联分支结构的分支节点作为级联分支结构的第一个节点;接着访问该节点的直接后继节点,如该后继节点为分支节点,且不会与级联分支结构中的其他节点构成循环,同时该后继节点的所有直接前驱节点均在级联分支结构内,则将该后继节点作为级联分支结构的节点,直到没有新的节点可以作为该级联分支结构的节点。
3.如权利要求2所述的复合条件分支结构的识别方法,其特征在于通过收缩步骤删除所述级联分支结构的冗余节点:
检查上述级联分支结构中的节点,确定是否具有位于级联分支结构之外的直接后继分支节点,当这些节点的总数不等于2时,删除距离级联分支结构第一个节点最远的节点,直到上述总数为2,将删除上述节点后的级联分支结构作为精确的级联分支结构。
4.如权利要求1-3任一所述的复合条件分支结构的识别方法,其特征在于所述节点为扩展后的节点。
5.如权利要求1所述的复合条件分支结构的识别方法,其特征在于采用反汇编工具IDA Pro对可执行文件进行反汇编。
6.如权利要求1所述的复合条件分支结构的识别方法,其特征在于采用反汇编工具Objdump对可执行文件进行反汇编。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101696773A CN100451969C (zh) | 2006-12-27 | 2006-12-27 | 一种复合条件分支结构的识别方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101696773A CN100451969C (zh) | 2006-12-27 | 2006-12-27 | 一种复合条件分支结构的识别方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101063944A CN101063944A (zh) | 2007-10-31 |
CN100451969C true CN100451969C (zh) | 2009-01-14 |
Family
ID=38964980
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101696773A Expired - Fee Related CN100451969C (zh) | 2006-12-27 | 2006-12-27 | 一种复合条件分支结构的识别方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100451969C (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216803B (zh) * | 2008-01-09 | 2010-06-16 | 四川大学 | 基于基路径的测试程序控制流路径集生成方法 |
CN104407858B (zh) * | 2014-11-18 | 2017-07-11 | 合肥康捷信息科技有限公司 | 一种基于cfg的异常信息建立方法 |
CN106445625A (zh) * | 2016-09-23 | 2017-02-22 | 网易(杭州)网络有限公司 | 一种待编译代码的预处理方法及装置 |
CN111865404B (zh) * | 2020-06-09 | 2021-05-14 | 烽火通信科技股份有限公司 | 保护环路径查找方法、装置、设备及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040154009A1 (en) * | 2002-04-29 | 2004-08-05 | Hewlett-Packard Development Company, L.P. | Structuring program code |
US20060031686A1 (en) * | 1999-09-03 | 2006-02-09 | Purdue Research Foundation | Method and system for tamperproofing software |
CN1818863A (zh) * | 2006-03-13 | 2006-08-16 | 浙江大学 | 嵌入式软件反编译中的静态库函数识别实现方法 |
CN1860435A (zh) * | 2003-07-09 | 2006-11-08 | 皇家飞利浦电子股份有限公司 | 用于分支预测的方法和系统 |
-
2006
- 2006-12-27 CN CNB2006101696773A patent/CN100451969C/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060031686A1 (en) * | 1999-09-03 | 2006-02-09 | Purdue Research Foundation | Method and system for tamperproofing software |
US20040154009A1 (en) * | 2002-04-29 | 2004-08-05 | Hewlett-Packard Development Company, L.P. | Structuring program code |
CN1860435A (zh) * | 2003-07-09 | 2006-11-08 | 皇家飞利浦电子股份有限公司 | 用于分支预测的方法和系统 |
CN1818863A (zh) * | 2006-03-13 | 2006-08-16 | 浙江大学 | 嵌入式软件反编译中的静态库函数识别实现方法 |
Non-Patent Citations (4)
Title |
---|
New Algorithms for Control-Flow Graph Structuring. Eric Moretti, Gilles Chanteperdrix, Angel Osorio.Software Maintenance and Reengineering,2001. Fifth European Conference. 2001 |
New Algorithms for Control-Flow Graph Structuring. Eric Moretti, Gilles Chanteperdrix, Angel Osorio.Software Maintenance and Reengineering,2001. Fifth European Conference. 2001 * |
Using Hammock Graphs to Structure Programs. Fubo Zhang and Erik H. D'Hollander.IEEE Transactions on Software Engineering,Vol.30 No.4. 2004 |
Using Hammock Graphs to Structure Programs. Fubo Zhang and Erik H. D'Hollander.IEEE Transactions on Software Engineering,Vol.30 No.4. 2004 * |
Also Published As
Publication number | Publication date |
---|---|
CN101063944A (zh) | 2007-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Zhou et al. | Devign: Effective vulnerability identification by learning comprehensive program semantics via graph neural networks | |
CN112733137B (zh) | 一种面向漏洞检测的二进制代码相似性分析方法 | |
Yakdan et al. | No More Gotos: Decompilation Using Pattern-Independent Control-Flow Structuring and Semantic-Preserving Transformations. | |
CN105868116B (zh) | 基于语义变异算子的测试用例生成和优化方法 | |
Kaiser et al. | A widening approach to multithreaded program verification | |
Jiang et al. | RULF: Rust library fuzzing via API dependency graph traversal | |
CN111460450A (zh) | 一种基于图卷积网络的源代码漏洞检测方法 | |
CN105138335A (zh) | 一种基于控制流图的函数调用路径提取方法及装置 | |
CN100559347C (zh) | 一种嵌套循环结构的识别方法 | |
CN101271398B (zh) | 多路分支结构的识别方法 | |
Xie et al. | Hirec: Api recommendation using hierarchical context | |
CN102073708A (zh) | 面向大规模不确定图数据库的子图查询方法 | |
Walkinshaw et al. | Inferring computational state machine models from program executions | |
CN100451969C (zh) | 一种复合条件分支结构的识别方法 | |
US20100199355A1 (en) | Method of protecting digital documents against unauthorized uses | |
CN103559125A (zh) | 一种利用图同构验证编译器的方法 | |
Zhang et al. | A hierarchical model of data locality | |
Campbell et al. | Linear-time graph algorithms in GP 2 | |
CN116627818A (zh) | 一种基于程序路径相似度的测试用例复用方法 | |
Chen et al. | Multi-view learning for parallelism discovery of sequential programs | |
CN105487983A (zh) | 基于智能路径引导的敏感点逼近方法 | |
Liu et al. | Learning graph-based code representations for source-level functional similarity detection | |
Petke et al. | Program transformation landscapes for automated program modification using Gin | |
CN117725592A (zh) | 一种基于有向图注意力网络的智能合约漏洞检测方法 | |
Saumya et al. | Xstressor: Automatic generation of large-scale worst-case test inputs by inferring path conditions |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090114 Termination date: 20141227 |
|
EXPY | Termination of patent right or utility model |