代码运行方法、装置、设备及计算机可读存储介质与流程
未命名
07-23
阅读:98
评论:0

1.本公开涉及计算机技术领域,尤其涉及一种代码运行方法、装置、设备及计算机可读存储介质。
背景技术:
2.软件开发工具包(software development kit,sdk)是软件供应链中重要的部分,sdk的安全也是软件供应链安全中重要的一环。
3.sdk一般与宿主app运行在同一个进程中,共享内存与权限,且大部分sdk是以jar,aar和so等格式以黑盒的形式存在,代码高度封装,对于测试和安全分析造成了一定的困难。
4.目前对于sdk安全检测常用的方法一般是在发布前进行静态分析和动态分析,静态分析是分析sdk的权限,特征等,动态分析是指在特定的固件或环境(沙箱)或利用特定的工具对sdk进行动态检测,确定其是否调用敏感权限、敏感接口、个人信息等,但这些检测方法难以发现sdk在实际用户环境中的风险。
技术实现要素:
5.为了解决上述技术问题,本公开提供了一种代码运行方法、装置、设备及计算机可读存储介质,以实现对于软件开发工具包的管控,保障用户设备安全。
6.第一方面,本公开实施例提供一种代码运行方法,包括:
7.第一进程调用系统接口将预设代码加载至第二进程中,所述第一进程与所述第二进程相互隔离;
8.第二进程基于所述预设代码加载并运行软件开发工具包。
9.在一些实施例中,所述第二进程基于所述预设代码加载并运行软件开发工具包,包括:
10.第二进程基于所述预设代码加载软件开发工具包;
11.响应于所述软件开发工具包的目标请求,基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能。
12.在一些实施例中,响应于所述软件开发工具包的目标请求,基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能,包括:
13.确定所述软件开发工具包具有所述目标请求对应的目标权限,则所述第二进程基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能。
14.在一些实施例中,所述方法还包括:
15.确定所述第一进程不具有目标权限,则确定所述软件开发工具包不具有所述目标权限;或者
16.确定所述第一进程具有目标权限,则根据预设权限管理信息查找所述目标权限的信息。
17.在一些实施例中,所述方法还包括:
18.确定所述软件开发工具包具有目标权限,则对所述软件开发工具包进行授权,使得所述软件开发工具包能够实现所述目标请求对应的功能。
19.在一些实施例中,在基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能之后,所述方法还包括:
20.撤销所述软件开发工具包的目标权限。
21.第二方面,本公开实施例提供一种代码运行装置,包括:
22.加载模块,用于由第一进程调用系统接口将预设代码加载至第二进程中,所述第一进程与所述第二进程相互隔离;
23.运行模块,用于由第二进程基于所述预设代码加载并运行软件开发工具包。
24.第三方面,本公开实施例提供一种电子设备,包括:
25.存储器;
26.处理器;以及
27.计算机程序;
28.其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现如第一方面所述的方法。
29.第四方面,本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现第一方面所述的方法。
30.第五方面,本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序或指令,该计算机程序或指令被处理器执行时实现如上所述的代码运行方法。
31.本公开实施例提供的代码运行方法、装置、设备及计算机可读存储介质,通过创建与当前进程相互隔离的第二进程,并将软件开发工具包加载至第二进程中进行运行,使得软件开发工具包作为独立运行的进程,并且与当前进程相互隔离,能够对软件开发工具包运行时的行为进行彻底管控,降低软件开发工具包的风险,保证用户设备及数据的安全。
附图说明
32.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
33.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
34.图1为本公开实施例提供的代码运行方法流程图;
35.图2为本公开实施例提供的一种应用场景的示意图;
36.图3为本公开另一实施例提供的代码运行方法流程图;
37.图4为本公开另一实施例提供的代码运行方法流程图;
38.图5为本公开实施例提供的第一进程与第二进程的调用关系示意图;
39.图6为本公开实施例提供的第二进程调用权限的流程图;
40.图7为本公开实施例提供的代码运行装置的结构示意图;
41.图8为本公开实施例提供的电子设备的结构示意图。
具体实施方式
42.为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
43.在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
44.接入sdk是常见的应用软件(app)开发模式,同一个app可以接入多个第三方sdk,且sdk与宿主app运行在同一个进程中,共享内存与权限,因此sdk的安全性就显得尤为重要。对于第三方sdk的安全检测一般包括隐私合规检测、漏洞检测、恶意行为检测等。
45.常见的安全检测方法有静态分析和动态分析,但这两种方法仅适合在sdk发布前对其风险进行检测和管控,由于sdk中接口数据是动态的,虽然能够通过常规的检测,但在运行过程中仍可能被漏洞利用,这些动态数据便可以被替换为恶意行为的相关数据,导致sdk发生恶意行为,例如本应正常的页面跳转流程被跳转到异常页面,本应正常的数据访问被篡改为恶意链接等。或者,还可以网络操控已经通过静态检测的sdk,下发异常指令或任务控制sdk执行异常的操作,导致用户的设备安全受到威胁。
46.针对该问题,本公开实施例提供了一种代码运行方法,下面结合具体的实施例对该方法进行介绍。
47.图1为本公开实施例提供的代码运行方法流程图。该方法可以应用于图2所示的应用场景,该应用场景中包括终端设备,具体可以是智能手机、掌上电脑、平板电脑、带显示屏的可穿戴设备、台式机、笔记本电脑、一体机、智能家居设备等。终端设备中运行有第一进程,例如可以是应用程序(app),其中包括loadsdkmodule模块;终端设备中还包括第二进程与系统接口startisolatedprocess,第一进程通过调用startisolatedprocess接口在第二进程中执行loadsdkmodule模块中的程序;终端设备中还包括权限管理引擎,用于记录和管理上述第一进程与第二进程的权限信息。可以理解的是,本公开实施例提供的代码运行方法还可以应用在其他场景中。
48.下面结合图2所示的应用场景,对图1所示的代码运行方法进行介绍,该方法包括的具体步骤如下:
49.s101、第一进程调用系统接口将预设代码加载至第二进程中,所述第一进程与所述第二进程相互隔离。
50.s102、第二进程基于所述预设代码加载并运行软件开发工具包。
51.第一进程中包含有编写好的预设代码,该预设代码可以是以模块的形式存在,用于加载sdk代码。第一进程通过调用系统接口将预设代码加载至另一隔离的第二进程中。其中,预设代码被定义有预设函数入口,该入口用来将预设代码传递给操作系统时,对预设代码进行加载。预设代码可以理解为是第二进程的主要执行逻辑,第二进程基于预设代码来实现软件开发工具包的加载以及运行。
52.如图2所示,在第一进程app中,预设代码以模块loadsdkmodule的形式存在,该模块的名称以及具体逻辑可以由开发者定义,但需要定义main函数入口。loadsdkmodule模块用于加载sdk代码,若有多个sdk需要加载,在可以配置多个与loadsdkmodule模块功能相同
的模块,或是使用loadsdkmodule模块加载多个sdk。在操作系统(如android系统)的原生逻辑中存在有创建隔离进程的接口,这个接口可以提供创建相互隔离的进程的能力,但在一般情况下,该接口并不对第三方app开放,仅作为原生系统内部接口使用。在本公开实施例中,自定义startisolatedprocess接口用于创建新的隔离进程(第二进程),与系统原生逻辑中存在的创建隔离进程的接口不同,自定义startisolatedprocess接口作为公共接口,对系统内其他app开放,供其他app调用。
53.在隔离进程的创建过程中,loadsdkmodule模块作为参数的形式传递至startisolatedprocess接口,startisolatedprocess接口根据参数找到对应的sdk以及main函数入口,将sdk代码加载至隔离进程(第二进程)中并运行。
54.在一些实施例中,新创建的第二进程拥有由系统分配的各种参数。第二进程的参数至少包括以下的一种或几种:用户id(uid)、入口类(entrypoint)、入口类参数(entrypointargs)、进程名称(processname)进程包名(pkgname)、权限管理引擎等。其中,用户id为第二进程创建后由系统分配的唯一标识,第二进程运行在这个唯一标识下,默认没有任何权限,达到沙箱隔离的目的;入口类即上述loadsdkmodule模块的类名,系统根据入口类查找到loadsdkmodule模块中的main函数作为执行入口;入口类参数即上述main函数中的参数;进程名称即第二进程的名称,由开发者自行定义,例如可以根据第一进程的名称和sdk的名称共同生成第二进程的名称;进程包名由开发者自行定义,例如可以根据第一进程的包名以及sdk的包名共同生成第二进程的包名;权限管理引擎用于记录第二进程的权限。可以在系统中添加权限管理引擎模块,用于记录各个第二进程的权限动态信息。
55.本公开实施例通过第一进程调用系统接口将预设代码加载至第二进程中,所述第一进程与所述第二进程相互隔离;第二进程基于所述预设代码加载并运行软件开发工具包,通过创建与当前进程相互隔离的第二进程,并将软件开发工具包加载至第二进程中进行运行,使得软件开发工具包作为独立运行的进程,并且与当前进程相互隔离,能够对软件开发工具包运行时的行为进行彻底管控,降低软件开发工具包的风险,保证用户设备及数据的安全。
56.图3为本公开另一实施例提供的代码运行方法流程图,如图3所示,该方法包括如下几个步骤:
57.s301、第一进程调用系统接口将预设代码加载至第二进程中,所述第一进程与所述第二进程相互隔离。
58.s302、第二进程基于所述预设代码加载软件开发工具包。
59.s303、响应于所述软件开发工具包的目标请求,判断所述软件开发工具包是否具有所述目标请求对应的目标权限。
60.s304、若所述软件开发工具包具有目标权限,则所述第二进程基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能。
61.与第一进程相隔离的第二进程加载软件开发工具包并运行后,可能需要一些权限来执行相关的操作。此时,需要对第二进程的权限进行管控。当软件开发工具包需要执行某项操作时,向系统发起相应的目标请求。系统根据目标请求判断相应的软件开发工具包是否具有对应的目标权限。
62.可选的,可以通过第一进程调用系统中的权限管理引擎模块中的授权与撤销权限
接口来实现对于第二进程的权限管控。
63.在一些实施例中,例如在上述loadsdkmodule模块中,开发者预先自定义和封装用于间接调用软件开发工具包中的接口,并提供跨进程调用的能力。例如,对于软件开发工具包中的接口a,需要在loadsdkmodule模块中增加xxx_a接口来间接调用软件开发工具包中的接口a。在loadsdkmodule模块中定义接口,便于第一进程在调用软件开发工具包中的某个接口时的动态权限管理。
64.本公开实施例通过第一进程调用系统接口将预设代码加载至第二进程中,所述第一进程与所述第二进程相互隔离;第二进程基于所述预设代码加载软件开发工具包;响应于所述软件开发工具包的目标请求,判断所述软件开发工具包是否具有所述目标请求对应的目标权限;若所述软件开发工具包具有目标权限,则所述第二进程基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能,通过预设代码调用软件开发工具包对第二进程或软件开发工具包的权限进行管理,进一步对软件开发工具包的运行风险进行管控,进一步提高了代码运行方法的安全性。
65.图4为本公开另一实施例提供的代码运行方法流程图,如图4所示,该方法包括如下几个步骤
66.s401、第一进程调用系统接口将预设代码加载至第二进程中,所述第一进程与所述第二进程相互隔离。
67.s402、第二进程基于所述预设代码加载软件开发工具包。
68.s403、响应于所述软件开发工具包的目标请求,根据所述第一进程的权限信息,判断所述软件开发工具包是否具有所述目标权限。若是,执行s405;若否,执行s404。
69.第一进程的权限信息即第一进程自身正常运行时所拥有的权限。第二进程基于第一进程中的代码运行,且第二进程独立于第一进程,即第一进程也可以称作第二进程的宿主进程。因此,可以理解的是,第二进程所拥有的权限不会超出第一进程所拥有的权限的范围。
70.在接收到软件开发工具包的目标请求后,首先可以根据第一进程的权限信息判断该目标请求对应的目标权限是否在第一进程所拥有的权限范围内。若目标请求对应的目标权限在第一进程所拥有的权限范围内,则认为可以依据目标请求对软件开发工具包进行授权;若目标请求对应的目标权限超出了第一进程所拥有的权限范围,则确定不能够授予软件开发工具包相应的权限,因此拒绝目标请求。
71.具体的,可以在系统中新增权限管理引擎,用于记录对软件开发工具包或是对第二进程的权限授予信息,基于该权限管理引擎中的权限授予信息对软件开发工具包或是对第二进程的权限进行管理。
72.s404、确定所述软件开发工具包不具有所述目标权限。
73.s405、对所述软件开发工具包进行授权,使得所述软件开发工具包能够实现所述目标请求对应的功能。
74.s406、撤销所述软件开发工具包的目标权限。
75.在软件开发工具包实现目标请求对应的功能之后,即软件开发工具包基于目标请求对应的权限实现了其目标功能后,将步骤s405中授予软件开发工具包的权限进行撤销。
76.s407、结束。
77.图5为本公开实施例提供的一种第一进程与第二进程的调用关系示意图。在一些实施例中,如图5所示,第一进程调用系统中新增的权限管理引擎对软件开发工具包进行授权操作。首先,基于系统中的原生进程权限管理查询第一进程是否具有目标权限,若否则直接结束此次授权操作,拒绝为第二进程中的软件开发工具包授予目标权限;若基于系统中的原生进程权限管理确定第一进程具有目标权限,则对第二进程中的软件开发工具包授予目标权限,并将权限信息记录至系统中新增的权限管理引擎中。具体的,通过loadsdkmodule模块中提供的xxx_a跨进程访问接口对软件开发工具包进行权限授予操作。在软件开发工具包基于目标权限完成相应操作后,撤销对软件开发工具包授予的目标权限,并将权限信息更新至系统中新增的权限管理引擎中,结束本次授权操作。
78.图6为本公开实施例提供的第二进程调用权限的流程图。在一些实施例中,如图6所示,当运行在第二进程中的软件开发工具包执行一些需要申请权限的操作(例如定位、网络等权限)时,基于系统的原生进程权限管理确定第一进程是否具有目标权限,若否则直接结束此次授权操作,拒绝为第二进程中的软件开发工具包授予目标权限;若基于系统中的原生进程权限管理确定第一进程具有目标权限,则进一步查询系统中新增的权限管理引擎中关于第二进程是否有目标权限的授权信息,若新增的权限管理引擎中有目标权限的授权信息,则确定第二进程已经被授予目标权限,可以直接调用目标权限;若新增的权限管理引擎中不存在目标权限的授权信息,则确定第二进程未被授予目标权限,结束此次授权操作。
79.本公开实施例通过对隔离运行的第二进程进行动态授权与撤销权限,在系统中新增权限管理引擎,记录第二进程的权限信息,实现了对于第二进程及软件开发工具包权限的灵活管控,进一步提高了代码运行方法的安全性,有效保护用户设备的安全,降低风险。
80.图7为本公开实施例提供的代码运行装置的结构示意图。该代码运行装置可以是如上实施例所述的终端设备,或者该代码运行装置可以该终端设备中的部件或组件。本公开实施例提供的代码运行装置可以执行代码运行方法实施例提供的处理流程,如图7所示,代码运行装置70包括:加载模块71、执行模块72;其中,加载模块71用于第一进程调用系统接口将预设代码加载至第二进程中,所述第一进程与所述第二进程相互隔离;执行模块72用于第二进程基于所述预设代码加载并运行软件开发工具包。
81.可选的,执行模块72包括加载单元721、运行单元722;加载单元721用于第二进程基于所述预设代码加载软件开发工具包;运行单元722用于响应于所述软件开发工具包的目标请求,基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能。
82.可选的,运行单元722还用于确定所述软件开发工具包具有所述目标请求对应的目标权限,则所述第二进程基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能。
83.可选的,运行单元722还用于确定所述第一进程不具有目标权限,则确定所述软件开发工具包不具有所述目标权限;或者确定所述第一进程具有目标权限,则根据预设权限管理信息查找所述目标权限的信息。
84.可选的,运行单元722还用于在确定所述软件开发工具包具有目标权限时,对所述软件开发工具包进行授权,使得所述软件开发工具包能够实现所述目标请求对应的功能。
85.可选的,执行模块72还包括撤销单元723,用于撤销所述软件开发工具包的目标权
限。
86.图7所示实施例的代码运行装置可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
87.图8为本公开实施例提供的电子设备的结构示意图。该电子设备可以是如上实施例所述的待升级设备。本公开实施例提供的电子设备可以执行代码运行方法实施例提供的处理流程,如图8所示,电子设备80包括:存储器81、处理器82、计算机程序和通讯接口83;其中,计算机程序存储在存储器81中,并被配置为由处理器82执行如上所述的代码运行方法。
88.另外,本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现上述实施例所述的代码运行方法。
89.此外,本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序或指令,该计算机程序或指令被处理器执行时实现如上所述的代码运行方法。
90.可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
91.附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
92.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
93.以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一
致的最宽的范围。
技术特征:
1.一种代码运行方法,其特征在于,所述方法包括:第一进程调用系统接口将预设代码加载至第二进程中,所述第一进程与所述第二进程相互隔离;第二进程基于所述预设代码加载并运行软件开发工具包。2.根据权利要求1所述的方法,其特征在于,所述第二进程基于所述预设代码加载并运行软件开发工具包,包括:第二进程基于所述预设代码加载软件开发工具包;响应于所述软件开发工具包的目标请求,基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能。3.根据权利要求2所述的方法,其特征在于,响应于所述软件开发工具包的目标请求,基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能,包括:确定所述软件开发工具包具有所述目标请求对应的目标权限,则所述第二进程基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能。4.根据权利要求3所述的方法,其特征在于,所述方法还包括:确定所述第一进程不具有目标权限,则确定所述软件开发工具包不具有所述目标权限;或者确定所述第一进程具有目标权限,则根据预设权限管理信息确查找所述目标权限的信息。5.根据权利要求3所述的方法,其特征在于,所述方法还包括:确定所述软件开发工具包具有目标权限,则对所述软件开发工具包进行授权,使得所述软件开发工具包能够实现所述目标请求对应的功能。6.根据权利要求2所述的方法,其特征在于,在基于所述预设代码通过调用所述软件开发工具包的预设接口实现所述目标请求对应的功能之后,所述方法还包括:撤销所述软件开发工具包的目标权限。7.一种代码运行装置,其特征在于,包括:加载模块,用于由第一进程调用系统接口将预设代码加载至第二进程中,所述第一进程与所述第二进程相互隔离;运行模块,用于由第二进程基于所述预设代码加载并运行软件开发工具包。8.一种电子设备,其特征在于,包括:存储器;处理器;以及计算机程序;其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现如权利要求1-6中任一项所述的方法。9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-6中任一项所述的方法。
技术总结
本公开涉及一种代码运行方法、装置、设备及计算机可读存储介质,该方法包括:第一进程调用系统接口将预设代码加载至第二进程中,所述第一进程与所述第二进程相互隔离;第二进程基于所述预设代码加载并运行软件开发工具包。本公开通过创建与当前进程相互隔离的第二进程,并将软件开发工具包加载至第二进程中进行运行,使得软件开发工具包作为独立运行的进程,并且与当前进程相互隔离,能够对软件开发工具包运行时的行为进行彻底管控,降低软件开发工具包的风险,保证用户设备及数据的安全。保证用户设备及数据的安全。保证用户设备及数据的安全。
技术研发人员:黄超华
受保护的技术使用者:珠海市魅族科技有限公司
技术研发日:2023.01.17
技术公布日:2023/7/22
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/