CN102760072A - 软件保护装置与计算机配合执行cpu指令的方法 - Google Patents

软件保护装置与计算机配合执行cpu指令的方法 Download PDF

Info

Publication number
CN102760072A
CN102760072A CN2012101458130A CN201210145813A CN102760072A CN 102760072 A CN102760072 A CN 102760072A CN 2012101458130 A CN2012101458130 A CN 2012101458130A CN 201210145813 A CN201210145813 A CN 201210145813A CN 102760072 A CN102760072 A CN 102760072A
Authority
CN
China
Prior art keywords
instruction
protecting equipment
computing machine
software protecting
register
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
Application number
CN2012101458130A
Other languages
English (en)
Other versions
CN102760072B (zh
Inventor
不公告发明人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Senseshield Technology Co Ltd
Original Assignee
Beijing Senselock Software Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Senselock Software Technology Co Ltd filed Critical Beijing Senselock Software Technology Co Ltd
Priority to CN201210145813.0A priority Critical patent/CN102760072B/zh
Publication of CN102760072A publication Critical patent/CN102760072A/zh
Application granted granted Critical
Publication of CN102760072B publication Critical patent/CN102760072B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明使软件保护装置可以模拟计算机CPU的指令提取、解码、执行和I/O并且可以跟计算机进行运行状态的交互。当计算机把当前的运行状态发送到软件保护装置时,由软件保护装置运行计算机CPU指令;当软件保护装置把运行状态传回计算机时,由计算机继续运行,通过这样的循环实现计算机与软件保护装置交互执行计算机的CPU指令,并且这种方法适用于任意架构的CPU。

Description

软件保护装置与计算机配合执行CPU指令的方法
技术领域
本发明涉及计算机技术领域,特别涉及一种计算机和软件保护装置配合执行计算机CPU指令的方法。
背景技术
在使用可移植代码的软件保护装置对软件进行保护时,由于软件保护装置中的CPU和计算机CPU的体系结构的差异,被保护软件中待移植的代码段并不能直接移植到软件保护装置中运行,通常的做法是按照被移植代码段的逻辑重新编写一段代码,然后将其编译成软件保护装置中能够运行的程序并下载到软件保护装置内,而且还要将原软件中被移植的代码段删除,换成访问软件保护装置的代码。这一系列操作非常耗时,而且还要求有一定的技术能力。如果在软件保护装置内设置一系列模块来模拟计算机CPU指令的提取、解析、执行以及I/O操作,这样的一个软件保护装置就相当于另一个计算机CPU,可以直接运行为计算机CPU编译的软件中的指令。当需要将软件中被保护的代码段移植到这样的软件保护装置中时,可以直接将被保护的代码拷贝到软件保护装置中即可,这样比现有的保护方式更为方便、快捷,而且这一列操作完全可以由软件自动由完成,对操作人员的技术要求会大大降低。 
发明内容
本发明涉及一种软件保护装置与计算机配合执行CPU指令的方法,所述软件保护装置中维护有模拟寄存器,其用于模拟计算机中寄存器的状态,所述软件保护装置还具有:
I/O单元,用于在所述软件保护装置中模拟所述计算机对所述计算机中内存的读写,以及在所述计算机与所述软件保护装置交换计算机运行状态时,与所述计算机交互所有的状态数据;
指令解析单元,用于解析所述软件保护装置当前正在模拟执行的CPU指令;
控制单元,用于判断所述当前正在模拟执行的CPU指令是否能在所述软件保护装置内执行;
指令执行单元,用于模拟所述当前正在模拟执行的CPU指令的功能,改变所述软件保护装置中所述模拟寄存器的内容;
所述计算机中包括:
配合单元,用于与所述软件保护装置中的I/O模块通信,控制所述计算机中的寄存器、内存或端口以执行所述CPU指令;
所述方法包括:
步骤1:所述计算机把计算机中当前寄存器数据发送到所述软件保护装置;
步骤2:所述软件保护装置使用所述计算机发送过来的所述寄存器数据初始化所述软件保护装置中的各个对应的模拟寄存器;
步骤3:所述软件保护装置获取指令;
步骤4:所述指令解析单元解析所述指令;
步骤5:所述控制模块根据解析结果判断是否结束所述指令;如果结束,则所述计算机继续执行后续指令;
步骤6:如果不结束,则所述控制模块继续判断所述指令是否能被所述指令执行单元执行;如果无法执行,则在所述计算机中执行所述指令;如果能够被所述指令执行单元执行,则由所述指令执行单元执行。
根据本发明的一个方面,在步骤5中,如果结束指令,则发送所述软件保护装置内各模拟寄存器的数据到所述计算机,所述配合单元接受所述各模拟寄存器的数据并设置所述计算机中对应的各个寄存器,然后由所述计算机继续向下执行。
根据本发明的一个方面,在步骤6中,如果所述指令无法被所述指令执行模块执行,则所述控制模块通过所述I/O模块把所述软件保护装置的各模拟寄存器的数据发送到所述计算机,再由所述计算机中的配合单元配合接受这些数据并设置所述计算机中对应的各个寄存器,然后在所述计算机中执行所述指令。
根据本发明的一个方面,所述无法执行的指令包括中断指令或异常指令。
附图说明
图1是本发明应用于x86架构的CPU时所涉及到的各模块示意图。
图2是本发明应用于x86架构的CPU时软件保护装置执行计算机指令时的流程图。
具体实施方式
图1是本发明所涉及到的软件保护装置和计算机中各模块的示意图。图1中软件保护装置中的箭头方向表示软件保护装置中执行计算机指令时经过各个模块的流程,计算机中的箭头方向表示计算机中的软件模块(也可称为配合单元)读写计算机的寄存器、内存或端口。
首先,在软件保护装置中具有模拟寄存器(图1中以“寄存器”表示),用于模拟计算机中寄存器,对应地模拟出计算机的CPU中各个寄存器的状态。
软件保护装置中还具有I/O模块,用于在软件保护装置中模拟计算机CPU对计算机中内存的读写,其中包括读写数据和读取指令。另外,在计算机与软件保护装置交换计算机运行状态时,所有的状态数据也通过I/O模块与计算机交互。此外,根据本发明的一个实施例,还可以采用缓存技术来提高软件保护装置对计算机内存读写的效率,而这种缓存技术的应用则由I/O模块实现。具体而言,对于内存的操作,为了提高效率,可采用缓存技术来维护软件保护装置内的计算机内存部分。举例而言,当某条计算机指令要访问的内存地址在软件保护装置维护的内存地址范围之内时,则直接操作;否则,先把软件保护装置当前维护的计算机内存写回计算机,再从计算机读取上述内存地址所在的范围的一块内存到软件保护装置,替换当前维护的这段内存,然后再进行操作,而不用把控制权交给计算机执行。
此外,根据本发明的一个实施例,由软件保护装置的I/O模块与计算机中的配合单元(即图1中的计算机内的软件模块)配合,直接读写计算机的内存。
软件保护装置中还具有指令解析模块,用于解析软件保护装置当前正在模拟执行的CPU指令。根据本发明的一个实施例,指令解析模块对当前正在模拟执行的CPU指令进行解析,从而正确识别出当前指令所要实现的功能。
软件保护装置中还具有控制模块,用于判断当前指令是否能在软件保护装置内执行。根据本发明,判断的依据条件可以是多样的。根据本发明的一个实施例,例如判断当前指令是否要操作软件保护装置维护的计算机状态范围之外的数据。另外,还可以通过一些自定义的条件来判断是否应该在软件保护装置内执行。例如某一段地址范围内的指令需要多次地循环执行,如果在软件保护装置内执行需要消耗较长的时间而影响性能,则可以通过控制模块判断当前指令是否在此范围内来决定是否需要切换到计算机来执行。
根据本发明的一个实施例,对于特定架构的CPU也可以添加不同的判断条件,例如对于x86架构的CPU而言,控制模块还需要判断当前指令是否是中断指令或是否会引发异常,对于x86的中断和异常需要跳转到中断处理程序和异常处理程序,所以需要将控制权交回计算机,由计算机处理完中断或异常后再切换回软件保护装置继续执行。
软件保护装置中还具有指令执行模块,用于模拟当前指令的功能,改变软件保护装置维护的计算机状态,即模拟寄存器的内容。
在软件保护装置内模拟出计算机运行状态,即模拟计算机CPU的各个寄存器的状态。根据本发明的一个实施例,计算机的运行状态包括的内容决定于CPU的架构,例如使用x86架构CPU的计算机,其运行状态包括寄存器数据、内存数据和计算机端口数据。软件保护装置中的模拟寄存器能够模拟计算机中寄存器的状态,通过在软件保护装置中维护若干个变量即可模拟计算机CPU的各对应寄存器。至于内存,由于软件保护装置容量的限制,只能模拟计算机内存的一小部分,当然也可以不对内存进行维护,对内存的操作完全由软件保护装置的I/O模块和计算机的软件模块配合,直接读写计算机的内存。对于内存方面的操作,为了提高效率,可以采用缓存技术来维护软件保护装置内的计算机内存部分,即当某条计算机指令要访问的内存地址在软件保护装置维护的内存地址范围之内时则直接操作,否则先把软件保护装置当前维护的计算机内存写回计算机,再从计算机读取上述内存地址所在的范围的一块内存到软件保护装置,替换当前维护的这段内存,然后再进行操作,而不用把控制权交还给计算机来执行。
当然,软件保护装置不可能完全模拟计算机的运行状态,根据本发明的一个实施例,以x86架构的CPU为例,软件保护装置只能模拟计算机CPU的寄存器数据和部分内存数据,无法模拟全部内存和计算机端口的状态。根据本发明的一个实施例,以x86架构为例,软件保护装置无法模拟状态的CPU指令包括中断指令、异常指令等。对于本领域的技术人员而言,对于不同架构的CPU有不同的无法模拟的指令。
对于无法模拟状态的CPU指令,则可以通过交换运行状态的方法,将控制权交给计算机来执行,执行完毕后再交换回软件保护装置继续执行。根据本发明的一个实施例,这种交换运行状态的方法包括,通过软件保护装置的I/O模块和计算机中的软件模块之间的配合实现计算机CPU各寄存器与软件保护装置内维护的各对应寄存器之间的数据交换,这样来实现计算机和软件保护装置运行状态的交换。
计算机中具有配合单元,即与软件保护装置配合工作的模块(即(图1中的“计算机内的软件模块”)。计算机内的配合单元的功能为配合软件保护装置的I/O模块实现软件保护装置与计算机的状态切换,或者对计算机内存进行读写操作。如果使用了上述的缓存技术,也需要此模块配合软件保护装置的I/O模块来实现。计算机内的软件模块的工作方式为:循环检测软件保护装置发送到计算机的各种预先定义好的各种命令,根据不同的命令协助软件保护装置执行不同的操作,例如对内存的读写、对端口的读写或者交换各寄存器的数据等。
软件保护装置与计算机配合工作时,当需要提取指令时,如果指令在软件保护装置中,则由软件保护装置的I/O模块直接提取;如果指令在计算机内存中,则由软件保护装置的I/O模块与计算机中的配合单元(即图1中的计算机内的软件模块)配合提取。然后由I/O模块将提取出的指令发送给指令解析模块进行解析。指令解析模块完成指令解析后,根据解析结果,由控制模块判断是否要在软件保护装置内执行当前指令。判断的条件可以有多种,例如软件保护装置是否能够执行这条指令或者根据一些自定义条件判断当前指令是否应该在软件保护装置内执行。如果不能在软件保护装置内执行,则通过I/O模块和计算机软件模块配合,将软件保护装置当前的运行状态交换到计算机,由计算机来执行这条指令;否则,则由软件保护装置中的指令执行模块执行这条指令。指令的执行结果就是对运行状态的改变,运行状态包括寄存器、内存和端口的数据内容。其中软件保护装置内维护了计算机中的寄存器,根据本发明的一个实施例,软件保护装置内也可以维护一部分内存数据。如果当前指令的执行结果只是改变了寄存器内容或者改变的内存数据在软件保护装置维护的内存范围内,则由I/O模块直接改变软件保护装置维护的运行状态;否则,由I/O模块与计算机的软件模块配合来改变计算机的内存或端口等运行状态。
综上所述,软件保护装置内的I/O模块、指令解析模块、控制模块、指令执行模块,配合计算机中的计算机软件模块,通过交换计算机的运行状态实现计算机与软件保护装置交互执行计算机的CPU指令。具体而言,通过软件保护装置的I/O模块和计算机中的软件模块的通信,实现计算机运行状态的交换,即计算机CPU各寄存器内容的交换来交互执行计算机指令。此方法适用于任意架构的CPU,对于本领域的技术人员而言,根据上述x86构架的实现方式,则可以对其他构架形式的CPU指令实现类似的处理流程。
图2是本发明提出的软件保护装置执行计算机指令的流程图,其中虚线左侧部分是在软件保护装置内进行的操作,虚线右侧部分是在计算机内进行的操作。整个过程首先从计算机发送寄存器数据到软件保护装置内开始,即步骤201开始。
步骤201:计算机把当前各寄存器数据发送到软件保护装置。具体发送哪些寄存器的数据要根据实际情况而定。根据本发明的一个实施例,对于32位的x86架构CPU,如果软件保护装置只执行x86的一般用途指令,即GPI(General Purpose Instructions),那么只需使用到EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI、EFLAGS、EIP和CS、DS、SS、ES、FS、GS这些寄存器即可。上述过程中,由软件保护装置中I/O模块接收由计算机中的软件模块发送过来的数据,通过I/O模块与计算机内的软件模块的配合,实现计算机到软件保护装置以及软件保护装置到计算机之间的数据交换。
步骤202:软件保护装置使用计算机发送过来的各寄存器数据初始化软件保护装置内维护的各个模拟寄存器。
步骤203:由软件保护装置的I/O模块根据EIP所指示的指令地址获取指令。如果软件保护装置内保存了一段计算机指令,而且EIP指示的指令地址在软件保护装置保存的这段地址内,就直接从软件保护装置内读取这条指令,否则,通过I/O模块与计算机软件模块的配合,从计算机的内存中读取这条指令。
步骤204:软件保护装置的指令解析模块开始解析当前指令。根据本发明的一个实施例,解析指令即理解当前指令为何种指令。
步骤205:完成指令解析后,由软件保护装置的控制模块判断是否应该结束执行,转由计算机继续向下执行。根据本发明的一个实施例,以指令的地址为判断条件,例如指令的地址超出了某个范围便不再由软件保护装置来执行。根据本发明的一个实施例,虽然以指令地址为判断条件的话在解析指令之前就能够进行判断,但是一般其他条件都需要首先对指令进行解析,例如判断当前指令是否为中断指令或是否会引发异常等,所以控制模块放到了指令解析模块之后。如果判断结果为应该结束,则发送软件保护装置内各模拟寄存器的数据到计算机,计算机内的软件模块接受这些数据并设置计算机的对应各寄存器,然后由计算机继续向下执行,即步骤208、209和210所示的内容。
步骤206:如果当前指令不符合结束条件,则控制模块继续判断当前指令是否能被软件保护装置的执行指令模块所执行。对于一般的操作寄存器、内存的指令,执行模块是可以执行的,但是对于一些特殊指令,例如CPUID指令获取CPU的信息、中断指令、会引发异常的指令(如除0异常),软件保护装置内的执行模块是无法执行的。对于执行模块无法执行的指令,控制模块需要通过I/O模块把软件保护装置的各模拟寄存器数据发送给计算机,再由计算机中的软件模块配合接受这些数据并设置对应的计算机的各寄存器,然后在计算机内将当前指令保存在一个固定的位置并执行当前指令,也就是步骤211、212和213所示的内容。
步骤207:如果当前指令通过了控制模块的检查,能够被软件保护装置正常执行,则由软件保护装置中的执行模块执行这条指令。
如果当前指令需要读写寄存器,则直接对软件保护装置内的模拟寄存器进行读写。
如果要读写内存,则要判断要读写的内存地址是否在软件保护装置保留的计算机内存地址范围内,如果是,则直接读写软件保护装置内保留的内存即可,否则需要通过I/O模块与计算机软件模块配合完成内存的读写。
如果要读写计算机端口则必须通过I/O模块与计算机的软件模块配合完成。执行完指令后再跳转到步骤203获取下一条指令,进入下一次循环。
步骤208:判断应该结束执行,则通过I/O模块将软件保护装置中的模拟寄存器数据发送到计算机。
步骤209:计算机使用软件保护装置发送的数据设置计算机内部的寄存器。
步骤210:计算机继续向下执行。
步骤211:判断出当前指令不能被软件保护装置的执行指令模块所执行,则将软件保护装置中的模拟寄存器数据和当前指令通过I/O模块发送到计算机;
步骤212:计算机使用软件保护装置发送的数据设置寄存器;
步骤213:计算机将当前指令保存在一个固定位置并执行当前指令。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。

Claims (4)

1. 一种软件保护装置与计算机配合执行CPU指令的方法,所述软件保护装置中具有模拟寄存器,用于模拟与所述软件保护装置配合工作的计算机中寄存器的状态,其特征在于,所述软件保护装置还具有:
I/O单元,用于在所述软件保护装置中模拟所述计算机对所述计算机中内存的读写,以及在所述计算机与所述软件保护装置交换计算机运行状态时,与所述计算机交互所有的状态数据;
指令解析单元,用于解析所述软件保护装置当前正在模拟执行的CPU指令;
控制单元,用于判断所述当前正在模拟执行的CPU指令是否能在所述软件保护装置内执行;
指令执行单元,用于模拟所述当前正在模拟执行的CPU指令的功能,改变所述软件保护装置中所述模拟寄存器的内容;
所述计算机中包括:
配合单元,用于与所述软件保护装置中的I/O模块通信,控制所述计算机中的寄存器、内存或端口以执行所述CPU指令;并且所述配合单元与所述软件保护装置中的所述I/O单元配合工作,实现所述软件保护装置与所述计算机之间的运行状态的交互;
所述方法包括:
步骤1:所述计算机把计算机中当前寄存器数据发送到所述软件保护装置;
步骤2:所述软件保护装置使用所述计算机发送过来的所述寄存器数据初始化所述软件保护装置中的各个对应的模拟寄存器;
步骤3:所述软件保护装置获取指令;
步骤4:所述指令解析单元解析所述指令;
步骤5:所述控制模块根据解析结果判断是否结束所述指令;如果结束,则所述计算机继续执行后续指令;
步骤6:如果不结束,则所述控制模块继续判断所述指令是否能被所述指令执行单元执行;如果无法执行,则在所述计算机中执行所述指令;如果能够被所述指令执行单元执行,则由所述指令执行单元执行。
2. 根据权利要求1所述的方法,其特征在于,步骤5中,如果结束指令,则发送所述软件保护装置内各模拟寄存器的数据到所述计算机,所述配合单元接受所述各模拟寄存器的数据并设置所述计算机中对应的各个寄存器,然后由所述计算机继续向下执行。
3. 根据权利要求1-2所述的方法,其特征在于,在步骤6中,如果所述指令无法被所述指令执行模块执行,则所述控制模块通过所述I/O模块把所述软件保护装置的各模拟寄存器的数据发送到所述计算机,再由所述计算机中的配合单元配合接受这些数据并设置所述计算机中对应的各个寄存器,然后在所述计算机中执行所述指令。
4. 根据权利要求1-3所述的方法,其特征在于,所述无法执行的指令包括中断指令或异常指令。
CN201210145813.0A 2012-05-12 2012-05-12 软件保护装置与计算机配合执行cpu指令的方法 Active CN102760072B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210145813.0A CN102760072B (zh) 2012-05-12 2012-05-12 软件保护装置与计算机配合执行cpu指令的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210145813.0A CN102760072B (zh) 2012-05-12 2012-05-12 软件保护装置与计算机配合执行cpu指令的方法

Publications (2)

Publication Number Publication Date
CN102760072A true CN102760072A (zh) 2012-10-31
CN102760072B CN102760072B (zh) 2015-12-16

Family

ID=47054538

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210145813.0A Active CN102760072B (zh) 2012-05-12 2012-05-12 软件保护装置与计算机配合执行cpu指令的方法

Country Status (1)

Country Link
CN (1) CN102760072B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1987886A (zh) * 2006-12-22 2007-06-27 北京飞天诚信科技有限公司 一种在软件保护装置中实现软件保护的方法与装置
CN101038611A (zh) * 2006-03-14 2007-09-19 北京深思洛克数据保护中心 一种软件保护的方法
CN101216775A (zh) * 2008-01-03 2008-07-09 北京深思洛克数据保护中心 一种软件程序的保护方法、装置及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101038611A (zh) * 2006-03-14 2007-09-19 北京深思洛克数据保护中心 一种软件保护的方法
CN1987886A (zh) * 2006-12-22 2007-06-27 北京飞天诚信科技有限公司 一种在软件保护装置中实现软件保护的方法与装置
CN101216775A (zh) * 2008-01-03 2008-07-09 北京深思洛克数据保护中心 一种软件程序的保护方法、装置及系统

Also Published As

Publication number Publication date
CN102760072B (zh) 2015-12-16

Similar Documents

Publication Publication Date Title
JP6507435B2 (ja) 命令エミュレーションプロセッサ、方法、およびシステム
JP5984865B2 (ja) 命令エミュレーションプロセッサ、方法、およびシステム
CN100555218C (zh) 用于改善片上仿真系统中高级语言的仿真速度的装置和方法
US9804851B2 (en) Operand size control
EP3362889B1 (en) Move prefix instruction
CN101339581B (zh) 基于中断通讯的嵌入式系统的在线调试仿真方法
US9081564B2 (en) Converting scalar operation to specific type of vector operation using modifier instruction
CN104205064A (zh) 将程序事件记录事件向运行时间检测事件的变换
CN103119566A (zh) 数据处理装置的除错
CN101256504A (zh) 一种支持x86虚拟机的risc处理器装置及方法
CN103714288B (zh) 一种数据流跟踪方法
CN101216756B (zh) 一种risc处理器装置及其模拟浮点栈操作的方法
CN109416632A (zh) 寄存器还原分支指令
WO2002057908A2 (en) A superscalar processor having content addressable memory structures for determining dependencies
CN105190551A (zh) 具有存储器区域交换机制的双引导系统
CN108733412A (zh) 一种运算装置和方法
CN101216755B (zh) Risc处理器及其浮点寄存器的非对齐访存方法
CN102760072A (zh) 软件保护装置与计算机配合执行cpu指令的方法
CN101187858B (zh) 一种risc处理器装置及其多模式下数据处理方法
CN115292000A (zh) 一种虚拟机动态迁移的方法、装置及电子设备
CN106293873A (zh) 一种准确获取虚拟机控制块(vmcs)中关键数据位置的方法
US7404048B2 (en) Inter-cluster communication module using the memory access network
CN103282876A (zh) 数据元素的条件选择
US6668315B1 (en) Methods and apparatus for exchanging the contents of registers
Tao et al. Design and Implementation of SPARC V8 CPU Simulator in Virtualized Verification System

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: BEIJING SHENSI SHUDUN SCIENCE + TECHNOLOGY CO., LT

Free format text: FORMER OWNER: BEIJING SENSELOCK SOFTWARE TECHNOLOGY CO., LTD.

Effective date: 20150812

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20150812

Address after: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Applicant after: BEIJING SHENSI SHUDUN TECHNOLOGY Co.,Ltd.

Address before: 100022 Beijing City, Haidian District Zhongguancun South Street No. 8 Building 1201 Zhucheng

Applicant before: Beijing Senselock Software Technology Co.,Ltd.

C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee
CP03 Change of name, title or address

Address after: 100193 Beijing, Haidian District, East West Road, No. 10, East Hospital, building No. 5, floor 5, layer 510

Patentee after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

Address before: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Patentee before: BEIJING SHENSI SHUDUN TECHNOLOGY Co.,Ltd.

CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee after: Beijing Shendun Technology Co.,Ltd.

Address before: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.