CN104932972A - 一种反动态调试应用程序的方法及装置 - Google Patents
一种反动态调试应用程序的方法及装置 Download PDFInfo
- Publication number
- CN104932972A CN104932972A CN201410102457.3A CN201410102457A CN104932972A CN 104932972 A CN104932972 A CN 104932972A CN 201410102457 A CN201410102457 A CN 201410102457A CN 104932972 A CN104932972 A CN 104932972A
- Authority
- CN
- China
- Prior art keywords
- application program
- ptrace
- function
- ptrace function
- reaction state
- 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.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种反动态调试应用程序的方法及装置,涉及应用程序的防破解技术,阻止了其他调试器通过调用应用程序的对应接口的ptrace函数破解该应用程序。该方法包括:当启动应用程序时,调用所述应用程序对应接口的进程跟踪ptrace函数,并执行所述ptrace函数;检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数;如果是,则阻止所述其他应用程序调用所述ptrace函数。本发明主要用于防止通过动态调试破解应用程序。
Description
技术领域
本发明涉及计算机软件技术领域,具体涉及应用程序的防破解技术,尤其涉及一种反动态调试应用程序的方法及装置。
背景技术
随着手机与平板电脑等移动终端的迅速发展,主要应用于移动终端的Android系统也得到了越来越快速的推广,使得很多基于Android系统的应用程序越来越丰富。很多对应用程序进行反编译与动态分析的工具应运而生,一些盈利性的应用程序被恶意分析。破解者可以通过静态分析或者动态分析破解应用程序,通过这种途径可以攫取应用中表示用户隐私的代码逻辑,从而获得用户的隐私,或者侵害用户的利益等。
发明内容
本发明提供了一种反动态调试应用程序的方法及装置,阻止了其他调试器通过调用应用程序的API的ptrace函数破解该应用程序。所述技术方案如下:
一方面,本发明实施例提供了一种反动态调试应用程序的方法,所述方法包括:
当启动应用程序时,调用所述应用程序对应接口的进程跟踪ptrace函数,并执行所述ptrace函数;
检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数;
如果有,则阻止所述其他应用程序调用所述ptrace函数。
另一方面,本发明实施例提供了一种反动态调试应用程序的装置,所述装置包括:
调用模块,用于在启动应用程序时,调用所述应用程序对应接口的进程跟踪ptrace函数,并执行所述ptrace函数;
检测模块,用于检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数;
阻止模块,用于在所述检测模块检测到有除所述应用程序以外的其他应用程序调用所述ptrace函数时,阻止所述其他应用程序调用所述ptrace函数。
本发明提供了一种反动态调试应用程序的方法及装置,通过在应用程序启动时,调用该应用程序的API的ptrace函数,使得该应用程序运行产生的进程成为其自身的父进程,从而阻止了其他调试器通过调用该应用程序的API的ptrace函数破解该应用程序。
附图说明
图1是本发明实施例提供的一种反动态调试应用程序的方法流程图;
图2是本发明实施例提供的另一种反动态调试应用程序的方法流程图;
图3是本发明实施例提供的另一种反动态调试应用程序的方法流程图;
图4是本发明实施例提供的一种反动态调试应用程序的装置组成框图;
图5是本发明实施例提供的另一种反动态调试应用程序的装置组成框图;
图6是本发明实施例提供的另一种反动态调试应用程序的装置组成框图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例,仅仅用于解释本发明,而非对本发明的限定。
本发明实施例提供了一种反动态调试应用程序的方法,如图1所示,所述方法包括:
步骤101:当启动应用程序时,调用所述应用程序对应接口的进程跟踪ptrace函数,并执行所述ptrace函数。
其中,所述应用程序对应接口即为API(Application Programming Interface,应用程序接口),其是一组定义、程序及协议的集合,应用程序通过API接口实现计算机软件之间的相互通信。API的一个主要功能是提供通用功能集,程序员通过使用API函数开发应用程序,从而可以避免编写无用程序,以减轻编程任务。API同时也是一种中间件,为各种不同平台提供数据共享,API可以应用于所有计算机平台和操作系统,这些API以不同的格式连接数据(如共享数据缓存器、数据库结构、文件框架)。操作系统的API可用来分配存储器或读取文件,用于快速执行的接口通常包括函数、常量、变量与数据结构。应用程序接口经常是软件开发工具包(SDK,Software Development Kit)的一部分。
其中,ptrace函数是用于跟踪进程的,为方便应用软件的开发和调试,从unix的早期版本开始就提供了一种对运行中的进程进行跟踪和控制的手段,那就是系统调用ptrace函数。它提供了一种机制使得父进程可以观察和控制子进程的执行过程,ptrace函数还可以检查和修改该子进程的可执行文件在内存中的镜像及该子进程所使用的寄存器中的值,一个进程可以动态地读/写另一个进程的内存和寄存器,包括其指令空间、数据空间、堆栈以及所有的寄存器。与信号机制(以及其他手段)相结合,就可以实现一个进程在另一个进程的控制和跟踪下运行的目的。当使用了ptrace函数跟踪后,所有发送给被跟踪的子进程的信号(除了SIGKILL),都会被转发给父进程,而子进程则会被阻塞,这时子进程的状态就会被系统标注为TASK_TRACED。而父进程收到信号后,就可以对停止下来的子进程进行检查和修改,然后让子进程继续运行。
具体地,当应用程序启动时,这个应用程序调用该应用程序自身的对应接口的进程跟踪ptrace函数,并执行ptrace函数,由于该应用程序调用其自身的对应接口的进程跟踪ptrace函数,因此,该应用程序每次启动后,产生的进程均既是子进程又是父进程。
步骤102:检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数。
步骤103:如果是,则阻止所述其他应用程序调用所述ptrace函数。
当一个应用程序M的对应接口的ptrace函数被另一个程序N调用后,应用程序M运行时产生的进程B就成为程序N运行时产生的进程A的子进程,而进程A为父进程,此时,进程A就可以对进程B进行跟踪和控制。然而当进程B已经被进程A跟踪以后,其他进程就不能再对进程B进行跟踪和控制了。
具体地,例如,假设进程A要跟踪进程B。在ptrace系统调用真正开始前,内核会检查一下我们将要跟踪的进程B是否当前正在被跟踪,如果进程B当前已经被正在跟踪,内核就会把进程B停下来,并把控制权交给进程A(任何时候,子进程只能被唯一一个父进程跟踪)。但是,如果在进程B开始运行时,就通过ptrace系统调用使进程B的父进程是进程B自身,那么当进程A跟踪进程B时,内核检测出进程B已经被跟踪,会把进程B停下来,当进程B再次运行后,仍然处于进程B的父进程是进程B自身的状态,因此,进程A永远也无法对进程B进行跟踪。
本发明提供了一种反动态调试应用程序的方法及装置,通过在应用程序启动时,调用该应用程序的API的ptrace函数,使得该应用程序运行产生的进程成为其自身的父进程,从而阻止了其他调试器通过调用该应用程序的API的ptrace函数破解该应用程序。
进一步的,在启动所述应用程序时,调用的所述ptrace函数的请求类型为PTRACE_TRACEME。
ptrace函数的形式如下所示:
ptrace(enum__ptrace_request request,pid_t pid,void*addr,void*data);其中,enum__ptrace_request request,pid_t pid,void*addr,void*data为ptrace函数的4个参数,enum__ptrace_request request参数指示了ptrace要执行的命令;pid_t pid参数指示ptrace要跟踪的进程;void*addr参数指示要监控的内存地址;void*data参数存放读取出的或者要写入的数据。第1个参数决定ptrace的行为也决定了接下来其它3个参数是怎样被使用的,第1个参数可以取以下任意一个值:
PTRACE_TRACEME,
PTRACE_PEEKTEXT,
PTRACE_PEEKDATA,
PTRACE_PEEKUSER,
PTRACE_POKETEXT,
PTRACE_POKEDATA,
PTRACE_POKEUSER,
PTRACE_GETREGS,
PTRACE_GETFPREGS,
PTRACE_SETREGS,
PTRACE_SETFPREGS,
PTRACE_CONT,
PTRACE_SYSCALL,
PTRACE_SINGLESTEP,
PTRACE_DETACH
其中,PTRACE_TRACEME是被父进程用来跟踪子进程的。任何信号(除了SIGKILL),不管是从外来的还是由exec系统调用产生的,都将使得子进程被暂停,由父进程决定子进程的行为。在request为PTRACE_TRACEME的情况下,ptrace函数检查当前进程的ptrace标志是否已经被设置,没有的话就设置ptrace标志。
进一步的,本发明实施例提供了另一种反动态调试应用程序的方法,如图2所示,该方法包括:
步骤201:在所述应用程序的代码前面添加调用指令,其中,所述调用指令用于调用所述应用程序对应接口的ptrace函数。
为了实现在启动应用程序时,使该应用程序调用其自身的对应接口的ptrace函数,首先要在该应用程序的代码前面添加调用指令,该调用指令用于调用所述应用程序对应接口的ptrace函数。由于添加了调用指令后,该应用程序就不能被调试了,因此,在应用程序编写的过程中,先不添加调用指令,当程序员编写并调试完成后,在应用程序发布前,再添加调用指令。
步骤202:当启动应用程序时,调用所述应用程序对应接口的进程跟踪ptrace函数,并执行所述ptrace函数。
步骤203:检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数。
步骤204:如果是,则阻止所述其他应用程序调用所述ptrace函数。
进一步的,本发明实施例提供了另一种反动态调试应用程序的方法,如图3所示,该方法包括:
步骤301:在所述应用程序的代码前面添加调用指令,其中,所述调用指令用于调用所述应用程序对应接口的ptrace函数。
步骤302:当启动应用程序时,调用所述应用程序对应接口的ptrace函数,并执行所述ptrace函数。
步骤303:检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数。
步骤304:如果是,则阻止所述其他应用程序调用所述ptrace函数。
步骤305:输出所述应用程序被跟踪的信息。
当有其他应用程序跟踪该应用程序时,获得该应用程序被跟踪的信息,并输出该应用程序被跟踪的信息,以便提示用户应用程序的使用环境不安全,需要对应用程序的运行系统进行杀毒等。
进一步的,所述应用程序被跟踪的信息至少包括以下形式的一种或者任意种的组合,该形式包括:声音、文字、图片或视频。
具体地,应用程序被跟踪的信息可以是一种特殊的报警声音,或者是提示应用程序已被跟踪或者运行环境不安全的文字信息,或者是能够表示应用程序已被跟踪或者运行环境不安全的图片信息,也可以是一小段能够提示应用程序已被跟踪或者运行环境不安全的视频信息,也可以是以上形式的一种或者任意种的组合。当然,具体采用哪种形式的提示信息,本发明实施例均不进行限制。
本发明实施例提供了一种反动态调试应用程序的装置,如图4所示,所述装置包括:调用模块401,用于在启动应用程序时,调用所述应用程序对应接口的进程跟踪ptrace函数,并执行所述ptrace函数;检测模块402,用于检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数;阻止模块403,用于在所述检测模块402检测到有除所述应用程序以外的其他应用程序调用所述ptrace函数时,阻止所述其他应用程序调用所述ptrace函数。
进一步的,在启动所述应用程序时,所述调用模块401调用的所述ptrace函数的请求类型为PTRACE_TRACEME。
进一步的,如图5所示,所述装置还包括:调用指令添加模块404,用于在所述应用程序的代码前面添加调用指令,其中,所述调用指令用于调用所述应用程序对应接口的ptrace函数。
进一步的,如图6所示,所述装置还包括:跟踪信息输出模块405,用于输出所述应用程序被跟踪的信息。
进一步的,所述跟踪信息输出模块405输出的所述应用程序被跟踪的信息至少包括以下形式的一种或者任意种的组合,该形式包括:声音、文字、图片或视频。
本发明提供了一种反动态调试应用程序的方法及装置,通过在应用程序启动时,调用该应用程序的API的ptrace函数,使得该应用程序运行产生的进程成为其自身的父进程,从而阻止了其他调试器通过调用该应用程序的API的ptrace函数破解该应用程序。
显然,本领域技术人员应该明白,上述的本发明的各模块或各步骤可以通过如上所述的装置实施。可选地,本发明实施例可以用计算机装置可执行的程序来实现,从而可以将它们存储在存储装置中由处理器来执行,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等;或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。
以上仅是针对本发明的优选实施例及其技术原理所做的说明,而并非对本发明的技术内容所进行的限制,任何熟悉本技术领域的技术人员在本发明所公开的技术范围内,所容易想到的变化或替换,都应涵盖在本发明的保护范围内。
Claims (10)
1.一种反动态调试应用程序的方法,其特征在于,包括:
当启动应用程序时,调用所述应用程序对应接口的进程跟踪ptrace函数,并执行所述ptrace函数;
检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数;
如果是,则阻止所述其他应用程序调用所述ptrace函数。
2.根据权利要求1所述的反动态调试应用程序的方法,其特征在于,在启动所述应用程序时,调用的所述ptrace函数的请求类型为PTRACE_TRACEME。
3.根据权利要求1所述的反动态调试应用程序的方法,其特征在于,在调用所述应用程序对应接口的ptrace函数之前,还包括:
在所述应用程序的代码前面添加调用指令,其中,所述调用指令用于调用所述应用程序对应接口的ptrace函数。
4.根据权利要求1所述的反动态调试应用程序的方法,其特征在于,在阻止所述其他应用程序调用所述ptrace函数之后,还包括:
输出所述应用程序被跟踪的信息。
5.根据权利要求4所述的反动态调试应用程序的方法,其特征在于,所述应用程序被跟踪的信息至少包括以下形式的一种或者任意种的组合,该形式包括:声音、文字、图片或视频。
6.一种反动态调试应用程序的装置,其特征在于,包括:
调用模块,用于在启动应用程序时,调用所述应用程序对应接口的进程跟踪ptrace函数,并执行所述ptrace函数;
检测模块,用于检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数;
阻止模块,用于在所述检测模块检测到有除所述应用程序以外的其他应用程序调用所述ptrace函数时,阻止所述其他应用程序调用所述ptrace函数。
7.根据权利要求6所述的反动态调试应用程序的装置,其特征在于,在启动所述应用程序时,所述调用模块调用的所述ptrace函数的请求类型为PTRACE_TRACEME。
8.根据权利要求6所述的反动态调试应用程序的装置,其特征在于,所述装置还包括:
调用指令添加模块,用于在所述应用程序的代码前面添加调用指令,其中,所述调用指令用于调用所述应用程序对应接口的ptrace函数。
9.根据权利要求6所述的反动态调试应用程序的装置,其特征在于,所述装置还包括:
跟踪信息输出模块,用于输出所述应用程序被跟踪的信息。
10.根据权利要求9所述的反动态调试应用程序的装置,其特征在于,所述跟踪信息输出模块输出的所述应用程序被跟踪的信息至少包括以下形式的一种或者任意种的组合,该形式包括:声音、文字、图片或视频。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410102457.3A CN104932972B (zh) | 2014-03-19 | 2014-03-19 | 一种反动态调试应用程序的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410102457.3A CN104932972B (zh) | 2014-03-19 | 2014-03-19 | 一种反动态调试应用程序的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104932972A true CN104932972A (zh) | 2015-09-23 |
CN104932972B CN104932972B (zh) | 2018-10-09 |
Family
ID=54120144
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410102457.3A Active CN104932972B (zh) | 2014-03-19 | 2014-03-19 | 一种反动态调试应用程序的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104932972B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106778104A (zh) * | 2017-01-20 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 一种应用程序的反调试方法和系统 |
CN107092828A (zh) * | 2017-04-13 | 2017-08-25 | 深圳海云安网络安全技术有限公司 | 一种Android动态调试检测方法 |
CN107239698A (zh) * | 2017-05-27 | 2017-10-10 | 北京洋浦伟业科技发展有限公司 | 一种基于信号处理机制的反调试方法和装置 |
WO2017185568A1 (zh) * | 2016-04-28 | 2017-11-02 | 北京小米移动软件有限公司 | 一种管理应用程序的方法和装置 |
CN108021791A (zh) * | 2016-10-31 | 2018-05-11 | 腾讯科技(深圳)有限公司 | 数据保护方法及装置 |
CN108629184A (zh) * | 2018-05-18 | 2018-10-09 | 北京智游网安科技有限公司 | 一种ios用的sdk安全检测方法 |
CN109981580A (zh) * | 2019-02-25 | 2019-07-05 | 浪潮软件集团有限公司 | 一种防止cmsp被动态跟踪的安全方法和系统 |
CN112948241A (zh) * | 2021-02-09 | 2021-06-11 | 北京奇艺世纪科技有限公司 | 应用程序的反调试方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080250400A1 (en) * | 2006-10-06 | 2008-10-09 | International Business Machines Corporation | Method for System Call Interception in User Space |
CN101984409A (zh) * | 2010-11-10 | 2011-03-09 | 南京南瑞继保电气有限公司 | 一种用于Linux系统测试代码注入的方法 |
CN102346708A (zh) * | 2010-08-03 | 2012-02-08 | 中兴通讯股份有限公司 | 一种调试器及其调试方法 |
-
2014
- 2014-03-19 CN CN201410102457.3A patent/CN104932972B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080250400A1 (en) * | 2006-10-06 | 2008-10-09 | International Business Machines Corporation | Method for System Call Interception in User Space |
CN102346708A (zh) * | 2010-08-03 | 2012-02-08 | 中兴通讯股份有限公司 | 一种调试器及其调试方法 |
CN101984409A (zh) * | 2010-11-10 | 2011-03-09 | 南京南瑞继保电气有限公司 | 一种用于Linux系统测试代码注入的方法 |
Non-Patent Citations (5)
Title |
---|
ARROW: "Android ptrace简介", 《HTTP://BLOG.CSDN.NET/MYARROW/ARTICLE/DETAILS/9617673》 * |
JACK_JIA: "恶意软件反检测技术简介:反调试技术解析", 《HTTP://BLOG.CSDN.NET/ANDROIDSECURITY/ARTICLE/DETAILS/8910453》 * |
STONESHARP: "linux反调试方法", 《HTTP://BLOG.CSDN.NET/STONESHARP/ARTICLE/DETAILS/8211526》 * |
TOM: "Ptrace详解", 《HTTP://WWW.CNBLOGS.COM/TANGR206/ARTICLES/3094358.HTML》 * |
TWOON: "【译】玩转ptrace(一)", 《HTTP://WWW.CNBLOGS.COM/CATCH/P/3476280.HTML》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017185568A1 (zh) * | 2016-04-28 | 2017-11-02 | 北京小米移动软件有限公司 | 一种管理应用程序的方法和装置 |
US10114735B2 (en) | 2016-04-28 | 2018-10-30 | Beijing Xiaomi Mobile Software Co., Ltd. | Method, device and medium for managing application program |
CN108021791A (zh) * | 2016-10-31 | 2018-05-11 | 腾讯科技(深圳)有限公司 | 数据保护方法及装置 |
CN106778104A (zh) * | 2017-01-20 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 一种应用程序的反调试方法和系统 |
CN106778104B (zh) * | 2017-01-20 | 2019-10-25 | 武汉斗鱼网络科技有限公司 | 一种应用程序的反调试方法和系统 |
CN107092828A (zh) * | 2017-04-13 | 2017-08-25 | 深圳海云安网络安全技术有限公司 | 一种Android动态调试检测方法 |
CN107239698A (zh) * | 2017-05-27 | 2017-10-10 | 北京洋浦伟业科技发展有限公司 | 一种基于信号处理机制的反调试方法和装置 |
CN108629184A (zh) * | 2018-05-18 | 2018-10-09 | 北京智游网安科技有限公司 | 一种ios用的sdk安全检测方法 |
CN109981580A (zh) * | 2019-02-25 | 2019-07-05 | 浪潮软件集团有限公司 | 一种防止cmsp被动态跟踪的安全方法和系统 |
CN112948241A (zh) * | 2021-02-09 | 2021-06-11 | 北京奇艺世纪科技有限公司 | 应用程序的反调试方法、装置、电子设备及存储介质 |
CN112948241B (zh) * | 2021-02-09 | 2024-02-06 | 北京奇艺世纪科技有限公司 | 应用程序的反调试方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104932972B (zh) | 2018-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104932972A (zh) | 一种反动态调试应用程序的方法及装置 | |
US9767292B2 (en) | Systems and methods to identify security exploits by generating a type based self-assembling indirect control flow graph | |
JP5985631B2 (ja) | 信頼レベルのアクティブ化 | |
US10102155B2 (en) | Method and device of information protection for micro control unit chip | |
JP2016540268A (ja) | ウェイクロック使用を追跡する技術 | |
JP6984710B2 (ja) | コンピュータ装置およびメモリ管理方法 | |
RU2580016C1 (ru) | Способ передачи управления между областями памяти | |
CN109753347B (zh) | 一种实现驱动的系统及方法 | |
US20170017778A1 (en) | Providing Font Security | |
US20220075647A1 (en) | Methods and apparatus to protect open and closed operating systems | |
US10514972B2 (en) | Embedding forensic and triage data in memory dumps | |
KR20060063643A (ko) | 운영 체제의 성능을 향상시키는 방법 및 시스템 | |
TW201439775A (zh) | 基於能力的裝置驅動程式架構 | |
CN116126581B (zh) | 内存故障处理方法、装置、系统、设备及存储介质 | |
US9384015B2 (en) | Techniques for dynamically redirecting device driver operations to user space | |
WO2017076244A1 (zh) | 一种动态修复应用程序的方法、装置及相关系统 | |
CN113467656B (zh) | 一种屏幕触摸事件的通知方法和车机 | |
CN115185745A (zh) | 数据处理方法、系统、电子设备及计算机可读存储介质 | |
CN117377957A (zh) | 基于任务的访问权控制 | |
CN106203087B (zh) | 注入防护方法、系统、终端以及存储介质 | |
CN105844151B (zh) | 一种文件存储保护实现方法和系统 | |
JP2010039884A (ja) | ソフトウェア解析システム | |
CN117272412B (zh) | 中断控制寄存器保护方法、装置、计算机设备及存储介质 | |
KR101064650B1 (ko) | 리눅스 운영체제 기반의 시스템에서 usb 디바이스 드라이버의 커널 하드닝을 수행하는 방법 및 그 장치 | |
CN118051421A (zh) | Io时延故障的注入方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |