著录项信息
专利名称 | 提取部分代码至加密装置中的软件版权保护方法 |
申请号 | CN200510109229.X | 申请日期 | 2005-10-19 |
法律状态 | 暂无 | 申报国家 | 暂无 |
公开/公告日 | 2006-03-22 | 公开/公告号 | CN1749915 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F1/00 | IPC分类号 | G;0;6;F;1;/;0;0查看分类表>
|
申请人 | 北京飞天诚信科技有限公司 | 申请人地址 | 北京市海淀区学清路9号汇智大厦B座2层
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京坚石诚信科技有限公司 | 当前权利人 | 北京坚石诚信科技有限公司 |
发明人 | 陆舟;于华章 |
代理机构 | 北京集佳知识产权代理有限公司 | 代理人 | 赵慧 |
摘要
本发明涉及一种软件版权保护方法,特别是一种提取部分代码至加密装置中的软件版权保护方法。本发明通过将编译后的程序文件中的代码分解,其中分解出的部分代码块在加密装置中运行,其余部分代码在计算机中运行,使软件开发商在软件产品的开发过程中不必投入过多的精力编制软件保护功能模块,在提升加密的安全强度的同时并没有增加应用软件开发商的负担,只需将所要保护的软件产品的程序文件部分代码分解成块,再存入加密装置中,从而解决了传统外壳加密中后期所绑定的壳代码与应用代码结合不够紧密的问题,和外壳加密的破解方法在理论上具有一定通用性的问题,使得外壳加密的安全强度能基本上接近源代码编写方式实现的加密保护。
技术领域\n本发明涉及一种软件版权保护方法,特别是基于经编译后所生成 的含有指令代码的程序文件的,一种提取部分代码至加密装置中的软 件版权保护方法。\n技术背景\n程序文件:指经编译后所生成的含有二进制指令代码的文件。本 发明就是针对程序文件实施的软件版权保护的技术方案。\n数据文件:主要是指那些不含有指令代码的文件,如图片、文档、 数据库文件等。\n本文中提及的代码如无特别注释说明则仅指二进制指令代码。\n源代码文件:一般为文本格式,包括可被相应的编译器所识别用 于描述程序流程及计算规则的字符串和标识符号,经过编译器处理可 转换为程序文件。\n多年来软件被盗版一直是困扰众多开发商的重大难题,所以许多 开发商不得不在软件产品的开发过程中就投入精力去编制软件保护 功能模块,尤其是那些售价相对较高,面向特定行业的专业软件产品。\n但在一个产品的开发过程中投入精力去实现软件保护功能并非 总能收到奇效,最终所能达到的保护效果并非总是与投入的精力成正 比。毕竟与软件保护及加密相关的功能的开发需要以一定的实践经验 为基础,根据软件产品的具体特点,制定软件保护方案,并在软件开 发的初期就着手保护方案的量身设计。正是由于软件保护功能实现的 复杂性的存在,所以大多开发商还是会选择一套现成的软件保护类产 品,并在软件开发的后期结合到自己的产品中去。\n在众多的软件保护方面的产品中,多年来软件加密锁产品仍然是 为大家所熟悉且被普遍使用的软件保护产品。\n加密锁也称加密狗,是一种带有独立CPU、RAM及非易失存储 器的一种小型硬件装置,它可通过计算机的数据通讯接口与计算机连 接,能够存储、管理数据,并可预置加密算法功能,同时也可后期自 行定制部分算法功能。当一个软件产品结合了加密锁进行保护后,软 件就无法离开加密锁而正常运行,这个软件产品就与加密锁硬件无形 地绑定在了一起,软件就好象被这个装置锁住了似的,故称加密锁。\n目前基于加密锁进行软件保护主要有两种方式:\n一是结合加密锁厂商所提供的API接口,改造软件功能,在源代 码中嵌入对加密锁功能的访问,使自已的软件与锁中的数据或算法相 绑定。在程序运行期间尽可能地使程序的重要模块脱离加密锁后就无 法正常运行,这样即使存放在硬盘上的程序文件及数据文件被复制 了,只要加密锁没被复制,那么软件运行时必然仍需要加密锁的参与, 因而软件也就无法被盗版。\n缺点:需要专业程序员来实施方案的开发,开发周期长,保护强 度可控性低,强度受限于开发者的经验,开发经验越丰富的人所开发 出的加密功能模块的保护强度会相对更高些。\n二是利用加密锁厂商所提供的工具软件直接对开发环境所生成 的程序文件进行操作,从而使这个文件结合上了保护功能模块,即外 壳加密。\n缺点:同一外壳加密工具所保护的不同应用软件的破解过程存在 一定的相似性,被保护的内容会在计算机的内存中重现。应用代码与 后期外壳加密工具插入的代码联系松散,理论上通过时间的积累总能 完整地进行分离并最终被破解。(即,相似性、重现性、松散性)\n外壳加密主要是指对一个已经由编译器所生成的含有指令码的 程序文件的结构进行改造,使另一个或多个含有指令码的二进制文件 片段能顺利地与这个文件相结合,形成一个新的程序文件。在原理上 有些类似于计算机病毒技术,而如果这段后期插入的代码片段能起到 防盗版作用,那么就是业内所俗称的加密锁外壳加密。本发明就是针 对现有的加密锁外壳加密技术的一种改进。应用本发明所保护的不同 应用软件的破解过程将会有很大的区别,所被保护的内容将不会出现 在计算机的内存中。经过本发明所保护的应用软件被分解为计算机内 运行部分及加密装置内运行部分,应用软件的正常执行与对应的存有 应用程序一部分代码片段的加密装置紧密地相关联,所以相对于现有 的外壳加密技术会更难于被破解。解决了以上提到的现有技术中的不 足。\n在软件保护技术的实际应用中,许多开发商都会认为加密模块的 设计是非常麻烦的事情,因而有相当数目的软件保护方案都是在软件 即将发布时才开始着手设计。这样的保护方案在设计上一般都过于粗 糙,加密模块虽然最终可以与软件自身的功能代码编译到一起,但由 于加密模块与原有的软件应用功能模块在逻辑上结合得不够紧密,软 件也往往非常容易就被解密者分析清而被破解掉。而外壳加密技术的 引入在一定程度上突破了这方面限制,软件的应用功能的开发与加密 功能的实现完全可独立地进行,软件保护功能模块可由这一领域的专 业公司去完成,这样不但可完全省去方案的设计过程,而且还有一定 的安全强度,可以说是“事半功倍”。\n现存外壳加密技术的基本工作原理示意图可参看附图图1。\n如图1所示,某个软件项目中相关的源代码文件经过编译器和链 接器的编译、链接过程后便生成了二进制的程序文件“APP”。而图1 所示的代码块“BIN”代表软件保护及与验证相关的功能模块实现的 代码。经过加壳工具对原来程序文件结构的分析,通过修改文件的头 信息将两部分代码整合在一起,便形成了一个新的受保护的可执行文 件。而这个新的程序文件在运行条件满足的情况下与受保护前的程序 的外在行为表现是一样的,而在运行条件不满足时就无法正常运行。 这样就使得原来的程序文件看起来好象穿了一层外衣一样,而大家更 习惯于称其为外壳。在外壳加密技术中,外壳所起到的作用就是包裹 于一个程序文件之上,使软件的非法使用者无法见到其原本信息(如 代码或数据信息,软件正常使用时的功能表现等等)。有些工具在加 壳过程中,根据程序文件格式的细节特点,会利用加壳工具对图1中 的“APP”代码块的内容进行加密,从而使得原来的程序代码必须在 “BIN”代码存在前提下才能被还原正常执行。这种做法使得加密强 度得到进一步的提升,但从图1中我们也可以很容易看到,壳的功能 代码在逻辑上与所被保护的程序文件的代码之间有着非常明显的分 界线。虽然受保护的程序文件的代码从表面上看不到真实的内容,但 在程序运行期间,加载到内存中的内容与受保护前的代码在内存中的 内容几乎是完全相同的,这也正是现有的外壳加密技术的不安全所 在。\n从上面的分析中,我们了解到现有的外壳加密在技术上有着其先 天的不足,主要是因为软件保护功能模块是后期与应用软件的主体功 能代码相绑定的,且这种绑定只是简单地数据拼接,两部分代码没有 过多的内在联系,这使得在利用破解工具进行分析时,还是很容易分 辨出壳代码与原始的程序代码。壳的代码几乎与程序的原始代码功能 没什么联系,并且壳的代码内容往往是相对固定的。正是由于这段代 码与所被保护的软件功能代码的联系过于松散及相对固定的特性,使 得与外壳加密的软件保护相关的破解总是具有一定的通用性。即基于 同一款、同一版外壳加密工具保护的两个软件产品,只要其中一个产 品被破解,那么对另一个产品的破解过程也大体上是极为相似。\n另外,现有的外壳加密技术实际上更多的只是对程序文件在磁盘 上的内容的保护,而程序正常运行时,必然要在某一刻在计算机的内 存中还原其真实内容,而在发生还原操作的那一瞬间便使得被壳所保 护的程序代码完全曝光于内存之中,而将这些还原到内存中的代码进 行捕获,便有可能很完整地恢复被壳所保护的程序的原来面貌。所以 程序文件内容在内存中的重现性也是现有的外壳保护技术无法回避 的一个问题。\n上面论述了现有的外壳加密技术中不可回避的几问题:\n同一款壳所保护的不同程序的破解过程的相似性。\n被壳所保护的程序的代码在内存中的重现性。\n壳的功能代码与被保护的程序联系松散性。\n发明内容\n本发明克服了上述缺陷,提供了一种既能保证应用软件开发商简 化自己的软件保护方案的设计,而同时又能提升软件版权保护安全强 度的提取部分代码至加密装置中的软件版权保护方法。\n本发明解决其技术问题所采取的技术方案是:一种提取部分代码 至加密装置中的软件版权保护方法,将程序文件编译后的二进制代码 分解为两部分,其中分解出的代码块在加密装置中运行,其余部分的 二进制代码在计算机中运行,其步骤如下:\n1)程序编码分析引擎从程序文件编译后的二进制代码中分解出 多个代码块;\n2)代码加密引擎将分解出的代码块转换到加密装置中;\n3)文件处理引擎将访问所述代码块所需的与加密装置通讯的功 能绑缚到其余部分的二进制代码上。\n所述步骤1)中还可包括一个模拟执行过程,用于在将分解出的 代码块移至加密装置之前,在计算机中进行模拟仿真运行,如果模拟 过程失败,则重新执行步骤1),如模拟过程成功,则执行步骤2)。\n所述模拟执行过程可为对资源消耗的分析,在分析后判断所述资 源消耗不合理时,则重新执行步骤1),如资源消耗合理,则执行步 骤2)。\n所述步骤3)中的文件处理引擎,可将提取的代码块与其余部分 的二进制代码之间插入转向访问加密装置的附加代码调用序列,建立 提取的代码块与其余部分二进制代码之间的对应关系。\n所述步骤3)中文件处理引擎,还可包括将其余部分的二进制代 码之间的提取过代码块之后的空洞进行填充过程。\n所述代码块的提取可由以下几种方式选取:\n(a)随机方式选取,软件开发商可设定提取的代码块数量变化 的范围,及每个代码块大小的变化范围用于控制代码块选取操作的随 机性。\n(b)自动选取,提供调用频度分析结果,由软件开发商决定选 择调用频度合适的代码块。\n(c)软件开发商指定代码块开始及结束的位置。\n所述加密装置可为用于软件版权保护的具有安全存储功能的加 密装置,包括加密锁、加密卡。\n本发明通过将程序文件中的代码分解为两部分,将提取出的至少 一个代码块在计算机中运行,其余部分在加密装置中运行,使得软件 开发商在软件产品的开发过程中不必投入过多的精力去编制软件保 护程序,在提升加密的安全强度的同时并没有增加应用软件开发商的 负担,只需将所要保护的软件产品的程序文件的部分代码分解成块, 再存入加密装置中。存有程序文件部分代码的加密装置具有了所被保 护的程序文件的功能,加密装置与所被保护的程序文件完全联系在了 一起,从而解决了传统外壳加密当中后期所绑定的壳代码与应用的代 码结合得不够紧密的问题,使得外壳的破解难度得到了提升。同时解 决了外壳加密的破解方法在理论上具有一定通用性的问题,这就使得 外壳加密的安全强度能基本上接近源代码编写方式实现的加密保护。\n附图说明\n图1为现有加密技术的工作原理示意图\n图2为本发明中的工作原理示意图\n图3为本发明中的整体工作流程图\n图4为本发明中程序编码分析引擎的工作流程图\n图5为本发明中代码加密引擎的工作流程图\n图6为本发明中文件处理模块的工作流程图\n图7为本发明中指令模拟过程的工作流程图\n具体实施方式\n本发明是根据密码学原理将所要保护的应用程序文件的指令代 码信息进行分解,提取相对适合的比例的指令代码到加密装置中,破 坏所要保护的程序文件中代码信息在计算机中的可视完整性。既要保 证代码信息量不能过大,不超过加密装置的处理能力,同时又要保证 所分解并提取出来的数据信息不会被解密者利用提取后剩余的代码 信息所逆向推导出来。对于同一个程序文件进行加密时,所提取的每 个代码块越大,并且每次提取的代码块的数量越多则安全性会相对越 高。至于每个代码块的具体大小、变化范围及代码块的数量的随机值 可由开发商根据自己应用的资源需求情况自行设定,也可以设定默认 的数值范围,从而增强代码块选取的随机度的可控性。\n本发明的基本思想就是将原来在计算机上运行的程序文件的代 码分解成两部分,通过提取一部分代码段转移到加密装置中去运行, 其余部分代码仍然在计算机上运行。被分解后的两个部分相辅相成, 当两部分实体同时存在时,其外在的行为表现与加密前的一个完整应 用程序的功能保持一致,但如果缺少加密装置中的代码时应用程序则 完全无法象程序加密前一样正常工作。其实现原理如图2中所示,将 原来的程序文件“APP”205通过一个程序编码分析引擎从所要保护 的程序文件中分解出若干个大小合适的代码块201,提取分解出的代 码块通过代码加密引擎转换到加密装置202中形成图中的201。在被 移去部分代码的程序203的空洞位置204通过文件处理模块与代码块 201之间建立对应关系,保证在程序运行的过程中仍为完整的应用程 序。对于不同功能的应用程序,程序文件本身的代码内容必然会有所 不同。本发明是在程序文件中随机选取不定数量的代码块提取到加密 装置中,或由用户指定的频度提取代码块,每个要被提取的代码块的 起始与结束位置都有着不确定因素,因而移入加密装置中的内容可以 有着非常复杂的组合,这样就使得每次加密所移入加密装置中的数据 均会有所不同,从而完全回避了现有的外壳加密技术存在的破解过程 的相似性的问题。对于不同的应用程序,及同一个程序文件不同时间 进行加密时,所分解出的代码块内容都会有所变化,那么理论上对于 本发明所处理过的程序实施破解的过程都会有着一定的差异性。另外 本发明还可设定对使用频度较高或指定的重要的函数起始位置进行 代码提取保护,这样在保证不同的程序文件间的保护不但存在差异 性,而且保护更有针对性。因而结合本发明所保护的软件不会存在现 有外壳加密技术的破解过程的相似性。\n在本发明中,加密装置202可采用基于智能卡体系的加密锁技 术,智能卡具有很强的抗逻辑及物理攻击的特性,一直被广范地应用 于金融领域。而现今高端的加密锁产品早已结合了智能卡,这类产品 已进入实用的商业领域多年,基于智能卡体系的加密锁技术已在实践 中证实运行得非常良好,存储于加密锁中的数据或代码无论是采取什 么样的方式进行攻击都是非常因难的,这就为本发明基于智能卡实现 的产品在理论上及实践方面都奠定了非常安全的基石。具体采用什么 形式的加密装置作为存储代码的实体可根据对版权保护的安全强度 的需求来决定,方案的安全强度与具体硬件的安全强度有联系,但本 发明的基本思想适用于所有的可用于信息安全存储的与软件版权相 关的加密装置。\n其具体实现步骤如图3中所示,当开始步骤301后,将被保护的 程序文件由步骤302装载后,经过对原程序文件的检测和扫描,通过 步骤303显示程序文件的保护代码段长、数据段长在内的信息,用户 可通过步骤304对参数进行设定,如代码块选取的方式,提取代码块 数量的变化范围、代码块大小的变化范围,位置选取的方式,之后开 始执行对代码块的提取过程。由步骤305程序编码分析引擎对程序进 行分解,由步骤306代码加密引擎,针对不同的加密装置,将提取的 代码块转换成对应的加密格式,通过步骤307将上述代码块存入加密 装置中,通过步骤308填补提取点空隙并与加密装置中代码相对应。 最后通过步骤309判断对设定代码块的个数是否都已完成,如果都完 成则通过步骤310结束。\n如图4中所示为程序编码分析引擎的工作流程图,从图4中我们 可以看到代码的分解必须根据指令模拟的结果来进行,毕竟加密装置 中的硬件资源是远远无法与计算机的资源相比的,选择长度及资源消 耗适度的代码块进行分解是非常必要的,所以在真正将代码块转换到 加密装置中之前引入一个仿真过程将非常有利于提高整个工具的可 靠性及稳定性的。通过步骤401将提取的每个代码块在计算机中进行 步骤402模拟执行,在步骤403中判断模拟是否成功,如果成功则执 行步骤404分解代码后退出,如果未成功则直接退出,从而保证提取 的代码块的有效性。如图7中所示,为指令模拟的工作流程图,在步 骤701取指令之后,通过步骤702、703对指令的解码和执行,并由 步骤704分析资源消耗,从而选取最适合的代码块进行下一步的加密 转换操作。\n图5中所示代码加密引擎主要是完成代码块数据与加密锁的交 互过程。虽然利用程序编码分析引擎可以直接分解出所要保护的代码 块,但这些代码块不可能直接存放在加密锁中就可随意调用。他们原 有代码被提取处与锁内存放的代码块必然有一种调用执行的对应关 系,如图2中所示本实施例一共提取了5个代码块201,而在加密过 程完成之后,在加密装置中也对应存放了5个装置内的代码块201。 那么当程序执行到这5个被提取过代码块的任何一个位置的时候,都 必须能索引到所转移到装置中的对应代码块,即在位置1处执行时能 索引到块1,同理在位置5处执行时能索引到块5。代码加密引擎就 是负责建立这种对应关系,并生成相应的用于检索的加密装置内的代 码块的数据索引信息,经由步骤501读取出已由步骤404分解的代码 块数量,本实施例中N=5,再通过步骤502建立数据索引信息,使 程序在运行过程中能够顺利地调用已提取的代码块程序执行命令,再 经步骤503将代码块存入所述加密装置中,再通过步骤504判断每个 代码块的加密都已执行完毕后退出。\n如图6中所示为文件处理模块工作过程,这一过程主要负责通过 步骤601将被保护的功能代码绑缚到所要保护的程序文件上。本发明 的文件处理模块为了配合实现代码加密引擎的将程序代码转移到加 密装置中去的这项功能,它要在代码分解过程之后,将原来程序文件 的剩余部分的代码之间的提取过代码块之后的空洞由步骤602进行 适当的填充,插入转向加密装置功能访问的附加代码调用序列。而在 运行期间这些所插入的代码要保证进入加密装置调用前保护当前程 序运行的现场。当执行过程从对加密装置功能调用返回后还要恢复现 场,并通过步骤603将加密装置内返回的信息拼装成相适应的结构压 入当前的程序执行栈中,从而使得与被移走的代码相邻的代码感觉不 到原有的这段代码被移走。\n所述代码填充可采用多种方式,其中所示的机器码为并非与特定 平台相关的伪代码,旨在说明代码填充原理及流程,不是本发明的具 体实现效果。如下文所提到的CALL key代表对加密装置的功能调用, 其上相邻的PUSH指令代表了调用加密装置的功能所需的参数信息, 实际的实现要远比图示的情况复杂得多,这里不过于详细地分析所有 情况下的具体的实现细节。\n实例a:为一个将要被提取的软件代码片段,在没有进行提取代 码操作时代码的执行应该依次从L1、L2、...、L8。\n…\nL1:PUSH AX\nL2:PUSH BX\nL3:MOV BX,CX\nL4:ADD AX,BX\nL5:XOR AX,DX\nL6:ADD CX,AX\nL7:PUSH BX\nL8:PUSH AX\n…\n实例b:为一个已被提取产生空洞的代码片段。\n…\nL1:PUSH AX\nL2:PUSH BX\n---\n---\n---\n---\nL7:PUSH BX\nL8:PUSH AX\n…\n实例c:示意了一个直接在代码空洞处加入对加密装置功能调用, 并将其余空隙L5、L6处用NOP指令补齐处理情况,补齐后程序运行 到L3时将开始执行与调用加密装置功能的相关操作,返回到L5、L6 时,所执行的NOP指令不会破环当前执行的上下情况保证程序顺次执 行到L7、L8处。\n…\nL1:PUSH AX\nL2:PUSH BX\nL3:PUSH n\nL4:CALL key\nL5:NOP\nL6:NOP\nL7:PUSH BX\nL8:PUSH AX\n…\n实例d:示意了一个直接在空洞处加入对加密装置功能调用,并 加入了一定量的随机字节(DB Rand),在L5处直接跳转到了L7绕过 所插入的随机字节,仍使得在添补了对加密装置的功能调用代码后的 执行过程与提取及插入代码之前的执行效果完全一致。\n…\nL1:PUSH AX\nL2:PUSH BX\nL3:PUSH n\nL4:CALL key\nL5:JMP L7\nL6:DB Rand\nL7:PUSH BX\nL8:PUSH AX\n…\n实例e:示意了结合上下文指令,加入混淆逻辑的指令(MUL AX,BX、ADD DX,AX),并随后加入对加密装置功能调用代码,虽然增 加了一些所要替换的代码块中原本不存在的指令,但执行的结果仍与 被提取前保持一致,此时被提取处的代码的原本面貌更难于被解密者 猜出。\n…\nL1:PUSH AX\nL2:PUSH BX\nL3:MUL AX,BX\nL4:ADD DX,AX\nL5:DB Rand\nL6:CALL key\nL7:PUSH BX\nL8:PUSH AX\n…\n实例f:示意了用两个对加密装置功能调用(Call key)来替代原 来的若干条指令的处理方法。\n…\nL1:PUSH AX\nL2:PUSH BX\nL3:PUSH n1\nL4:CALL key\nL5:PUSH n2\nL6:CALL key\nL7:PUSH BX\nL8:PUSH AX\n… \n本发明从根本上解决了传统外壳加密当中后期所绑定的壳代码 与应用的代码结合得不够紧密的问题,使得外壳的破解难度得到了提 升。同时解决了外壳加密的破解方法在理论上具有一定通用性的问 题,这就使得外壳加密的安全强度能基本上接近源代码编写方式实现 的加密保护。重要的是本发明是在提升加密的安全强度的同时并没有 增加应用软件开发商的负担,只需做的就是简单地输入所需的相应参 数,便将软件版权保护功能结合到他们将要发行的软件产品当中。\n以上对本发明所提供的从程序文件中提取部分代码至加密装置 中的软件版权保护方法进行了详细介绍,本文中应用了具体个例对本 发明的原理及实施方式进行了阐述。以上实施例的说明只是用于帮助 理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员, 依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。 综上所述,本说明书内容不应理解为对本发明的限制。
法律信息
- 2012-01-11
专利权人的姓名或者名称、地址的变更
专利权人由北京坚石诚信科技股份有限公司变更为北京坚石诚信科技有限公司
地址由100085 北京市海淀区学清路9号汇智大厦B座2层变更为100085 北京市海淀区学清路9号汇智大厦B座2层
- 2010-09-15
专利权人的姓名或者名称、地址的变更
专利权人由北京坚石诚信科技股份有限公司变更为北京坚石诚信科技股份有限公司
地址由100083 北京市海淀区学院路40号3区14幢2层203、204、205、206室变更为100085 北京市海淀区学清路9号汇智大厦B座2层
- 2010-05-19
专利权的转移
登记生效日: 2010.04.08
专利权人由北京飞天诚信科技有限公司变更为北京坚石诚信科技股份有限公司
地址由100083 北京市海淀区学院路40号研7A楼5层变更为100083 北京市海淀区学院路40号3区14幢2层203、204、205、206室
- 2007-10-31
- 2006-05-17
- 2006-03-22
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |