程序运行方法、装置、终端及可读介质与流程

文档序号:17289958发布日期:2019-04-03 03:52阅读:161来源:国知局
程序运行方法、装置、终端及可读介质与流程

本申请涉及信息安全领域,特别涉及一种程序运行方法、装置、终端及可读介质。



背景技术:

sdk(softwaredevelopmentkit,软件工具开发包)是一种用于建立应用软件时的开发工具的集合。通常,软件厂商将一些基本程序功能封装,并通过sdk向外提供api接口。

比如,软件厂商a将sdk提供给软件厂商b,软件厂商b可以基于sdk进行二次开发,开发出基于该sdk的宿主程序。在宿主程序启动后,终端将sdk有关的进程运行在宿主进程中,sdk对普通用户是不可见的。普通用户仅能观察到宿主进程的运行,并基于宿主进程使用宿主进程的各项功能。

由于sdk是运行在宿主进程中的,如果宿主程序是由恶意人员开发的,则通过宿主程序对sdk进行破解是较为容易的。比如,sdk会与服务器交互一些重要数据,宿主程序很容易监听到这些重要数据。



技术实现要素:

本发明实施例提供了一种程序运行方法、装置、终端及可读介质,解决现有技术的问题。所述技术方案如下:

第一方面,提供了一种程序运行方法,应用于安装有宿主程序的终端中,所述宿主程序是基于sdk进行二次开发的程序,所述方法包括:

当接收到程序启动信号时,所述宿主程序启动第一进程;

所述宿主程序通过所述第一进程启动所述sdk对应的第二进程,所述第二进程是独立于所述第一进程之外的进程;

当接收到功能使用信号时,所述宿主程序通过所述第一进程调用所述sdk提供的api接口;

所述第二进程根据所述调用从服务器获取目标数据;

所述第二进程根据所述目标数据向所述第一进程提供程序功能。

第二方面,提供了一种程序运行装置,应用于包括宿主程序模块的终端中,所述装置包括所述宿主程序模块和sdk模块,所述宿主程序模块是基于所述sdk模块进行二次开发的程序模块,所述宿主程序模块中运行有第一进程,所述sdk模块中运行有第二进程,所述第二进程独立于所述第一进程之外;

所述宿主程序模块,用于当接收到程序启动信号时,启动所述第一进程;通过所述第一进程启动所述第二进程;当接收到功能使用信号时,通过所述第一进程调用所述sdk提供的api接口;

所述sdk模块,用于通过所述第二进程根据所述调用从服务器获取目标数据;根据所述目标数据向所述第一进程提供程序功能。

第三方面,提供了一种终端,所述终端包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如第一方面所述的程序运行方法。

第四方面,提供了一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现如第一方面所述的程序运行方法。

本发明实施例提供的技术方案带来的有益效果是:

通过将sdk对应的第二进程独立于宿主对应的第一进程之外,解决了相关技术中由于sdk运行于宿主进程中,宿主程序能够较为容易地对sdk破解的技术问题,由于宿主程序只能通过调用sdk提供的api接口使用sdk的程序功能,而不能直接访问sdk对应的第二进程,因此宿主程序无法监听到sdk的运行情况以及sdk与服务器之间通信的数据包,提高了sdk的安全性。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请一个实施例提供的程序运行方法所涉及的实施环境的示意图;

图2是本申请一个实施例提供的程序运行方法的方法流程图;

图3是本申请一个实施例提供的宿主程序的框图;

图4是本申请一个实施例提供的宿主程序和sdk的交互示意图;

图5是本申请另一个实施例提供的程序运行方法的方法流程图;

图6是本申请另一个实施例提供的程序运行方法的方法流程图;

图7是本申请另一个实施例提供的程序运行方法的方法流程图;

图8是本申请一个实施例提供的程序运行装置的装置框图;

图9是本申请一个实施例提供的终端的结构框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

首先对本申请所涉及的若干个名词进行介绍:

sdk(softwaredevelopmentkit,软件工具开发包):是一种用于建立应用软件时的开发工具的集合。通常,软件厂商将一些基本程序功能封装,并通过sdk向外提供api函数接口。

宿主程序:是sdk被程序开发方二次开发后集成的程序,由于sdk内置于该程序中,因此该程序被形象的称之为宿主程序。

api接口(applicationprogramminginterface):是sdk预设的函数,用于向基于sdk的宿主程序提供访问sdk的程序功能的函数接口。

对称密钥:又称专用密钥加密,即发送和接收数据的双方使用相同的密钥对明文进行加密和解密运算。对称密钥加密算法主要包括:des(dataencryptionstandard,数据加密标准)、3des(tripledes,三重数据加密算法)、idea(internationaldataencryptionalgorithm,国际数据加密算法)、feal(fastdataenciphermentalgorithm,分组加密算法)、blowfish(对称密钥分组加密算法)等。

非对称加密密钥:包括一组公钥(publickey)和私钥(privatekey),公钥是指公开的密钥,不需要进行保密,解密方可以通过各种渠道获取;而私钥是指仅由加密方自身持有的密钥,需要进行保密。

socket接口:是一种api接口,对tcp/ip协议封装。

jce(javacryptographyextension):一种用于提供加密、密钥生成和协商功能的数据包,其可以提供对对称、不对称、块和流密码的加密支持。

guid(globallyuniqueidentifier,全局唯一标识符):是一种由算法生成的二进制长度为128位(也可能是其它位数)的数字标识符。guid主要用于在拥有多个节点、多台计算机的网络或系统中,唯一标识一台设备。在理想情况下,任何计算机和计算机集群都不会生成两个相同的guid。

root(最高运行权限):root用户是操作系统中具有最高权限的超级管理员,其具等同于操作系统的权限。

模拟器(simulator):又称仿真器,是指主要通过软件模拟硬件处理器的功能和指令系统的程序,使电子计算机或者其他终端(平板电脑,移动终端)能够运行其他终端上的软件。

请参考图1,其示出了本申请一个实施例提供的程序运行方法所涉及的实施环境的示意图,如图1所示,该实施环境包括:sdk提供方110、宿主程序开发方120、宿主程序发布平台130和终端140。sdk提供方110与宿主程序开发方120之间可以通过有线或无线网络进行连接,宿主程序开发方120与宿主程序发布平台130之间可以通过有线或无线网络进行连接。其中,sdk提供方110用于生成sdk,并将该sdk发送至宿主程序开发方120,sdk提供方可以是sdk提供商的服务器。宿主程序开发方120可以是移动电话、平板电脑、计算机等终端,也可以是工作站、服务器等。宿主程序发布平台130用于发布宿主程序,例如,该宿主程序发布平台130可以是苹果公司的应用平台applestore、谷歌公司的应用平台googleplay、腾讯公司的应用平台应用宝等。终端140用于从宿主程序发布平台130中下载宿主程序并运行该宿主程序,终端140可以是移动电话、平板电脑、计算机、个人数字助理等。

请参考图2,其示出了本申请一个实施例提供的程序运行方法的方法流程图。本实施例以该程序运行方法应用于如图1所示的终端140中为例,该方法包括:

在步骤201中,当接收到程序启动信号时,宿主程序启动第一进程。

当用户需要使用宿主程序时,用户点击宿主程序的图标,宿主程序接收用户点击图标产生的启动信号,启动第一进程。其中,第一进程是运行于宿主程序中,和sdk提供的程序功能相关的进程。

在步骤202中,宿主程序通过第一进程启动sdk对应的第二进程,第二进程是独立于第一进程之外的进程。

当第一进程启动后,第一进程启动sdk对应的第二进程,其中,第二进程是运行于sdk中,且独立于第一进程之外的进程。

在步骤203中,当接收到功能使用信号时,宿主程序通过第一进程调用sdk提供的api接口。

当用户需要使用sdk提供的程序功能时,点击宿主程序相关的程序功能图标,宿主程序接收用户点击程序功能图标产生的功能使用信号,通过第一进程调用sdk提供的api接口。其中,该程序功能图标是宿主程序中的某一个程序功能图标,该程序功能图标提供的程序功能,是基于sdk提供的程序功能,并不泛指宿主程序中的所有程序功能。

如图3所示,在本实施例中,sdk被封装起来向宿主程序开放api接口,sdk对应的第二进程独立地与服务器通信,宿主程序可通过对应的第一进程调用sdk提供的api接口获取sdk的相关程序功能。

例如,如图4所示,宿主程序是一款具备自动连接wi-fi的应用程序,其具备自动连接wi-fi的功能。该宿主程序可以采用jave语言编写,该宿主程序对应的第一进程可以是一个java进程,而sdk通过运行native进程可以提供自动连接wi-fi的功能,提供宿主程序的java进程和sdk的native进程之间的api接口可以是socket接口。可选的,api接口还包括一组jce数据包,用于提供加密、密钥生成和协商功能。

在步骤204中,第二进程根据调用从服务器获取目标数据。

sdk对应的第二进程根据第一进程的调用,从服务器获取目标数据,由于第二进程是独立于第一进程的之外的进程,因此宿主程序无法监听第二进程和服务器之间的数据交换。

例如,如图4所示,目标数据可以是无线路由器对应的wi-fi密码。宿主程序对应的java进程启动wi-fi列表扫描,通过socket接口调用native进程的指定wi-fi功能,sdk对应的native进程通过与服务器连接和通信,从服务器获得wi-fi密码,将该wi-fi密码通过map缓存,并通过该wi-fi密码连接上对应的无线路由器。其中,密码只出现并保存在native进程中,java进程无法访问和监听native进程。

在步骤205中,第二进程根据目标数据向第一进程提供程序功能。

sdk对应的第二进程通过从服务器获取的目标数据执行程序功能,宿主程序对应的第一进程通过从api接口获取到第二进程提供的程序功能,执行宿主程序对应的第一进程。

例如,如图4所示,native进程连接上wi-fi后,向java进程发送可供连接的无线路由器信息,java进程通过socket接口利用native进程自动连接到wi-fi密码对应的无线路由器,实现了自动连接wi-fi的功能。在实现了自动连接无线路由器功能后,native进程生成wificonfig文件通过binder(进程间通信)添加到操作系统中,java进程通过wificonfig文件监听wi-fi连接状态。

综上所述,本申请实施例中,通过将sdk对应的第二进程独立于宿主对应的第一进程之外,解决了相关技术中由于sdk运行于宿主进程中,宿主程序能够较为容易地对sdk破解的技术问题,由于宿主程序只能通过调用sdk提供的api接口使用sdk的程序功能,而不能直接访问sdk对应的第二进程,因此宿主程序无法监听到sdk的运行情况以及sdk与服务器之间通信的数据包,提高了sdk的安全性。

请参考图5,其示出了本申请另一个实施例提供的程序运行方法的方法流程图。本实施例以该程序运行方法应用于如图1所示的终端140中为例,该方法包括:

在步骤501中,当接收到程序启动信号时,宿主程序启动第一进程

当用户需要使用宿主程序时,用户点击宿主程序的图标,宿主程序接收用户点击图标产生的启动信号,启动第一进程。其中,第一进程是运行于宿主程序中,和sdk提供程序功能相关的进程。

在步骤502中,宿主程序对sdk的api接口进行初始化。

在宿主程序调用sdk的api接口之前,宿主程序首先需要对sdk的api接口进行初始化,在初始化的过程中,sdk中的一段代码运行在宿主程序对应的第一进程中,用于检测其运行环境是否存在安全隐患。

可选地,sdk通过第一进程检测运行环境是否存在安全隐患,包括步骤503至步骤505三个步骤中的至少一个步骤。本实施例以包括全部三个步骤来举例说明。

在步骤503中,sdk检测终端中当前帐号是否获取了最高运行权限。

sdk检测终端所对应的当前帐号是否获取了最高运行权限,即判断当前登录的系统帐户是否为root帐户,由于root帐户具有系统的最高权限,因此宿主系统可以绕过api接口直接访问并监听sdk的第二进程,从而具有安全隐患。

因此,在宿主程序对sdk的api接口进行初始化时,sdk需要检测当前帐号是否获取了最高运行权限,若检测结果为当前帐号获取了最高运行权限,则进入步骤506b。若检测结果为当前帐号没有获取最高运行权限,则进入步骤503,或进入步骤506a。

在一个可选的实施例中,由于获得了最高运行权限的终端会生成一个su二进制可执行文件,sdk通过检测终端是否具有su二进制可执行文件来判断当前帐号是否获得了最高运行权限。

在步骤504中,sdk检测终端是否为模拟器所虚拟的终端。

sdk检测终端是否为模拟器所虚拟的终端。由于模拟器所虚拟的终端可以绕过依赖硬件发挥作用的网络安全标准,例如,宿主程序可以绕过api直接访问并监听sdk的第二进程,从而具有安全隐患。

因此,在对api接口初始化时,sdk需要检测当前帐号是否为模拟器所虚拟的终端,若检测结果为当前终端是模拟器所虚拟的终端,则进入步骤506b;若检测结果为当前终端不是模拟器所虚拟的终端,则进入步骤505,或进入步骤506a。

在一个可选的实施例中,sdk通过调用终端的硬件部件判断终端是否为模拟器所虚拟的终端,比如调用传感器、摄像头、陀螺仪、蓝牙等终端的硬件部件,如果调用失败,则确定终端是模拟器所虚拟的终端;若调用成功,则确定终端是实体硬件。

在步骤505中,sdk检测宿主程序对应的第一进程是否被追踪。

sdk检测宿主程序对应的第一进程和/或sdk有关的进程是否被追踪,如果宿主程序对应的第一进程被追踪,则在第一进程调用api接口时,可能会造成信息泄露,具有安全隐患。若sdk检测到宿主程序对应的第一进程被追踪,则进入步骤505b;若sdk检测到宿主程序对应的第一进程没有被追踪,则进入步骤506a。

追踪程序strace常用来跟踪进程执行时的系统调用和所接收的信号。在linux系统或android系统中,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如接收网络数据等)时,必须由用户模式切换至内核模式,通过系统调用访问硬件设备,strace程序可以跟踪到一个进程产生的系统调用,包括参数、返回值、执行消耗的时间等,因此,当第一进程被追踪时,strace程序可以绕过api接口获取sdk中保存的信息。

在一个可选的实施例中,sdk通过检测终端是否具有追踪信息判断宿主程序对应的第一进程是否被追踪,若具有追踪信息,则确定宿主程序对应的第一进程被追踪;若不具有追踪信息,则确定宿主程序对应的第一进程没有被追踪。

在步骤506a中,sdk通过第一进程启动第二进程。

在确定当前运行的环境没有安全隐患之后,sdk通过第一进程启动第二进程。

在步骤506b中,api接口初始化失败。

在宿主程序对sdk的api接口进行初始化后满足以下任意一条,则确定api接口初始化失败:当前帐号获取了最高运行权限,终端为模拟器所虚拟的终端,或,宿主程序对应的第一进程被追踪。

若api接口初始化失败,sdk向宿主程序返回初始化失败信息,宿主程序对应的第一进程不能调用sdk的api接口。

在步骤507中,当接收到功能使用信号时,宿主程序通过第一进程调用sdk提供的api接口。

当用户需要使用sdk提供的程序功能时,点击宿主程序相关的程序功能图标,宿主程序接收用户点击程序功能图标产生的功能使用信号,通过第一进程调用sdk提供的api接口。其中,该程序功能图标是宿主程序中的某一个程序功能图标,该程序功能图标提供的程序功能,是基于sdk提供的程序功能,并不泛指宿主程序中的所有程序功能。

在步骤508中,第二进程根据调用从服务器获取目标数据,第二进程是独立于第一进程之外的进程。

sdk对应的第二进程根据第一进程的调用,从服务器获取目标数据。可选地,目标数据与sdk提供的程序功能有关,目标数据是机密数据。其中,该第二进程是独立于第一进程的之外的进程。

在步骤509中,第二进程根据目标数据向第一进程提供程序功能。

sdk对应的第二进程通过从服务器获取的目标数据执行程序功能,宿主程序对应的第一进程通过从api接口获取到第二进程提供的程序功能,执行宿主程序对应的第一进程。

示例性的,终端的操作系统是android系统,sdk对应的第二进程是native进程,该native进程收到操作系统原生的隔离保护和加固保护,宿主进程所对应的第一进程无法访问或监听到有关第二进程的运行情况。

综上所述,本申请实施例中,通过将sdk对应的第二进程独立于宿主对应的第一进程之外,解决了相关技术中由于sdk运行于宿主进程中,宿主程序能够较为容易地对sdk破解的技术问题,由于宿主程序只能通过调用sdk提供的api接口使用sdk的程序功能,而不能直接访问sdk对应的第二进程,因此宿主程序无法监听到sdk的运行情况以及sdk与服务器之间通信的数据包,提高了sdk的安全性。

进一步的,本申请实施例中,通过在宿主程序对应的第一进程调用api接口之前对api接口初始化,由sdk通过宿主程序对应的第一进程检测api接口的运行环境是否具有安全隐患,解决了在具有安全隐患的运行环境下,宿主程序调用sdk的api接口所导致的安全隐患问题,进一步提高了sdk的安全性。

在一个可选的实施例中,sdk对应的第二进程与服务器进行通信时,可以通过“非对称加密和对称加密”结合的方式进行。其中,非对称加密用于sdk对应的第二进程与服务器之间协商加密密钥,对称加密用于对sdk对应的第二进程与服务器之间的会话数据包进行加密。

请参考图6,其示出了本申请另一个实施例提供的程序运行方法的方法流程图。本实施例以该程序运行方法应用于如图1所示的终端140中为例,该方法包括:

在步骤601中,当接收到程序启动信号时,宿主程序启动第一进程

当用户需要使用宿主程序时,用户点击宿主程序的图标,宿主程序接收用户点击图标产生的启动信号,启动第一进程。其中,第一进程是运行于宿主程序中,和sdk提供程序功能相关的进程。

在步骤602中,宿主程序通过第一进程启动sdk对应的第二进程

当第一进程启动后,第一进程启动sdk对应的第二进程,其中,第二进程是运行于sdk中,且独立于第一进程之外的进程。

在步骤603中,当接收到功能使用信号时,宿主程序通过第一进程调用sdk提供的api接口。

当用户需要使用sdk提供的程序功能时,点击宿主程序相关的程序功能图标,宿主程序接收用户点击程序功能图标产生的功能使用信号,通过第一进程调用sdk提供的api接口。其中,程序功能图标是宿主程序中的某一个程序功能图标,该程序功能图标提供的程序功能,是基于sdk提供的程序功能,并不泛指宿主程序中的所有程序功能。

在步骤604中,第二进程检测对称加密密钥是否存在。

在sdk对应的第二进程根据调用从服务器获取目标数据之前,第二进程需要对sdk和服务器之间的对称加密密钥进行检测。

首先,第二进程检测sdk中是否存在对称加密密钥,若存在,则进入步骤605或步骤612;若不存在,则进入步骤606。

在步骤605中,第二进程检测对称加密密钥的存在时长是否达到预设有效时长。

通常来说,对称加密密钥使用时间太长会给攻击者增加破解的机会。为了保证安全,对称加密密钥具有一定的时效,如果超过时效,则对称密钥会失效,此时需要重新生成对称密钥。

因此,第二进程检测sdk中的对称加密密钥存在的时长是否达到预设的有效时长;若是,则进入步骤606;若否,则进入步骤612。

在步骤606中,第二进程生成随机数。

若第二进程在sdk中没有检测到对称加密密钥,和/或,第二进程检测到sdk中的对称加密密钥达到预设有效时长,则生成一个随机数,该随机数将作为本次会话中的对称加密密钥。

在步骤607中,第二进程通过非对称加密中的私钥对随机数进行加密,得到第一加密结果。

第二进程通过sdk中非对称加密中的私钥对随机数加密,得到第一加密结果。本申请实施例中,sdk向服务器发送的信息通过sdk中非对称加密中的私钥加密,通过存储在服务器端的非对称加密中的公钥解密。在宿主程序开发方从sdk提供方获得sdk时,sdk中已包含非对称加密中的私钥,而非对称加密中的公钥存储在服务器中。

非对称密钥包括一组公钥和私钥。公钥是指公开的密钥,不需要进行保密,解密方可以通过各种渠道获取;而私钥是指仅由加密方自身持有的密钥,需要进行保密。一个公钥对应一个私钥;公钥和私钥共同组成了一种非对称加密方式。非对称加密方式是指用公钥加密的信息只能用对应的私钥进行解密,使用私钥加密的信息也只能用对应的公钥进行解密。也即,加密和解密使用的密钥是不相同的。

比如:假定a要向b发送加密信息,则a首先要获取与b对应的公钥,然后使用与b对应的公钥对需要发送的信息进行加密后,将加密后的信息发送给b,b在接收到a发送的加密的信息后,必须使用与b对应的私钥才可以对加密的信息进行解密,获取加密的信息中的内容。由于与b对应的私钥只有b自己拥有,因此a发送的加密的信息是安全的。

在步骤608中,第二进程将第一加密结果发送给服务器。

第二进程通过sdk中非对称加密中的私钥对随机数加密得到第一加密结果后,将第一加密结果通过有线或无线网络发送至服务器。

服务器获得第一加密结果后,通过存储在服务器中的非对称加密中的公钥对第一加密结果解密,得到解密结果。并根据解密结果中的随机数作为待验证密钥,并将待验证密钥和本次会话的会话标识通过非对称加密中的公钥加密后得到第二加密结果。

其中,第二进程和服务器的每次会话对应一个会话标识和一个对称密钥。

在步骤609中,第二进程接收服务器发送的第二加密结果。

服务器将待验证密钥和会话标识通过非对称加密中的公钥加密后,得到第二加密结果后,将第二加密结果通过有线或无线网络发送至sdk对应的第二进程。

在步骤610中,第二进程通过非对称加密私钥对第二加密结果进行解密,得到会话标识和待验证密钥。

sdk对应的第二进程通过非对称加密中的私钥对第二加密结果进行解密,获得会话标识和待验证密钥。

在步骤611中,第二进程在确定随机数和待验证密钥匹配时,将待验证密钥确定为本次会话的对称加密密钥。

sdk对应的第二进程在获得待验证密钥后,确定待验证密钥是否和随机数匹配(也即两者是否相同),若待验证密钥和随机数匹配,则将该待验证密钥作为本次会话的对称加密密钥。

在步骤612中,第二进程检测终端中是否存在guid。

第二进程检测服务器中是否存在终端对应的guid。其中,guid是服务器通过算法生成的终端对应的唯一标识,服务器端通过guid识别终端同sdk建立会话。若第二进程没有检测到终端对应的guid,则进入步骤613;若第二进程检测到终端对应的guid,则进入步骤614。

在步骤613中,第二进程将终端的设备信息发送至服务器。

若终端中不存在guid,第二进程将设备信息发送至服务器,服务器根据设备信息注册终端的guid,其中,设备信息包括但不限于:设备标识、操作系统类型、操作系统版本号、当前上网环境的类型、当前所在地理位置中的至少一种。

在步骤614中,第二进程通过对称加密密钥加密后的会话连接,从服务器获取目标数据。

第二进程获得本次会话的对称加密密钥后,向服务器发送请求,该请求用于向服务器请求发送目标数据,服务器接收第二进程的请求后,通过对称加密密钥将目标数据加密后发送至sdk对应的第二进程。

在步骤615中,第二进程根据目标数据向第一进程提供程序功能。

第二进程获得对称加密密钥加密后的目标数据后,通过对称加密密钥对加密后的目标数据进行解密,获得目标数据,通过目标数据向第一进程提供程序功能。

例如,目标数据可以是无线路由器对应的wi-fi密码。第二进程向服务器发送请求,该请求是请求服务器发送无线路由器对应的wi-fi密码,服务器接收第二进程的请求,通过对称加密密钥将wi-fi密码加密后发送给第二进程,第二进程获得加密后的wi-fi密码后通过对称加密密钥将加密后的wi-fi密码解密,得到无线路由器对应的wi-fi密码,并通过该wi-fi密码和对应的无线路由器连接,第一进程通过api接口由sdk对应的第二进程实现自动和无线路由器连接的功能。

综上所述,本申请实施例中,通过将sdk对应的第二进程独立于宿主对应的第一进程之外,解决了相关技术中由于sdk运行于宿主进程中,宿主程序能够较为容易地对sdk破解的技术问题,由于宿主程序只能通过调用sdk提供的api接口使用sdk的程序功能,而不能直接访问sdk对应的第二进程,因此宿主程序无法监听到sdk的运行情况以及sdk与服务器之间通信的数据包,提高了sdk的安全性。

进一步的,本申请实施例中,通过将非对称加密算法与对称加密算法结合,每隔一段时间将非对称加密用于sdk对应的第二进程与服务器之间协商加密密钥,对称加密用于对sdk对应的第二进程与服务器之间的会话数据包进行加密,解决了每次会话仅通过非对称加密所导致的计算量大问题,或,每次会话仅通过对称加密所导致的安全性能低的问题,在计算量小的基础上非对称加密私钥,提高了sdk对应的第二进程与服务器之间会话的安全性。

请参考图7,其示出了本申请另一个实施例提供的程序运行方法的方法流程图。本实施例以该程序运行方法应用于如图1所示的终端140中为例,该方法包括:

在步骤701中,当接收到程序启动信号时,宿主程序启动第一进程

当用户需要使用宿主程序时,用户点击宿主程序的图标,宿主程序接收用户点击图标产生的启动信号,启动第一进程。其中,第一进程是运行于宿主程序中,和sdk提供程序功能相关的进程。

在步骤702中,宿主程序对sdk的api接口进行初始化。在宿主程序调用sdk的api接口之前,宿主程序首先需要对sdk的api接口进行初始化,在初始化的过程中,sdk中的一段代码运行在宿主程序对应的第一进程中,用于检测其运行环境是否存在安全隐患。

可选地,sdk通过第一进程检测运行环境是否存在安全隐患,包括步骤703至步骤705三个步骤中的至少一个步骤。本实施例以包括全部三个步骤来举例说明。

在步骤703中,sdk检测终端中当前帐号是否获取了最高运行权限。

sdk检测终端所对应的当前帐号是否获取了最高运行权限,即判断当前登录的系统帐户是否为root帐户,由于root帐户具有系统的最高权限,因此宿主系统可以绕过api接口直接访问并监听sdk的第二进程,从而具有安全隐患。

因此,在宿主程序对sdk的api接口进行初始化时,sdk需要检测当前帐号是否获取了最高运行权限,若检测结果为当前帐号获取了最高运行权限,则进入步骤706b;若检测结果为当前帐号没有获取最高运行权限,则进入步骤704,或进入步骤706a。

在一个可选的实施例中,由于获得了最高运行权限的终端会生成一个su二进制可执行文件,sdk通过检测终端是否具有su二进制可执行文件来判断当前帐号是否获得了最高运行权限。

在步骤704中,sdk检测终端是否为模拟器所虚拟的终端。

sdk检测终端是否为模拟器所虚拟的终端。由于模拟器所虚拟的终端可以绕过依赖硬件发挥作用的网络安全标准,例如,宿主程序可以绕过api直接访问并监听sdk的第二进程,从而具有安全隐患。

因此,在对api接口初始化时,sdk需要检测当前终端是否为模拟器所虚拟的终端,若检测结果为当前终端是模拟器所虚拟的终端,则进入步骤706b;若检测结果为当前终端不是模拟器所虚拟的终端,则进入步骤705,或进入步骤706a。

在一个可选的实施例中,sdk通过调用终端的硬件部件判断终端是否为模拟器所虚拟的终端,比如调用传感器、摄像头、陀螺仪、蓝牙等终端的硬件部件,如果调用失败,则确定终端是模拟器所虚拟的终端;若调用成功,则确定终端是实体硬件。

在步骤705中,sdk检测宿主程序对应的第一进程是否被追踪。

sdk检测宿主程序对应的第一进程和/或sdk有关的进程是否被追踪,如果宿主程序对应的第一进程被追踪,则在第一进程调用api接口时,可能会造成信息泄露,具有安全隐患。若sdk检测到宿主程序对应的第一进程被追踪,则进入步骤706b;若sdk检测到宿主程序对应的第一进程没有被追踪,则进入步骤706a。

追踪程序strace常用来跟踪进程执行时的系统调用和所接收的信号。在linux系统或android系统中,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如接收网络数据等)时,必须由用户模式切换至内核模式,通过系统调用访问硬件设备,strace程序可以跟踪到一个进程产生的系统调用,包括参数、返回值、执行消耗的时间等,因此,当第一进程被追踪时,strace程序可以绕过api接口获取sdk中保存的信息。

在一个可选的实施例中,sdk通过检测终端是否具有追踪信息判断宿主程序对应的第一进程是否被追踪,若具有追踪信息,则确定宿主程序对应的第一进程被追踪,若不具有追踪信息,则确定宿主程序对应的第一进程没有被追踪。

在步骤706a中,sdk通过第一进程启动第二进程。

在确定当前运行的环境没有安全隐患之后,sdk通过第一进程启动第二进程。

在步骤706b中,api接口初始化失败。

在宿主程序对sdk的api接口进行初始化后满足以下任意一条,则确定api接口初始化失败:当前帐号获取了最高运行权限,终端为模拟器所虚拟的终端,或,宿主程序对应的第一进程被追踪。

若api接口初始化失败,sdk向宿主程序返回初始化失败信息,宿主程序对应的第一进程不能调用sdk的api接口。

在步骤707中,宿主程序对应的第一进程调用sdk提供的api接口。

当用户需要使用sdk提供的程序功能时,点击宿主程序相关的程序功能图标,宿主程序接收用户点击程序功能图标产生的功能使用信号,通过第一进程调用sdk提供的api接口。其中,该程序功能图标是宿主程序中的某一个程序功能图标,该程序功能图标提供的程序功能,是基于sdk提供的程序功能,并不泛指宿主程序中的所有程序功能。

在步骤708中,第二进程检测对称加密密钥是否存在。

在sdk对应的第二进程根据调用从服务器获取目标数据之前,需要对sdk和服务器之间的对称加密秘钥进行检测。首先,第二进程检测sdk中是否存在对称加密密钥,若存在,则进入步骤709或步骤711;若不存在,则进入步骤710。

在步骤709中,第二进程检测对称加密密钥的存在时长是否达到预设有效时长。

通常来说,对称加密密钥使用时间太长会给攻击者增加破解的机会。为了保证安全,通常对称加密密钥具有一定的时效,如果超过时效,则对称密钥会失效,需要重新生成对称密钥。

因此,第二进程检测sdk中的对称加密密钥存在的时长是否达到预设的有效时长;若是,则进入步骤710;若否,则进入步骤711。

在步骤710中,第二进程通过非对称加密私钥与服务器协商本次会话的对称加密密钥。

若第二进程在sdk中没有检测到对称加密密钥,和/或,第二进程检测到sdk中的对称加密密钥达到预设有效时长,则生成一个随机数,该随机数将作为本次会话中的对称加密密钥。

第二进程通过sdk中非对称加密中的私钥对随机数加密,得到第一加密结果。

其中,第二进程通过sdk中非对称加密中的私钥对随机数加密,得到第一加密结果。本申请实施例中,sdk和服务器之间的通信通过sdk中非对称加密中的私钥加密,通过存储在服务器端的非对称加密中的公钥解密。在宿主程序开发方从sdk提供方获得sdk时,sdk中已包含非对称加密中的私钥,而非对称加密中的公钥存储在服务器中。

第二进程通过sdk中非对称加密中的私钥对随机数加密得到第一加密结果后,将第一加密结果通过有线或无线网络发送至服务器。

服务器获得第一加密结果后,通过存储在服务器中非对称加密中的公钥对第一加密结果解密,得到解密结果。并根据解密结果中的随机数作为待验证密钥,并将待验证密钥和本次会话标识通过非对称加密中的公钥加密后得到第二加密结果。

服务器将待验证密钥和会话标识通过非对称加密中的公钥加密后,得到第二加密结果后,将第二加密结果通过有线或无线网络发送至sdk对应的第二进程。

sdk对应的第二进程通过非对称加密中的私钥对第二加密结果进行解密,获得会话标识和待验证密钥。

sdk对应的第二进程在获得待验证密钥后,确定待验证密钥是否和随机数匹配(也即两者是否相同),若待验证密钥和随机数匹配,则将该待验证密钥作为本次会话的对称加密密钥。

在一个可选的实施例中,第二进程检测终端中是否存在guid,若第二进程没有检测到终端对应的guid,则将设备信息发送至服务器,服务器根据设备信息注册终端的guid,其中,设备信息包括但不限于:设备标识、操作系统类型、操作系统版本号、当前上网环境的类型、当前所在地理位置中的至少一种;若第二进程检测到终端对应的guid,则进入步骤711。

在步骤711中,第二进程通过对称加密密钥加密后的会话连接,从服务器获取目标数据。

第二进程获得本次会话的对称加密密钥后,向服务器发送请求,该请求用于向服务器请求发送目标数据,服务器接收第二进程的请求后,通过对称加密密钥将目标数据加密后发送至sdk对应的第二进程。

在步骤712中,第二进程根据目标数据向第一进程提供程序功能。

第二进程获得对称加密密钥加密后的目标数据后,通过对称加密密钥对加密后的目标数据进行解密,获得目标数据,通过目标数据向第一进程提供程序功能。

综上所述,本申请实施例中,通过将sdk对应的第二进程独立于宿主对应的第一进程之外,解决了相关技术中由于sdk运行于宿主进程中,宿主程序能够较为容易地对sdk破解的技术问题,由于宿主程序只能通过调用sdk提供的api接口使用sdk的程序功能,而不能直接访问sdk对应的第二进程,因此宿主程序无法监听到sdk的运行情况以及sdk与服务器之间通信的数据包,提高了sdk的安全性

进一步的,本申请实施例中,通过在宿主程序对应的第一进程调用api接口之前对api接口初始化,由sdk通过宿主程序对应的第一进程检测api接口的运行环境是否具有安全隐患,解决了在具有安全隐患的运行环境下,宿主程序调用sdk的api接口所导致的安全隐患问题,进一步提高了sdk的安全性。

进一步的,本申请实施例中,通过将非对称加密算法与对称加密算法结合,每隔一段时间将非对称加密用于sdk对应的第二进程与服务器之间协商加密密钥,对称加密用于对sdk对应的第二进程与服务器之间的会话数据包进行加密,解决了每次会话仅通过非对称加密所导致的计算量大问题,或,每次会话仅通过对称加密所导致的安全性能低的问题,在计算量小的基础上,提高了sdk对应的第二进程与服务器之间会话的安全性。

请参考图8,其示出了本申请另一个实施例提供的程序运行装置的装置框图。本实施例以该程序运行装置应用于如图1所示的终端140中为例,该装置包括宿主程序模块801和sdk模块802,宿主程序模块801中运行有第一进程,sdk模块中运行有第二进程,其中,宿主程序模块801是基于sdk模块802进行二次开发的程序模块。

宿主程序模块801,用于当接收到程序启动信号时,启动第一进程;通过第一进程启动第二进程;当接收到功能使用信号时,通过第一进程调用sdk模块提供的api接口;

sdk模块802,用于通过第二进程根据调用从服务器获取目标数据;根据目标数据向第一进程提供程序功能。

在一个可选的实施例中,宿主程序模块801还用于:

在启动后对sdk模块802的api接口进行初始化;

sdk模块802,还用于当宿主程序模块801对sdk模块802的api接口进行初始化时,通过第一进程检测终端中的运行环境是否存在安全隐患;当运行环境不存在安全隐患时,启动第二进程。

在一个可选的实施例中,sdk模块802还用于,通过第一进程检测终端中当前帐号是否获取了最高运行权限;

和/或;

sdk模块802还用于,通过第一进程检测终端是否为模拟器所虚拟的终端;

和/或;

sdk模块802还用于,通过第一进程检测宿主程序对应的第一进程是否被追踪。

在一个可选的实施例中,sdk模块802还用于:

通过第二进程通过非对称加密私钥与服务器协商本次会话的对称加密密钥;

通过第二进程通过对称加密密钥加密后的会话连接,从服务器获取目标数据。

在一个可选的实施例中,sdk模块802还用于:

通过第二进程生成随机数;

通过第二进程通过非对称加密私钥对随机数进行加密,得到第一加密结果;

通过第二进程将第一加密结果发送给服务器;

通过第二进程接收服务器发送的第二加密结果;

通过第二进程通过非对称加密私钥对第二加密过程进行解密,得到会话标识和待验证密钥;

通过第二进程在确定随机数和待验证密钥匹配时,将待验证密钥确定为本次会话的对称加密密钥。

在一个可选的实施例中,sdk模块802还用于:

通过第二进程在对称加密密钥的存在时长达到预设有效时长时,重新通过非对称加密私钥与服务器协商下一个对称加密密钥。

请参见图9,其示出了本发明一个实施例提供的终端的结构框图。该终端包括:处理器901、存储器902以及网络接口903。

网络接口903通过总线或其它方式与处理器901相连,用于接收服务器发送的目标数据或第二加密结果,或,用于向服务器发送第一加密结果。

处理器901可以是中央处理器(英文:centralprocessingunit,cpu),网络处理器(英文:networkprocessor,np)或者cpu和np的组合。处理器801还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(英文:application-specificintegratedcircuit,asic),可编程逻辑器件(英文:programmablelogicdevice,pld)或其组合。上述pld可以是复杂可编程逻辑器件(英文:complexprogrammablelogicdevice,cpld),现场可编程逻辑门阵列(英文:field-programmablegatearray,fpga),通用阵列逻辑(英文:genericarraylogic,gal)或其任意组合。

存储器902通过总线或其它方式与处理器901相连,存储器902中存储有至少一条指令、至少一段程序、代码集或指令集,上述至少一条指令、至少一段程序、代码集或指令集由处理器901加载并执行以实现如图2、图5、图6或图7的程序运行方法。存储器902可以为易失性存储器(英文:volatilememory),非易失性存储器(英文:non-volatilememory)或者它们的组合。易失性存储器可以为随机存取存储器(英文:random-accessmemory,ram),例如静态随机存取存储器(英文:staticrandomaccessmemory,sram),动态随机存取存储器(英文:dynamicrandomaccessmemory,dram)。非易失性存储器可以为只读存储器(英文:readonlymemoryimage,rom),例如可编程只读存储器(英文:programmablereadonlymemory,prom),可擦除可编程只读存储器(英文:erasableprogrammablereadonlymemory,eprom),电可擦除可编程只读存储器(英文:electricallyerasableprogrammableread-onlymemory,eeprom)。非易失性存储器也可以为快闪存储器(英文:flashmemory),磁存储器,例如磁带(英文:magnetictape),软盘(英文:floppydisk),硬盘。非易失性存储器也可以为光盘。

本申请实施例还提供了一种计算机可读存储介质,该存储介质中一种计算机可读存储介质,存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现如图2、图5、图6或图7所示的程序运行方法,可选地,该计算机可读存储介质包括高速存取存储器、非易失性存储器。

应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

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