计算机源代码的编译方法及装置、认证方法、装置及系统与流程

文档序号:12363064阅读:295来源:国知局
计算机源代码的编译方法及装置、认证方法、装置及系统与流程

本发明涉及计算机技术领域,尤其涉及保证计算机源代码可信度的方法,具体来说就是一种计算机源代码的编译方法及装置、认证方法、装置及系统。



背景技术:

在软件产品开发过程中,程序开发人员提交的是源程序,软件产品管理人员对源程序进行构建,产生可运行模块,然后发布与部署可运行模块,最终运行该可运行模块。由于可运行模块是不可读的,如何保证在这一系列流转之后,可运行模块就是由最初的那个源程序所构建的呢?即在这一系列流转过程中,怎么确定可运行模块对应的源程序是否被人篡改过,或者说怎么知道这个可运行模块就是由最初的源程序所产生的。

为此,现有技术中出现三种保证源程序与可运行模块一致的方式:1.源程序标签方式,就是开发人员在源程序中设置标签作为提示;2.可运行模块时间戳方式,即源程序在编译产生可运行模块时,会在可运行模块中自动生成一个编译时间戳,通过检查各个环节的时间戳是否一致来判断可运行模块是否可信;3.可运行模块长度方式,由源程序编译产生的可运行模块,有一个字符长度值,通过验证该字符长度值来确保源程序与可运行模块的对应关系。

虽然现有方式在一定程度上可以保证源程序与可运行模块相一致,但是存在严重的安全漏洞,并不能确保源程序与可运行模块相一致,具体说明如下:

在源程序标签方式中,开发人员在源程序中设置的标签仅可以将其作为提示,但不能作为判断标准,因为在源程序提交后可以修改源程序而保持标签不变。

可运行模块时间戳方式至少存在以下两个缺点:A)有可能存在时间戳相同的多个源程序,因此,时间戳相同并不能保证运行模块就是初始的源程序;B)程序产品部署通常包括可运行模块部署和源程序部署,可运行模块部署就是源程序在一个地方编译,并将可运行模块部署到其他地方,源程序部署则是在需要的地方对源程序进行编译,产生可运行模块,这样一来,可运行模块时间戳的方式就失效了。

在可运行模块长度方式中,通常情况下,源程序修改后,字符长度值会发生变化,但是,在某些情况下,这个字符长度值是不变的,比如将字符A改成字符B,字符长度值不会发生变化。

本领域技术人员亟需研发一种计算机源代码的认证方法,能确保计算机源代码与可运行模块的一致性,从而保证计算机源代码构建结果的可信度。



技术实现要素:

有鉴于此,本发明要解决的技术问题在于提供一种计算机源代码的编译方法及装置、认证方法、装置及系统,解决了现有技术中不能确保计算机源代码与可运行模块一致性的问题。

为了解决上述技术问题,本发明的具体实施方式提供一种计算机源代码的编译方法,包括:编译源程序产生目标程序和编译列表;根据所述编译列表对应的特征值产生特征模块;根据所述目标程序和所述特征模块生成可执行程序。

本发明的具体实施方式还提供一种计算机源代码的编译装置,包括:编译单元,用于编译源程序产生目标程序和编译列表;产生单元,用于根据所述编译列表对应的特征值产生特征模块;生成单元,用于根据所述目标程序和所述特征模块生成可执行程序。

本发明的具体实施方式还提供一种计算机源代码的认证方法,包括:解析可执行程序中特征模块对应的第一特征值;编译源程序产生编译列表;根据所述编译列表产生源程序对应的第二特征值;比较所述第一特征值和所述第二特征值以验证计算机源代码的构建是否可信。

本发明的具体实施方式还提供一种计算机源代码的认证装置,包括:解析单元,用于解析可执行程序中特征模块对应的第一特征值;编译单元,用于编译源程序产生编译列表;产生单元,用于根据所述编译列表产生源程序对应的第二特征值;比较单元,用于比较所述第一特征值和所述第二特征值以验证计算机源代码的构建是否可信。

本发明的具体实施方式还提供一种计算机源代码的认证系统,包括:编译装置和认证装置。其中,所述编译装置包括:所述编译装置包括:编译单元,用于编译源程序产生目标程序和编译列表;产生单元,用于根据所述编译列表对应的特征值产生特征模块;生成单元,用于根据所述目标程序和所述特征模块生成可执行程序。所述认证装置包括:解析单元,用于解析可执行程序中特征模块对应的第一特征值;编译单元,用于编译源程序产生编译列表;产生单元,用于根据所述编译列表产生源程序对应的第二特征值;比较单元,用于比较所述第一特征值和所述第二特征值以验证计算机源代码的构建是否可信。

根据本发明的上述具体实施方式可知,计算机源代码的编译方法及装置、认证方法、装置及系统至少具有以下有益效果:在不影响程序原有功能的前提下,修改源程序的编译过程,利用MD5算法基于源程序产生一个独一无二的数字签名(即特征值),并将数字签名编译成特征模块后,嵌套到可运行模块(即可执行程序)中,该数字签名在可运行模块中可读,因此通过可运行模块可以获得对应可运行模块的数字签名;由于源程序的数字签名在编译时保存到可运行模块中,并且可以从该可以运行模块中解析出该数字签名。同时,也可以利用源程序随时重新生成对应源程序的数字签名,只要源程序没有变更,数字签名就不会改变,这样一来,就可以随时解析出可运行模块中的数字签名与源程序的数字签名进行比对,从而保证可运行模块与其对应源程序的一致性,实现了软件包的源程序级认证功能,能够确保外包软件产品的源代码的可信度。

应了解的是,上述一般描述及以下具体实施方式仅为示例性及阐释性的,其并不能限制本发明所欲主张的范围。

附图说明

下面的所附附图是本发明的说明书的一部分,其绘示了本发明的示例实施例,所附附图与说明书的描述一起用来说明本发明的原理。

图1为本发明具体实施方式提供的一种计算机源代码的编译方法的实施例一的流程图;

图2为本发明具体实施方式提供的一种计算机源代码的编译方法的实施例二的流程图;

图3为本发明具体实施方式提供的一种计算机源代码的编译方法的实施例三的流程图;

图4为本发明具体实施方式提供的一种计算机源代码的编译装置的实施例一的示意框图;

图5为本发明具体实施方式提供的一种计算机源代码的编译装置的实施例二的示意框图;

图6为本发明具体实施方式提供的一种计算机源代码的编译装置的实施例三的示意框图;

图7为本发明具体实施方式提供的一种计算机源代码的认证方法的实施例一的流程图;

图8为本发明具体实施方式提供的一种计算机源代码的认证方法的实施例二的流程图;

图9为本发明具体实施方式提供的一种计算机源代码的认证装置的实施例一的示意框图;

图10为本发明具体实施方式提供的一种计算机源代码的认证装置的实施例二的示意框图;

图11为本发明具体实施方式提供的一种计算机源代码的认证系统的示意框图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚明白,下面将以附图及详细叙述清楚说明本发明所揭示内容的精神,任何所属技术领域技术人员在了解本发明内容的实施例后,当可由本发明内容所教示的技术,加以改变及修饰,其并不脱离本发明内容的精神与范围。

本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。另外,在附图及实施方式中所使用相同或类似标号的元件/构件是用来代表相同或类似部分。

关于本文中所使用的“第一”、“第二”、…等,并非特别指称次序或顺位的意思,也非用以限定本发明,其仅为了区别以相同技术用语描述的元件或操作。

关于本文中所使用的方向用语,例如:上、下、左、右、前或后等,仅是参考附图的方向。因此,使用的方向用语是用来说明并非用来限制本创作。

关于本文中所使用的“包含”、“包括”、“具有”、“含有”等等,均为开放性的用语,即意指包含但不限于。

关于本文中所使用的“及/或”,包括所述事物的任一或全部组合。

关于本文中所使用的用语“大致”、“约”等,用以修饰任何可以微变化的数量或误差,但这些微变化或误差并不会改变其本质。一般而言,此类用语所修饰的微变化或误差的范围在部分实施例中可为20%,在部分实施例中可为10%,在部分实施例中可为5%或是其他数值。本领域技术人员应当了解,前述提及的数值可依实际需求而调整,并不以此为限。

某些用以描述本申请的用词将于下或在此说明书的别处讨论,以提供本领域技术人员在有关本申请的描述上额外的引导。

图1为本发明具体实施方式提供的一种计算机源代码的编译方法的实施例一的流程图,如图1所示,修改源程序编译过程,基于编译列表产生一个独一无二的数字签名(特征值),并将数字签名编译成特征模块嵌套到可执行程序中,该数字签名在可执行程序中可读。

该附图所示的具体实施方式中,该编译方法包括:

步骤101:编译源程序产生目标程序和编译列表。源程序包括源程序中复用的程序段;目标程序是源程序编译产生的中间产品;编译列表是源程序编译时产生的编译过程信息,编译列表包含了源程序及其复用的其他程序段展开后的代码和一些编译信息。

步骤102:根据所述编译列表对应的特征值产生特征模块。特征模块可以加载到可执行程序中;特征值可以为MD5码。

步骤103:根据所述目标程序和所述特征模块生成可执行程序。即将特征模块嵌入到目标程序中,特征模块中带有特征值。本发明的具体实施例中,特征值为32位。

参见图1,本发明在不影响程序原有功能的前提下,修改源程序的编译过程,通过MD5算法为源程序产生一个独一无二的数字签名(即特征值),并将数字签名编译成特征模块最终嵌套到可运行模块(即可执行程序)中,该数字签名在可运行模块中是可读的;源程序的数字签名可以在编译时保存下来,也可以随时重新生成,只要源程序没有变更,数字签名就不会改变,这样一来,就可以随时读取可运行模块中的数字签名与源程序的数字签名进行比对,从而保证可运行模块与其对应源程序的一致性,实现了软件包的源程序级认证功能,能够确保外包软件产品的源代码的可信度。

图2为本发明具体实施方式提供的一种计算机源代码的编译方法的实施例二的流程图,如图2所示,为了防止不必要信息影响源程序特征值的生成结果,根据编译列表产生特征模块之前,需要滤除编译列表中非人工编写的程序代码。

该附图所示的具体实施方式中,步骤102之前,该编译方法还包括:

步骤101-1:滤除所述编译列表中非人工编写的程序代码。本发明的具体实施例中,非人工编写的所述程序代码包括:编译日期和时间戳(TIMESTAMP)等信息。

参见图2,针对编译列表,过滤掉非人工编写的程序代码,比如编译源程序过程中自动产生的编译日期,SQL程序预编译生成的TIMESTAMP等信息。这些信息会影响特征值的生成结果,因为不同日期,对于源程序来说,也是差异,生成的特征值也是不同的。经过过滤处理后,得到展开的全量代码,即扩展的源程序(源程序复用的程序段,在源程序编译过程中,会将该程序段拷贝进源程序作为源程序的组成部分,即当源程序调用的程序段发生改变时,扩展的源程序也会发生变化,特征值也会发生变化)。滤除编译列表中非人工编写的程序代码,可以在认证可运行模块与其对应源程序的一致性时,不受时间信息的干扰,提高计算机源代码认证的科学性与可靠性。

图3为本发明具体实施方式提供的一种计算机源代码的编译方法的实施例三的流程图,如图3所示,滤除编译列表中非人工编写的程序代码后,此时的编译列表可以看成大文本信息,根据编译列表产生源特征值,再将源特征值和程序名组成一个汇编程序,最后编译汇编程序从而产生特征模块。

该附图所示的具体实施方式中,步骤102具体包括:

步骤1021:根据所述编译列表产生对应源程序的特征值。对应源程序的特征值就是源特征值,源程序的任何修改都会导致源特征值发生变化。

步骤1022:根据对应所述源程序的特征值产生汇编程序。本发明的具体实施例中,也可以在汇编程序中加入程序名,即根据所述源特征值和程序名产生汇编程序。

步骤1023:编译所述汇编程序产生特征模块。特征模块可以加载到可执行程序中,并且特征模块中含有源特征值。

如图3所示,即使源程序的长度不变,字符发生变化,也会导致源特征值发生变化,可以确保源程序与可执行程序的一致性。

图4为本发明具体实施方式提供的一种计算机源代码的编译装置的实施例一的示意框图,图1-图3所述的编译方法可以应用到图4所示的编译装置中,在不影响程序原有功能的前提下,修改源程序编译过程,基于编译列表产生一个独一无二的数字签名(特征值),并将数字签名编译成特征模块嵌套到可执行程序(即可运行模块)中,该数字签名在可执行程序中可读。

该附图所示的具体实施方式中,该编译装置包括编译单元1、产生单元2和生成单元3,其中,编译单元1用于编译源程序产生目标程序和编译列表;产生单元2用于根据所述编译列表对应的特征值产生特征模块;生成单元3用于根据所述目标程序和所述特征模块生成可执行程序。

参见图4,本发明在不影响程序原有功能的前提下,修改源程序的编译过程,通过MD5算法为源程序产生一个独一无二的数字签名(即特征值),并将数字签名编译成特征模块最终嵌套到可运行模块(即可执行程序)中,该数字签名在可运行模块中是可读的;源程序的数字签名可以在编译时保存下来,也可以随时重新生成,只要源程序没有变更,数字签名就不会改变,这样一来,就可以随时读取可运行模块中的数字签名与源程序的数字签名进行比对,从而保证可运行模块与其对应源程序的一致性,实现了软件包的源程序级认证功能,能够确保外包软件产品的源代码的可信度。

图5为本发明具体实施方式提供的一种计算机源代码的编译装置的实施例二的示意框图,图1-图3所述的编译方法可以应用到图5所示的编译装置中,为了防止不必要信息影响源程序特征值的生成结果,根据编译列表产生特征模块之前,需要滤除编译列表中非人工编写的程序代码。

该附图所示的具体实施方式中,编译装置还包括过滤单元4,其中,过滤单元4用于滤除所述编译列表中非人工编写的程序代码。本发明的具体实施例中,非人工编写的所述程序代码包括:编译日期和时间戳(TIMESTAMP)等信息。

参见图5,针对编译列表,过滤掉非人工编写的程序代码,比如编译源程序过程中自动产生的编译日期,SQL程序预编译生成的TIMESTAMP等信息。这些信息会影响特征值的生成结果,因为不同日期,对于源程序来说,也是差异,生成的特征值也是不同的。经过过滤处理后,得到展开的全量代码,即扩展的源程序(源程序复用的程序段,在源程序编译过程中,会将该程序段拷贝进源程序作为源程序的组成部分,即当源程序调用的程序段发生改变时,扩展的源程序也会发生变化,特征值也会发生变化)。滤除编译列表中非人工编写的程序代码,可以在认证可运行模块与其对应源程序的一致性时,不受时间信息的干扰,提高计算机源代码认证的科学性与可靠性。

图6为本发明具体实施方式提供的一种计算机源代码的编译装置的实施例三的示意框图,如图6所示,滤除编译列表中非人工编写的程序代码后,此时的编译列表可以看成大文本信息,根据编译列表产生源特征值,再将源特征值和程序名组成一个汇编程序,最后编译汇编程序从而产生特征模块。

该附图所示的具体实施方式中,所述产生单元2进一步包括产生模块21、汇编模块22和编译模块23,其中,产生模块21用于根据所述编译列表产生对应源程序的特征值;汇编模块22用于根据对应所述源程序的特征值产生汇编程序;编译模块23用于编译所述汇编程序产生特征模块。

如图6所示,即使源程序的长度不变,字符发生变化,也会导致特征值发生变化,可以确保源程序与可执行程序的一致性。

图7为本发明具体实施方式提供的一种计算机源代码的认证方法的实施例一的流程图,如图7所示,数字签名在可执行程序中通过编译平台可以解析出来,通过编译源程序可以获得源程序的数字签名,通过比对可执行程序中的数字签名和源程序的数字签名,从而可以确保可执行程序与源程序的一致性。

该附图所示的具体实施方式中,该认证方法包括:

步骤201:解析可执行程序中特征模块对应的特征值。利用编译平台解析可执行程序,找到该可执行程序的源程序编译时产生的特征值(即第一特征值),特征值就是目标特征值,该特征值与特征模块对应。

步骤202:编译源程序产生编译列表。源程序包括源程序中复用的程序段;编译列表是源程序编译时产生的编译过程信息,编译列表包含了源程序及其复用的其他程序段展开后的代码和一些编译信息。

步骤203:根据所述编译列表产生源程序对应的特征值(即第二特征值)。源特征值就是源程序特征值,源程序的任何修改都会导致源特征值发生变化。

步骤204:比较所述特征模块对应的所述特征值和所述源程序对应的所述特征值以验证计算机源代码的构建是否可信。如果源特征值和目标特征值相同,说明计算机源代码的构建是可信的,如果源特征值和目标特征值不相同,说明可执行程序与源程序不对应,即计算机源代码的构建不可信。

参见图7,利用软件编译平台解析可执行程序,获得该可执行程序对应的源程序编译时产生的特征值,同时再次编译源程序,产生一个对应该源程序的特征值,比较这两个特征值是否相同,只要源程序没有变更,特征值就不会改变,这样一来,就可以随时读取可执行程序的特征值与源程序的特征值进行比对,从而保证可执行程序与其对应源程序的一致性,实现了软件包的源程序级认证功能,能够确保外包软件产品的源代码的可信度。

图8为本发明具体实施方式提供的一种计算机源代码的认证方法的实施例二的流程图,如图8所示,为了防止不必要信息影响源程序特征值的生成结果,根据编译列表产生特征模块之前,需要滤除编译列表中非人工编写的程序代码。

该附图所示的具体实施方式中,在步骤203之前,该认证方法还包括:

步骤202-1:滤除所述编译列表中非人工编写的程序代码。本发明的具体实施例中,非人工编写的所述程序代码包括:编译日期和时间戳。那么在步骤203中根据滤除处理后的所述编译列表产生源程序对应的特征值。

参见图8,针对编译列表,过滤掉非人工编写的程序代码,比如编译源程序过程中自动产生的编译日期,SQL程序预编译生成的TIMESTAMP等信息。这些信息会影响特征值的生成结果,因为不同日期,对于源程序来说,也是差异,生成的特征值也是不同的。经过过滤处理后,得到展开的全量代码,即扩展的源程序(源程序复用的程序段,在源程序编译过程中,会将该程序段拷贝进源程序作为源程序的组成部分,即当源程序调用的程序段发生改变时,扩展的源程序也会发生变化,特征值也会发生变化)。滤除编译列表中非人工编写的程序代码,可以在认证可运行模块与其对应源程序的一致性时,不受时间信息的干扰,提高计算机源代码认证的科学性与可靠性。

图9为本发明具体实施方式提供的一种计算机源代码的认证装置的实施例一的示意框图,如图9所示的认证装置可以应用到图7-图8所示的认证方法中,数字签名在可执行程序中可读,通过编译源程序可以获得源程序的数字签名,通过比对可执行程序中的数字签名和源程序的数字签名,从而可以确保可执行程序与源程序的一致性。

该附图所示的具体实施方式中,认证装置包括解析单元10、编译单元20、产生单元30和比较单元40,其中,解析单元10用于解析可执行程序中特征模块对应的特征值;编译单元20用于编译源程序产生编译列表;产生单元30用于根据所述编译列表产生源程序对应的特征值;比较单元40用于比较所述特征模块对应的特征值和所述源程序对应的特征值以验证计算机源代码的构建是否可信。

参见图9,利用软件编译平台解析可执行程序,获得该可执行程序对应的源程序编译时产生的特征值,同时再次编译源程序,产生一个对应该源程序的特征值,比较这两个特征值是否相同,只要源程序没有变更,特征值就不会改变,这样一来,就可以随时读取可执行程序的特征值与源程序的特征值进行比对,从而保证可执行程序与其对应源程序的一致性,实现了软件包的源程序级认证功能,能够确保外包软件产品的源代码的可信度。

图10为本发明具体实施方式提供的一种计算机源代码的认证装置的实施例二的示意框图,如图10所示的认证装置可以应用到图7-图8所示的认证方法中,为了防止不必要信息影响源程序特征值的生成结果,根据编译列表产生特征模块之前,需要滤除编译列表中非人工编写的程序代码。

该附图所示的具体实施方式中,该认证装置还包括过滤单元50,其中,过滤单元50用于滤除所述编译列表中非人工编写的程序代码。

如图10所示,针对编译列表,过滤掉非人工编写的程序代码,比如编译源程序过程中自动产生的编译日期,SQL程序预编译生成的TIMESTAMP等信息。这些信息会影响特征值的生成结果,因为不同日期,对于源程序来说,也是差异,生成的特征值也是不同的。经过过滤处理后,得到展开的全量代码,即扩展的源程序(源程序复用的程序段,在源程序编译过程中,会将该程序段拷贝进源程序作为源程序的组成部分,即当源程序调用的程序段发生改变时,扩展的源程序也会发生变化,特征值也会发生变化)。滤除编译列表中非人工编写的程序代码,可以在认证可运行模块与其对应源程序的一致性时,不受时间信息的干扰,提高计算机源代码认证的科学性与可靠性。

图11为本发明具体实施方式提供的一种计算机源代码的认证系统的示意框图,如图11所示的认证系统可以应用到如图1-图10所示的方法或者装置中,修改源程序编译过程,基于编译列表产生一个独一无二的数字签名(特征值),并将数字签名编译成特征模块后嵌套到可执行程序中,该数字签名在可执行程序中可读,通过比对可执行程序中的数字签名和源程序生成的数字签名,从而可以确保可执行程序与源程序的一致性。

该附图所示的具体实施方式中,认证系统包括:编译装置A和认证装置B,其中,所述编译装置A包括:编译单元1、产生单元2和生成单元3,其中,编译单元1用于编译源程序产生目标程序和编译列表;产生单元2用于根据所述编译列表对应的特征值产生特征模块;生成单元3用于根据所述目标程序和所述特征模块生成可执行程序。

所述认证装置B包括:解析单元10、编译单元20、产生单元30和比较单元40,其中,解析单元10用于解析可执行程序中特征模块对应的特征值;编译单元20用于编译源程序产生编译列表;产生单元30用于根据所述编译列表产生源程序对应的特征值;比较单元40用于比较所述特征模块对应的所述特征值和所述源程序对应的所述特征值以验证计算机源代码的构建是否可信。

参见图11,本发明在不影响程序原有功能的前提下,修改源程序的编译过程,通过MD5算法为源程序产生一个独一无二的数字签名(即特征值),并将数字签名编译成特征模块最终嵌套到可运行模块(即可执行程序)中,该数字签名在可运行模块中是可读的;源程序的数字签名可以在编译时保存到可运行模块中,也可以随时利用源程序重新生成,只要源程序没有变更,数字签名就不会改变,这样一来,就可以随时读取可运行模块中的数字签名与源程序的数字签名进行比对,从而保证可运行模块与其对应源程序的一致性,实现了软件包的源程序级认证功能,能够确保外包软件产品的源代码的可信度。

本发明提供一种计算机源代码的编译方法及装置、认证方法、装置及系统,在不影响程序原有功能的前提下,修改源程序的编译过程,利用MD5算法基于源程序产生一个独一无二的数字签名(即特征值),并将数字签名编译成特征模块后嵌套到可运行模块(即可执行程序)中,该数字签名在可运行模块中可读,因此通过可运行模块可以获得对应可运行模块的数字签名;由于对应源程序的数字签名在编译时保存到可运行模块中,并且可以从该可以运行模块中解析出该数字签名。同时,也可以利用源程序(源代码)随时重新生成对应源程序的数字签名,只要源程序没有变更,数字签名就不会改变,这样一来,就可以随时解析出可运行模块中的数字签名与源程序生成的数字签名进行比对,从而保证可运行模块与其对应源程序的一致性,实现了软件包的源程序级认证功能,能够确保外包软件产品的源代码的可信度和科学性。

上述的本发明实施例可在各种硬件、软件编码或两者组合中进行实施。例如,本发明的实施例也可为在数据信号处理器(Digital Signal Processor,DSP)中执行上述方法的程序代码。本发明也可涉及计算机处理器、数字信号处理器、微处理器或现场可编程门阵列(Field Programmable Gate Array,FPGA)执行的多种功能。可根据本发明配置上述处理器执行特定任务,其通过执行定义了本发明揭示的特定方法的机器可读软件代码或固件代码来完成。可将软件代码或固件代码发展为不同的程序语言与不同的格式或形式。也可为不同的目标平台编译软件代码。然而,根据本发明执行任务的软件代码与其他类型配置代码的不同代码样式、类型与语言不脱离本发明的精神与范围。

以上所述仅为本发明示意性的具体实施方式,在不脱离本发明的构思和原则的前提下,任何本领域的技术人员所做出的等同变化与修改,均应属于本发明保护的范围。

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