CN109902500B - 一种通过链接库实现业务调用数据安全的方法及系统 - Google Patents
一种通过链接库实现业务调用数据安全的方法及系统 Download PDFInfo
- Publication number
- CN109902500B CN109902500B CN201910202495.9A CN201910202495A CN109902500B CN 109902500 B CN109902500 B CN 109902500B CN 201910202495 A CN201910202495 A CN 201910202495A CN 109902500 B CN109902500 B CN 109902500B
- Authority
- CN
- China
- Prior art keywords
- external
- calling
- logic
- environment
- link library
- 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.)
- Active
Links
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明实施例提供了一种通过链接库实现业务调用数据安全的方法及系统,所述方法包括:将业务关键逻辑封装到链接库中;提供外部调用所述业务关键逻辑的入口,对外部调用请求进行校验;如果所述校验通过,则调用所述业务关键逻辑执行相应数据处理;对所述业务关键逻辑执行的数据处理过程进行安全加密;返回经过所述安全加密的调用结果。由此,使得业务发布代码和数据交互的安全性得到显著的提高,从本质上解决业务调用中代码的安全问题。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种通过链接库实现业务调用数据安全的方法及系统。
背景技术
现阶段在各种互联网业务开发的过程中,应用的数据安全,尤其是发布代码的安全、数据存储交互的安全,以及数据流通性的安全,一直是亟待解决的问题,而大多数互联网业务调用中面对的发布代码安全则是数据安全的基础。现有技术中在代码发布过程中采用的安全手段一般使用的技术是发布代码混淆,比如JavaScript的混淆、Android开发中Java代码的混淆等,这种方式的缺陷和不足显而易见,因为发布代码混淆只是增加了一定程度上业务调用中阅读代码的难度,本质上无法解决业务调用中代码的安全性。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的通过链接库实现业务调用数据安全的方法及系统。
第一方面,本发明实施例提供一种通过链接库实现业务调用数据安全的方法,包括:将业务关键逻辑封装到链接库中;接收外部调用所述业务关键逻辑的请求,通过预置的用于外部调用所述业务关键逻辑的入口,对所述请求进行校验;如果所述外部调用所述业务关键逻辑的请求通过校验,则调用所述业务关键逻辑执行相应数据处理;对所述业务关键逻辑执行的数据处理过程进行安全加密;将所述数据处理过程中经过所述安全加密的调用结果返回外部。
优选地,将业务关键逻辑封装到链接库中,进一步为,在链接库配置过程中,预先将业务关键逻辑写入到所述链接库中进行封装。
优选地,接收外部调用所述业务关键逻辑的请求,通过预置的用于外部调用所述业务关键逻辑的入口,对所述请求进行校验,进一步包括:所述外部调用所述业务关键逻辑的请求为外部调用方通过所述链接库提供的入口调用所述业务关键逻辑;所述链接库依据设定校验逻辑逐项对所述外部调用请求进行校验。
优选地,所述校验逻辑进一步包括:外部调用方环境检查,其包括:检查外部调用方环境是否为debug或re lease环境、动态调试环境、模拟器环境、设备root环境,和/或安装逆向工具的设备环境。
优选地,所述校验对应检查外部调用方环境是否为debug或re lease环境,进一步包括:读取所述外部调用方应用程式中相应debug标识字段值是否为 true,如果所述标识字段值为true,则表示所述外部调用方为debug环境;当所述外部调用方为debug环境时,则校验失败。
优选地,所述校验对应检查外部调用方环境是否为动态调试环境,进一步包括:设置单独的动态调试策略子线程,定时检查所述外部调用方的调试进程是否命中预设的动态调试策略;如果所述外部调用方的调试进程命中预设的动态调试策略,则校验失败。
优选地,所述校验对应检查外部调用方环境是否为模拟器环境,进一步包括:判断所述外部调用方的硬件信息为模拟器或真机;如果所述外部调用方的硬件信息为模拟器,则校验失败。
优选地,所述校验对应检查外部调用方环境是否为设备root环境,进一步包括:检查所述外部调用方系统是否支持su指令或检查所述外部调用方系统root特征;如果所述外部调用方系统支持su指令,切换到root环境,则校验失败;和/或如果所述外部调用方系统符合root特征,则校验失败。
优选地,所述校验对应检查外部调用方环境是否为安装逆向工具的设备环境,进一步包括:判断所述外部调用方存储的Hook信息是否含有逆向敏感特征;如果含有逆向敏感特征,则则校验失败。
优选地,所述校验逻辑包括:外部调用方身份检查,包括:校验对应检查外部调用安装包的证书是否正确、外部调用程序入口类否正确,外部调用程序中是否有预埋特征标识。
优选地,所述校验逻辑包括:非法调用检查,包括:校验对应检查调用逻辑的顺序是否正确,错误调用的次数是否超过阈值。
优选地,对所述业务关键逻辑执行的数据处理过程进行安全加密,进一步包括:对所述业务关键逻辑执行的数据处理过程中用到的字符串进行安全加密,阻止外部调用方对链接库的静态分析;对所述业务关键逻辑执行的数据处理过程所得到的结果中需要返回外部的调用结果进行安全加密。
优选地,返回经过所述安全加密的调用结果,进一步包括:使用对称密钥或非对称密钥,将调用结果进行安全加密,返回给外部调用方。
优选地,所述链接库包括静态链接库和/或动态链接库。
第二方面,本发明实施例提供一种通过链接库实现业务调用数据安全的系统,包括:封装单元,用于将业务关键逻辑封装到链接库中;校验单元,用于接收外部调用所述业务关键逻辑的请求,通过预置的用于外部调用所述业务关键逻辑的入口,对所述请求进行校验;处理单元,用于如果所述校验单元通过所述校验,则调用所述业务关键逻辑执行相应数据处理;加密单元,用于对所述业务关键逻辑执行的数据处理过程进行安全加密;结果返回单元,用于将所述数据处理过程中经过所述安全加密的调用结果返回外部。
优选地,所述封装单元,进一步用于,在链接库配置过程中,预先将业务关键逻辑写入到所述链接库中进行封装。
优选地,所述校验单元,进一步用于,提供外部调用方调用所述业务关键逻辑的链接库入口;依据设定校验逻辑逐项对所述外部调用请求进行校验。
优选地,所述校验逻辑包括外部调用方环境检查,所述校验单元进一步用于检查外部调用方环境是否为debug或re lease环境、动态调试环境、模拟器环境、设备root环境,和/或安装逆向工具的设备环境。
优选地,所述校验单元,进一步用于,读取所述外部调用方应用程式中相应debug标识字段值是否为true,如果所述标识字段值为true,则表示所述外部调用方为debug环境;当所述外部调用方为debug环境时,则校验失败。
优选地,所述校验单元,进一步用于,设置单独的动态调试策略子线程,定时检查所述外部调用方的调试进程是否命中预设的动态调试策略;如果所述外部调用方的调试进程命中预设的动态调试策略,则校验失败。
优选地,所述校验单元,进一步用于,判断所述外部调用方的硬件信息为模拟器或真机;如果所述外部调用方的硬件信息为模拟器,则校验失败。
优选地,所述校验单元,进一步用于,检查所述外部调用方系统是否支持su指令或检查所述外部调用方系统root特征;如果所述外部调用方系统支持su指令,切换到root环境,则校验失败;和/或如果所述外部调用方系统符合root特征,则校验失败。
优选地,所述校验单元,进一步用于,判断所述外部调用方存储的Hook 信息是否含有逆向敏感特征;如果含有逆向敏感特征,则则校验失败。
优选地,所述校验逻辑包括外部调用方身份检查,所述校验单元,进一步用于检查外部调用安装包的证书是否正确、外部调用程序入口类否正确,和/或外部调用程序中是否有预埋特征标识。
优选地,所述校验逻辑包括非法调用检查,所述校验单元进一步用于检查调用逻辑的顺序是否正确,和/或错误调用的次数是否超过阈值。
优选地,所述加密单元,进一步用于,对所述业务关键逻辑执行的数据处理过程中用到的字符串进行安全加密,阻止外部调用方对链接库的静态分析;对所述业务关键逻辑执行的数据处理过程所得到的结果中需要返回外部的调用结果进行安全加密。
优选地,所述结果返回单元,进一步用于,使用对称密钥或非对称密钥,将调用结果进行安全加密,返回给外部调用方。
优选地,所述链接库包括静态链接库和/或动态链接库。
第三方面,本发明实施例提供一种服务器,包括处理器和存储器:所述存储器用于存储上述任一项所述方法的程序;所述处理器被配置为用于执行所述存储器中存储的程序实现上述任一项所述方法的步骤。
第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项所述方法的步骤。
本发明实施例上述一个或多个技术方案,至少具有如下一种或多种技术效果:
在实施本发明实施例的技术方案中,通过利用链接库本身二进制代码阅读性差、汇编指令与机器硬件相关同时复杂晦涩等特性,将业务关键逻辑预先封装在链接库中,加上调用校验逻辑及加密逻辑,使得业务发布代码和数据交互的安全性得到显著的提高,从而本质上解决现有技术中业务数据容易被破解或篡改的问题。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本发明的方案的一个应用场景整体框图;
图2为本发明第一实施例中的一种通过链接库实现业务调用数据安全的方法的流程图;
图3为本发明第二实施例中的一种一种通过链接库实现业务调用数据安全的方法实例示意图;
图4为本发明第三实施例中的一种通过链接库实现业务调用数据安全的系统框图;
图5为本发明实施例提供的技术方案相关的服务器组成结构框图。
具体实施方式
下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细的说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互组合。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
实施例
请参考图1,本发明的技术方案涉及的一个实施例的应用场景整体框图。整体设计分为外部调用和链接库两部分,上层代码由外部调用方提供,将需要保护的业务关键逻辑及相关数据放到链接库中,这样外部调用方通过上层代码需要调用链接库中的业务关键逻辑时需要先通过调用校验,然后通过校验后才允许调用业务关键逻辑,再对处理的数据进行安全加密,与服务端数据进行交互,或者存储到本地。进一步地,所述链接库可以包括静态链接库和/或动态链接库,尤其可以采用C/C++链接库的方式进行实现。另外,上层代码可以是C/C++语言上层的高级语言,例如Java、JavaScript、Objective-C 等。更进一步地,上层代码可以是外部调用方的Native APP,包括但不限于基于Android或iOS系统开发的各种应用APP。
请参考图2,本发明第一实施例提供一种通过链接库实现业务调用数据安全的方法,包括:
S201:将业务关键逻辑封装到链接库中;
进一步地,在链接库配置过程中,预先将业务关键逻辑写入到所述链接库中进行封装。其中,开发者在整体业务编译过程中,提前将业务关键逻辑的数据部分提取出来,预先放到所述链接库中,这样上层代码部分就不再包含业务关键逻辑的数据部分,需要通过外部调用的方式向所述链接库调用所述业务关键逻辑进行数据处理,这样外界就看不到封装到链接库中的业务关键逻辑相关的数据部分,有效地起到隔离和保护的作用。
S202:提供外部调用所述业务关键逻辑的入口,对外部调用请求进行校验;
其中,开发者在封装链接库后设置链接库提供外部程序调用业务关键逻辑的入口,并且在链接库中设置了外部调用校验逻辑,所述校验逻辑包含一个或多个校验策略,只有当外部调用校验通过所有校验策略逐项判断校验通过时,方可对链接库中的业务关键逻辑进行调用,执行后续的数据处理,而当外部调用校验命中其中任意一个校验策略判断校验失败时,则会拒绝此次外部调用请求。特别地,所述外部调用请求为外部调用方通过所述链接库的入口调用所述业务关键逻辑;所述链接库依据设定校验逻辑逐项对所述外部调用请求进行校验。
进一步地,所述校验逻辑包括外部调用方环境检查、外部调用方身份检查,和/或非法调用检查等。
(一)外部调用方环境检查
此项包括检查外部调用方环境是否为debug或re lease环境、动态调试环境、模拟器环境、设备root环境,和/或安装逆向工具的设备环境。
a.检查外部调用方环境是否为debug或re lease环境
读取所述外部调用方应用程式中相应debug标识字段值是否为true,如果所述标识字段值为true,则表示所述外部调用方为debug环境;当所述外部调用方为debug环境时,则校验失败。
其中,debug环境为开发者开发使用的调试软件环境,用于输出详细的调试信息,其较为方便的动态调试的内部测试软件包,debug软件只用于开发方便,不对外发布。而release环境软件则为对外发布的软件,其没有调试信息,也不能用于动态调试。
如果在debug环境中调用了本发明此实施方式的链接库,则应当是破解者利用debug软件在尝试调用和破解,则是必须要拒绝和阻止这种调用请求。
进一步地,检查外部调用方是debug还是release环境,在Android和iOS 系统并不一样,本实施例以Android系统举例如下,但并不仅限于保护如下这种实施方式,本领域技术人员应当理解利用本发明的方法在iOS等其他系统开发环境下实现的技术方案也在本发明的保护范围内:
外部调用方通过动态链接库的入口调用时,校验逻辑读取外部调用方程序apk(即Android系统开发环境下的应用程序)中AndroidManifest.xml中 debuggable字段的值,若此值为true则表示外部调用方为debug环境,或者,所述校验逻辑读取BuildConfig类中的Debug字段的值,若此值为true则表示此程序apk是debug包。
b.检查当前是否动态调试环境
设置单独的动态调试策略子线程,定时检查所述外部调用方的调试进程是否命中预设的动态调试策略;如果所述外部调用方的调试进程命中预设的动态调试策略,则校验失败。此时需要阻止调试链接的建立,或者阻止调用方对库实施动态调试。
其中,判断动态调试的策略运行在单独的一个子线程中,设定定时检查外部调用方的调试进程,如果命中策略,直接阻止外部调用方软件。
判断动态调试的策略可以设定为多种,比如,动态调试可以是GDB调试器,基于Linux/Unix的特性,如果调试某个进程,则会将该进程status描述文件的TracerPid值更新为调试者进程的进程id,因此所述子线程只要定时读取该值不等于0就表示处于正在被调试的状态;另外,也可根据Android Java 语言提供的方法去判断,使用JNI技术反向调用Java层API android.os.Debug 类中的静态方法isDebuggerConnected根据返回值来判断是否是处于正在被调试状态。本发明保护范围并不仅仅限于上述举例的技术方案,如果任何一种策略可判定属于动态调试中,就可中断所述外部调用,阻止外部调用程序执行。
c.检查外部调用方是否为模拟器环境
判断所述外部调用方的硬件信息为模拟器或真机;如果所述外部调用方的硬件信息为模拟器,则校验失败。
d.检查外部调用设备是否为root环境
检查所述外部调用方系统是否支持su指令或检查所述外部调用方系统 root特征;如果所述外部调用方系统支持su指令,切换到root环境,则校验失败;和/或如果所述外部调用方系统符合root特征,则校验失败。
e.检查外部调用方是否为安装逆向工具的设备环境
判断所述外部调用方存储的Hook信息是否含有逆向敏感特征;如果含有逆向敏感特征,则则校验失败。
例如,Xposed框架将Hook信息存储在字段fieldCache,methodCache等中,利用java反射机制获取这些信息,检测Hook信息中是否含有逆向敏感特征,包括但不限于逆向敏感方法、字段,和/或构造方法等,来判断是否正在逆向破解所述动态链接库,若命中即可中断外部调用软件进程,阻止调用。
(二)外部调用方身份检查
此项包括检查外部调用安装包的证书是否正确、外部调用程序入口类否正确,和/或外部调用程序中是否有预埋特征标识等。
a)检查安装包的证书是否是正确的
其中,对于Android或iOS的软件包,通过发布者的证书和包名(iOS也叫ID)来判断唯一性,验证发布软件。安装包的证书本质上是对称密钥,开发者使用私钥对软件进行签名,软件方或者设备使用软件包带的公钥证书去验证软件包。由于证书具有唯一且不能伪造的属性,在链接库中获取软件的证书公钥信息和正确的公钥信息进行比对,如不匹配则表示软件包的证书不正确,拒绝此外部调用请求。
b)检查入口类是否正确
其中,JNI(Java Native Interface,Java本地接口调用)调用方需要按照开发者指定的数据包,指定的JNI入口方法类名去编写入口类,否则就终止调用。
c)检查外部调用程序中是否有预埋特征标识
其中,在业务开发过程中,开发者为提高安全性,预留一些预埋特征标识在外部上层代码中,由此当外部调用调用动态链接库时,校验逻辑读取业务宿主程序中这些预埋特征标识,以此判断调用方是否为正确的业务宿主程序,如不是则终止调用。
(三)非法调用检查
此项包括检查调用逻辑的顺序是否正确,和/或错误调用的次数是否超过阈值。
也就是说,链接库中的校验逻辑会对调用逻辑有顺序的区分,只处理正常顺序的调用逻辑。可选地,开发者对错误调用顺序做了标记,另外也可以加了一些不会调用的入口用于迷惑想要破解的外部人或程序。设定如果错误的调用次数超过阈值,则会中断外部调用方或者返回错误无意义的数据,以此认定其为非法调用。
S203:如果所述校验通过,则调用所述业务关键逻辑执行相应数据处理;
其中,所述外部调用经过所述校验逻辑逐项都通过后,则说明此次外部调用属于正常业务用例,则允许外部调用程序调用所述动态链接库中预先封装内的业务关键逻辑进行相应的数据处理。优选地,调用所述业务关键逻辑进行相应的数据处理可以对应实现所述业务或外部调用程序的核心功能,或者对应实现所述业务中安全系数要求较高的功能或者优先级较高的功能。
S204:对所述业务关键逻辑执行的数据处理过程进行安全加密;
其中,对所述业务关键逻辑执行的数据处理过程进行安全加密,至少包括:对数据处理过程中使用到的字符串(例如:动态字符串、静态字符串) 进行安全加密,以及对数据处理过程得到一个或多个处理结果(比如Token 令牌)中作为对应外部调用方需求的调用结果进行安全加密。
其中,对所述业务关键逻辑执行的数据处理过程中用到的字符串进行安全加密时,该字符串包括但不限于数据处理过程中调用到的各种代码、函数、或参数等(动态字符串和/或静态字符串),用以阻止外部调用方对链接库的静态分析。因为破解软件第一步就是对软件做静态分析的情况,例如使用IDA 等破解软件可以查看链接库中使用的一些静态字符串等,这样破解者可以通过这些静态字符串尝试猜测软件开发者部署的安全策略,从而尝试破解。针对此情况,本发明实施方式此步骤的一个例子中,可以直接对静态字符串进行安全加密后,就能保证上述破解方式无效。
可选地,所述加密可以使用对称密钥或非对称密钥的方式实现,等使用的时候再进行动态解析。
进一步,数据处理过程得到的一个或多个处理结果可以存储到数据库中,而将其中符合外部调用请求所需的一个处理结果作为调用结果。
S205:返回经过所述安全加密的调用结果;
其中,对于外部调用方的调用业务关键逻辑,经过业务关键逻辑进行相应数据处理后,返回对应的调用结果(比如Token令牌、函数运算后的返回值等等)。其中,该调用结果进行了安全加密。
可选地,调用结果使用对称密钥或非对称密钥,进行安全加密,并返回给外部调用方,具体例如:
1)使用对称密钥。使用的对称密钥key由随机的算法生成,该算法需要服务端和客户端统一,以保证服务端可解。使用所述对称密钥key安全加密所述调用结果,并将生成key的可变因子加入到加密后的调用结果中,最后统一返给外部调用方。
2)使用非对称密钥。在链接库中内置公钥,结果经非对称加密(例如 RSA)后返给调用者。
请参照图3,本发明第二实施例还提供了一种通过链接库实现业务调用数据安全的方法实例,其使用C/C++链接库实现对用户的Token调用过程中数据安全的方法。
通常修改账户信息需要用户登录后的Token。现有技术中,实现的流程逻辑是首先获取token,然后调用修改账户信息的接口,其整个流程逻辑都在上层代码中,这对于Java、JavaScript等语言编写的程序中,发布的代码都可以看到整个流程,安全性非常差。
而采用本发明的技术方案,通过使用C/C++链接库,调用获取Token的关键逻辑是封装在链接库中的,外界通过上层代码是看不到的,C/C++链接库提供上层代码外部调用的入口,调用链接库中获取Token的方法;链接库中校验逻辑对外部调用方进行校验,如果校验失败则调用失败返回错误码,如果校验逐项通过则通过数据查询处理获取到所述用户对应的Token,对Token 进行安全加密,调用正常返回加密后的Token;上层代码获取到加密的Token 后才能再进行调用修改账户信息的接口的操作。
其中,举例对外部调用方的校验逻辑中身份校验的一个方式,以Android 和iOS系统两个平台而言,发布的应用安装包(Android是apk包,iOS是ipa 包)都会做数字签名,数字签名的公钥信息是可以获取到的,因此校验外部调用也是通过获取到的公钥信息和正确的公钥信息进行比对的方式,如果比对一致则通过此项校验,否则不通过,拒绝调用。
此实施例中加密Token的步骤,使用的加密方案可依照安全性的要求,选对称密钥或非对称密钥加密。例如如果使用对称加密,生成密钥的规则可以根据当前的时间戳来生成,这样服务端只要保证时钟同步就可以按照同规则生成相同的密钥,解密也就可以验证了。如果使用非对称密钥加密,那么就需要链接库中存储公钥,然后使用公钥来加密,服务端使用私钥来解密。
请参考图4,本发明第一实施例提供一种通过链接库实现业务调用数据安全的系统,包括:封装单元401,用于将业务关键逻辑封装到链接库中;校验单元402,用于提供外部调用所述业务关键逻辑的入口,对外部调用请求进行校验;处理单元403,用于如果所述校验单元通过所述校验,则调用所述业务关键逻辑执行相应数据处理;加密单元404,用于对所述业务关键逻辑执行的数据处理过程进行安全加密;结果返回单元405,用于返回经过所述安全加密的调用结果。
具体的,在本实施例中,此通过链接库实现业务调用数据安全的系统通常设置在服务器中,也可以设置在服务器集群中,还可以设置在终端设备,如手机、ipad、平板电脑、笔记本电脑等设备,还可以是台式电脑等设备,当然还可以是其它电子设备,在此,本发明实施例不做限制。此系统进行通过链接库实现业务调用数据安全的方法已在前述第一实施例中进行详细阐述,在此,本实施例不再赘述。
其中,所述封装单元401,进一步用于,在链接库配置过程中,预先将业务关键逻辑写入到所述链接库中进行封装。其中,开发者在整体业务编译过程中,提前将业务关键逻辑的数据部分提取出来,预先放到所述链接库中,这样上层代码部分就不再包含业务关键逻辑的数据部分,需要通过外部调用的方式向所述链接库调用所述业务关键逻辑进行数据处理,这样外界就看不到封装到链接库中的业务关键逻辑相关的数据部分,有效地起到隔离和保护的作用。
所述校验单元402,进一步用于,提供外部调用所述业务关键逻辑的入口,对外部调用请求进行校验。其中,开发者在封装链接库后设置链接库提供外部程序调用业务关键逻辑的入口,并且在链接库中设置了外部调用校验逻辑,所述校验逻辑包含一个或多个校验策略,只有当外部调用校验通过所有校验策略逐项判断校验通过时,方可对链接库中的业务关键逻辑进行调用,执行后续的数据处理,而当外部调用校验命中其中任意一个校验策略判断校验失败时,则会拒绝此次外部调用请求。特别地,所述外部调用请求为外部调用方通过所述链接库的入口调用所述业务关键逻辑;所述链接库依据设定校验逻辑逐项对所述外部调用请求进行校验。
进一步地,所述校验单元402中的校验逻辑包括外部调用方环境检查、外部调用方身份检查,和/或非法调用检查等。
(一)外部调用方环境检查
此项包括检查外部调用方环境是否为debug或re lease环境、动态调试环境、模拟器环境、设备root环境,和/或安装逆向工具的设备环境。
a.检查外部调用方环境是否为debug或re lease环境
读取所述外部调用方应用程式中相应debug标识字段值是否为true,如果所述标识字段值为true,则表示所述外部调用方为debug环境;当所述外部调用方为debug环境时,则校验失败。
其中,debug环境为开发者开发使用的调试软件环境,用于输出详细的调试信息,其较为方便的动态调试的内部测试软件包,debug软件只用于开发方便,不对外发布。而release环境软件则为对外发布的软件,其没有调试信息,也不能用于动态调试。
如果在debug环境中调用了本发明此实施方式的链接库,则应当是破解者利用debug软件在尝试调用和破解,则是必须要拒绝和阻止这种调用请求。
进一步地,检查外部调用方是debug还是release环境,在Android和iOS 系统并不一样,本实施例以Android系统举例如下,但并不仅限于保护如下这种实施方式,本领域技术人员应当理解利用本发明的方法在iOS等其他系统开发环境下实现的技术方案也在本发明的保护范围内:
外部调用方通过动态链接库的入口调用时,校验逻辑读取外部调用方程序apk(即Android系统开发环境下的应用程序)中AndroidManifest.xml中 debuggable字段的值,若此值为true则表示外部调用方为debug环境,或者,所述校验逻辑读取BuildConfig类中的Debug字段的值,若此值为true则表示此程序apk是debug包。
b.检查当前是否动态调试环境
设置单独的动态调试策略子线程,定时检查所述外部调用方的调试进程是否命中预设的动态调试策略;如果所述外部调用方的调试进程命中预设的动态调试策略,则校验失败。此时需要阻止调试链接的建立,或者阻止调用方对库实施动态调试。
其中,判断动态调试的策略运行在单独的一个子线程中,设定定时检查外部调用方的调试进程,如果命中策略,直接阻止外部调用方软件。
判断动态调试的策略可以设定为多种,比如,动态调试可以是GDB调试器,基于Linux/Unix的特性,如果调试某个进程,则会将该进程status描述文件的TracerPid值更新为调试者进程的进程id,因此所述子线程只要定时读取该值不等于0就表示处于正在被调试的状态;另外,也可根据Android Java 语言提供的方法去判断,使用JNI技术反向调用Java层API android.os.Debug 类中的静态方法isDebuggerConnected根据返回值来判断是否是处于正在被调试状态。本发明保护范围并不仅仅限于上述举例的技术方案,如果任何一种策略可判定属于动态调试中,就可中断所述外部调用,阻止外部调用程序执行。
c.检查外部调用方是否为模拟器环境
判断所述外部调用方的硬件信息为模拟器或真机;如果所述外部调用方的硬件信息为模拟器,则校验失败。
d.检查外部调用设备是否为root环境
检查所述外部调用方系统是否支持su指令或检查所述外部调用方系统 root特征;如果所述外部调用方系统支持su指令,切换到root环境,则校验失败;和/或如果所述外部调用方系统符合root特征,则校验失败。
e.检查外部调用方是否为安装逆向工具的设备环境
判断所述外部调用方存储的Hook信息是否含有逆向敏感特征;如果含有逆向敏感特征,则则校验失败。
例如,Xposed框架将Hook信息存储在字段fieldCache,methodCache等中,利用java反射机制获取这些信息,检测Hook信息中是否含有逆向敏感特征,包括但不限于逆向敏感方法、字段,和/或构造方法等,来判断是否正在逆向破解所述动态链接库,若命中即可中断外部调用软件进程,阻止调用。
(二)外部调用方身份检查
此项包括检查外部调用安装包的证书是否正确、外部调用程序入口类否正确,和/或外部调用程序中是否有预埋特征标识等。
a)检查安装包的证书是否是正确的
其中,对于Android或iOS的软件包,通过发布者的证书和包名(iOS也叫ID)来判断唯一性,验证发布软件。安装包的证书本质上是对称密钥,开发者使用私钥对软件进行签名,软件方或者设备使用软件包带的公钥证书去验证软件包。由于证书具有唯一且不能伪造的属性,在链接库中获取软件的证书公钥信息和正确的公钥信息进行比对,如不匹配则表示软件包的证书不正确,拒绝此外部调用请求。
b)检查入口类是否正确
其中,JNI(Java Native Interface,Java本地接口调用)调用方需要按照开发者指定的数据包,指定的JNI入口方法类名去编写入口类,否则就终止调用。
c)检查外部调用程序中是否有预埋特征标识
其中,在业务开发过程中,开发者为提高安全性,预留一些预埋特征标识在外部上层代码中,由此当外部调用调用动态链接库时,校验逻辑读取业务宿主程序中这些预埋特征标识,以此判断调用方是否为正确的业务宿主程序,如不是则终止调用。
(三)非法调用检查
此项包括检查调用逻辑的顺序是否正确,和/或错误调用的次数是否超过阈值。
也就是说,链接库中的校验逻辑会对调用逻辑有顺序的区分,只处理正常顺序的调用逻辑。可选地,开发者对错误调用顺序做了标记,另外也可以加了一些不会调用的入口用于迷惑想要破解的外部人或程序。设定如果错误的调用次数超过阈值,则会中断外部调用方或者返回错误无意义的数据,以此认定其为非法调用。
所述处理单元403,用于当校验单元402的校验逻辑逐项都通过后,允许外部调用程序调用所述动态链接库中预先封装内的业务关键逻辑进行相应的数据处理。优选地,调用所述业务关键逻辑进行相应的数据处理可以对应实现所述业务或外部调用程序的核心功能,或者对应实现所述业务中安全系数要求较高的功能或者优先级较高的功能。
所述加密单元404,对所述业务关键逻辑执行的数据处理过程进行安全加密,至少包括:对数据处理过程中使用到的字符串(例如:动态字符串、静态字符串)进行安全加密,以及对数据处理过程得到一个或多个处理结果(比如Token令牌)中作为对应外部调用方需求的调用结果进行安全加密。
其中,对所述业务关键逻辑执行的数据处理过程中用到的字符串进行安全加密时,该字符串包括但不限于数据处理过程中调用到的各种代码、函数、或参数等(动态字符串和/或静态字符串),用以阻止外部调用方对链接库的静态分析。因为破解软件第一步就是对软件做静态分析的情况,例如使用IDA 等破解软件可以查看链接库中使用的一些静态字符串等,这样破解者可以通过这些静态字符串尝试猜测软件开发者部署的安全策略,从而尝试破解。针对此情况,本发明实施方式此步骤的一个例子中,可以直接对静态字符串进行安全加密后,就能保证上述破解方式无效。可选地,所述加密可以使用对称密钥或非对称密钥的方式实现,等使用的时候再进行动态解析。
进一步,数据处理过程得到的一个或多个处理结果可以存储到数据库中,而将其中符合外部调用请求所需的一个处理结果作为调用结果。
所述结果返回单元405,具体地,对于外部调用方的调用业务关键逻辑,经过业务关键逻辑进行相应数据处理后,返回对应的调用结果(比如Token 令牌、函数运算后的返回值等等)。其中,该调用结果进行了安全加密。
可选地,调用结果使用对称密钥或非对称密钥进行安全加密,再返回给外部调用方。具体例如:
1)使用对称密钥。使用的对称密钥key由随机的算法生成,该算法需要服务端和客户端统一,以保证服务端可解。使用所述对称密钥key安全加密所述调用结果,并将生成key的可变因子加入到加密后的调用结果中,最后统一返给外部调用方。
2)使用非对称密钥。在链接库中内置公钥,结果经非对称加密(例如 RSA)后返给调用者。
本发明第四实施例还提供了一种服务器,包括存储器502、处理器501及存储在存储器502上并可在处理器501上运行的计算机程序,所述处理器501 执行所述程序时实现前文所述方法的步骤。为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该服务器,可以是包括各种电子设备形成的服务器设备,PC电脑、网络云服务器,甚至手机、平板电脑、PDA(Personal Digital Assistant,个人数字助理)、POS(Point of Sales,销售终端)、车载电脑、台式电脑等任意电子设备上设置的服务器功能。
具体地,图5示出的与本发明实施例提供的技术方案相关的服务器组成结构框图,总线500可以包括任意数量的互联的总线和桥,其将包括由处理器501代表的一个或多个处理器和存储器502代表的存储器的各种电路链接在一起。总线500还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口503在总线500和接收器和/或发送器504之间提供接口,接收器和/或发送器504可以是分开独立的接收器或发送器也可以是同一个元件如收发机,提供用于在传输介质上与各种其他装置通信的单元。处理器501负责管理总线500和通常的处理,而存储器502可以被用于存储处理器501在执行操作时所使用的数据。
基于这样的理解,本发明实现上述第一实施例的方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明实施例权利要求及其等同技术的范围之内,则本发明实施例也意图包含这些改动和变型在内。
Claims (30)
1.一种通过链接库实现业务调用数据安全的方法,其特征在于,包括:
将业务关键逻辑封装到链接库中;提前将业务关键逻辑的数据部分提取出来,预先放到所述链接库中,通过外部调用的方式向所述链接库调用所述业务关键逻辑进行数据处理;
接收外部调用所述业务关键逻辑的请求,通过预置的用于外部调用所述业务关键逻辑的入口,对所述请求进行校验;
如果所述外部调用所述业务关键逻辑的请求通过校验,则调用所述业务关键逻辑执行相应数据处理;
对所述业务关键逻辑执行的数据处理过程进行安全加密;
将所述数据处理过程中经过所述安全加密的调用结果返回外部。
2.如权利要求1所述的方法,其特征在于,将业务关键逻辑封装到链接库中,进一步为,在链接库配置过程中,预先将业务关键逻辑写入到所述链接库中进行封装。
3.如权利要求1所述的方法,其特征在于,接收外部调用所述业务关键逻辑的请求,通过预置的用于外部调用所述业务关键逻辑的入口,对所述请求进行校验,进一步包括:
所述外部调用所述业务关键逻辑的请求为外部调用方通过所述链接库提供的入口调用所述业务关键逻辑;
所述链接库依据设定校验逻辑逐项对所述外部调用请求进行校验。
4.如权利要求3所述的方法,其特征在于,所述校验逻辑进一步包括:
外部调用方环境检查,其包括:检查外部调用方环境是否为debug或re lease环境、动态调试环境、模拟器环境、设备root环境,和/或安装逆向工具的设备环境。
5.如权利要求4所述的方法,其特征在于,所述校验对应检查外部调用方环境是否为debug或re lease环境,进一步包括:
读取所述外部调用方应用程式中相应debug标识字段值是否为true,如果所述标识字段值为true,则表示所述外部调用方为debug环境;
当所述外部调用方为debug环境时,则校验失败。
6.如权利要求4所述的方法,其特征在于,所述校验对应检查外部调用方环境是否为动态调试环境,进一步包括:
设置单独的动态调试策略子线程,定时检查所述外部调用方的调试进程是否命中预设的动态调试策略;
如果所述外部调用方的调试进程命中预设的动态调试策略,则校验失败。
7.如权利要求4所述的方法,其特征在于,所述校验对应检查外部调用方环境是否为模拟器环境,进一步包括:
判断所述外部调用方的硬件信息为模拟器或真机;
如果所述外部调用方的硬件信息为模拟器,则校验失败。
8.如权利要求4所述的方法,其特征在于,所述校验对应检查外部调用方环境是否为设备root环境,进一步包括:
检查所述外部调用方系统是否支持su指令或检查所述外部调用方系统root特征;
如果所述外部调用方系统支持su指令,切换到root环境,则校验失败;和/或
如果所述外部调用方系统符合root特征,则校验失败。
9.如权利要求4所述的方法,其特征在于,所述校验对应检查外部调用方环境是否为安装逆向工具的设备环境,进一步包括:
判断所述外部调用方存储的Hook信息是否含有逆向敏感特征;
如果含有逆向敏感特征,则则校验失败。
10.如权利要求3所述的方法,其特征在于,所述校验逻辑包括:
外部调用方身份检查,包括:校验对应检查外部调用安装包的证书是否正确、外部调用程序入口类否正确,外部调用程序中是否有预埋特征标识。
11.如权利要求3所述的方法,其特征在于,所述校验逻辑包括:
非法调用检查,包括:校验对应检查调用逻辑的顺序是否正确,错误调用的次数是否超过阈值。
12.如权利要求1所述的方法,其特征在于,对所述业务关键逻辑执行的数据处理过程进行安全加密,进一步包括:
对所述业务关键逻辑执行的数据处理过程中用到的字符串进行安全加密,阻止外部调用方对链接库的静态分析;
对所述业务关键逻辑执行的数据处理过程所得到的结果中需要返回外部的调用结果进行安全加密。
13.如权利要求1所述的方法,其特征在于,返回经过所述安全加密的调用结果,进一步包括:
使用对称密钥或非对称密钥,将调用结果进行安全加密,返回给外部调用方。
14.如权利要求1所述的方法,其特征在于,所述链接库包括静态链接库和/或动态链接库。
15.一种通过链接库实现业务调用数据安全的系统,其特征在于,包括:
封装单元,用于将业务关键逻辑封装到链接库中;提前将业务关键逻辑的数据部分提取出来,预先放到所述链接库中,通过外部调用的方式向所述链接库调用所述业务关键逻辑进行数据处理;
校验单元,用于接收外部调用所述业务关键逻辑的请求,通过预置的用于外部调用所述业务关键逻辑的入口,对所述请求进行校验;
处理单元,用于如果所述校验单元通过所述校验,则调用所述业务关键逻辑执行相应数据处理;
加密单元,用于对所述业务关键逻辑执行的数据处理过程进行安全加密;
结果返回单元,用于将所述数据处理过程中经过所述安全加密的调用结果返回外部。
16.如权利要求15所述的系统,其特征在于,所述封装单元,进一步用于,
在链接库配置过程中,预先将业务关键逻辑写入到所述链接库中进行封装。
17.如权利要求15所述的系统,其特征在于,所述校验单元,进一步用于,
提供外部调用方调用所述业务关键逻辑的链接库入口;
依据设定校验逻辑逐项对所述外部调用请求进行校验。
18.如权利要求17所述的系统,其特征在于,所述校验逻辑包括外部调用方环境检查,所述校验单元进一步用于检查外部调用方环境是否为debug或re lease环境、动态调试环境、模拟器环境、设备root环境,和/或安装逆向工具的设备环境。
19.如权利要求18所述的系统,其特征在于,所述校验单元,进一步用于,
读取所述外部调用方应用程式中相应debug标识字段值是否为true,如果所述标识字段值为true,则表示所述外部调用方为debug环境;
当所述外部调用方为debug环境时,则校验失败。
20.如权利要求18所述的系统,其特征在于,所述校验单元,进一步用于,
设置单独的动态调试策略子线程,定时检查所述外部调用方的调试进程是否命中预设的动态调试策略;
如果所述外部调用方的调试进程命中预设的动态调试策略,则校验失败。
21.如权利要求18所述的系统,其特征在于,所述校验单元,进一步用于,
判断所述外部调用方的硬件信息为模拟器或真机;
如果所述外部调用方的硬件信息为模拟器,则校验失败。
22.如权利要求18所述的系统,其特征在于,所述校验单元,进一步用于,
检查所述外部调用方系统是否支持su指令或检查所述外部调用方系统root特征;
如果所述外部调用方系统支持su指令,切换到root环境,则校验失败;和/或
如果所述外部调用方系统符合root特征,则校验失败。
23.如权利要求18所述的系统,其特征在于,所述校验单元,进一步用于:
判断所述外部调用方存储的Hook信息是否含有逆向敏感特征;
如果含有逆向敏感特征,则则校验失败。
24.如权利要求17所述的系统,其特征在于,所述校验逻辑包括外部调用方身份检查,所述校验单元,进一步用于检查外部调用安装包的证书是否正确、外部调用程序入口类否正确,和/或外部调用程序中是否有预埋特征标识。
25.如权利要求17所述的系统,其特征在于,所述校验逻辑包括非法调用检查,所述校验单元进一步用于检查调用逻辑的顺序是否正确,和/或错误调用的次数是否超过阈值。
26.如权利要求15所述的系统,其特征在于,所述加密单元,进一步用于:
对所述业务关键逻辑执行的数据处理过程中用到的字符串进行安全加密,阻止外部调用方对链接库的静态分析;
对所述业务关键逻辑执行的数据处理过程所得到的结果中需要返回外部的调用结果进行安全加密。
27.如权利要求15所述的系统,其特征在于,所述结果返回单元,进一步用于:
使用对称密钥或非对称密钥,将调用结果进行安全加密,返回给外部调用方。
28.如权利要求15所述的系统,其特征在于,所述链接库包括静态链接库和/或动态链接库。
29.一种服务器,包括处理器和存储器:
所述存储器用于存储执行权利要求1至14任一项所述方法的程序;
所述处理器被配置为用于执行所述存储器中存储的程序。
30.一种计算机可读存储介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至14任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910202495.9A CN109902500B (zh) | 2019-03-11 | 2019-03-11 | 一种通过链接库实现业务调用数据安全的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910202495.9A CN109902500B (zh) | 2019-03-11 | 2019-03-11 | 一种通过链接库实现业务调用数据安全的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109902500A CN109902500A (zh) | 2019-06-18 |
CN109902500B true CN109902500B (zh) | 2021-02-26 |
Family
ID=66952235
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910202495.9A Active CN109902500B (zh) | 2019-03-11 | 2019-03-11 | 一种通过链接库实现业务调用数据安全的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109902500B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112613023B (zh) * | 2020-12-28 | 2023-04-28 | 厦门市美亚柏科信息股份有限公司 | 一种认证信息生成算法的保护方法和终端 |
CN113722726B (zh) * | 2021-02-09 | 2024-04-05 | 京东科技控股股份有限公司 | 基于软硬件协同的加解密方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104281788A (zh) * | 2013-07-05 | 2015-01-14 | 腾讯科技(深圳)有限公司 | 一种终端应用的保护方法及装置 |
CN105389222A (zh) * | 2015-12-15 | 2016-03-09 | 中国科学院声学研究所 | 一种动态调用原生接口的方法、装置和系统 |
CN105844150A (zh) * | 2016-03-23 | 2016-08-10 | 青岛海信传媒网络技术有限公司 | 一种应用程序的数据保护方法和装置 |
CN106412862A (zh) * | 2016-10-13 | 2017-02-15 | 上海众人网络安全技术有限公司 | 一种短信加固方法、装置及系统 |
CN108628611A (zh) * | 2018-04-20 | 2018-10-09 | 无锡盈达聚力科技有限公司 | 一种数据调用方法及数据调用装置 |
CN109062667A (zh) * | 2018-07-27 | 2018-12-21 | 平安科技(深圳)有限公司 | 一种模拟器识别方法、识别设备及计算机可读介质 |
-
2019
- 2019-03-11 CN CN201910202495.9A patent/CN109902500B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104281788A (zh) * | 2013-07-05 | 2015-01-14 | 腾讯科技(深圳)有限公司 | 一种终端应用的保护方法及装置 |
CN105389222A (zh) * | 2015-12-15 | 2016-03-09 | 中国科学院声学研究所 | 一种动态调用原生接口的方法、装置和系统 |
CN105844150A (zh) * | 2016-03-23 | 2016-08-10 | 青岛海信传媒网络技术有限公司 | 一种应用程序的数据保护方法和装置 |
CN106412862A (zh) * | 2016-10-13 | 2017-02-15 | 上海众人网络安全技术有限公司 | 一种短信加固方法、装置及系统 |
CN108628611A (zh) * | 2018-04-20 | 2018-10-09 | 无锡盈达聚力科技有限公司 | 一种数据调用方法及数据调用装置 |
CN109062667A (zh) * | 2018-07-27 | 2018-12-21 | 平安科技(深圳)有限公司 | 一种模拟器识别方法、识别设备及计算机可读介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109902500A (zh) | 2019-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10031743B2 (en) | Method and apparatus for kernel repair and patching | |
CN108399329B (zh) | 一种提高可信应用程序安全的方法 | |
CN104009977B (zh) | 一种信息保护的方法和系统 | |
CN110310205B (zh) | 一种区块链数据监控方法、装置、设备和介质 | |
US7788730B2 (en) | Secure bytecode instrumentation facility | |
CN102880456B (zh) | 插件加载方法及系统 | |
US20100229242A1 (en) | Program execution control system, program execution control method and computer program for program execution control | |
US8635602B2 (en) | Verification of information-flow downgraders | |
CN104965712A (zh) | 应用程序加固保护方法、装置及移动终端 | |
CN112231702B (zh) | 应用保护方法、装置、设备及介质 | |
CN110070360B (zh) | 一种事务请求处理方法、装置、设备及存储介质 | |
CN105844150A (zh) | 一种应用程序的数据保护方法和装置 | |
CN109902500B (zh) | 一种通过链接库实现业务调用数据安全的方法及系统 | |
US20130042297A1 (en) | Method and apparatus for providing secure software execution environment based on domain separation | |
CN108595950A (zh) | 一种结合远程认证的sgx安全增强方法 | |
CN113722683A (zh) | 模型保护方法、装置、设备、系统以及存储介质 | |
CN111259368A (zh) | 一种登录系统的方法及设备 | |
KR20180025380A (ko) | Apk 파일 동적로딩 기법을 이용한 뱅킹 어플리케이션 무결성 검증 시스템 및 무결성 검증방법 | |
CN113448681B (zh) | 一种虚拟机监控器公钥的注册方法、设备和存储介质 | |
CN116910712A (zh) | 代码保护方法、系统、电子设备及存储介质 | |
WO2020233044A1 (zh) | 一种插件校验方法、设备、服务器及计算机可读存储介质 | |
CN102592101A (zh) | 一种led显示管理软件安全的方法与系统 | |
US12056232B2 (en) | Function-based service framework with trusted execution platform | |
CN114238943A (zh) | 应用程序防护方法、装置、设备及存储介质 | |
Msgna et al. | Secure application execution in mobile devices |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |