CN103413075B - 一种通过虚拟机保护java可执行程序的方法及设备 - Google Patents

一种通过虚拟机保护java可执行程序的方法及设备 Download PDF

Info

Publication number
CN103413075B
CN103413075B CN201310287243.3A CN201310287243A CN103413075B CN 103413075 B CN103413075 B CN 103413075B CN 201310287243 A CN201310287243 A CN 201310287243A CN 103413075 B CN103413075 B CN 103413075B
Authority
CN
China
Prior art keywords
code
virtual machine
function
jvm
local
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
Application number
CN201310287243.3A
Other languages
English (en)
Other versions
CN103413075A (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 Senseshield 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 Senseshield Technology Co Ltd filed Critical Beijing Senseshield Technology Co Ltd
Priority to CN201310287243.3A priority Critical patent/CN103413075B/zh
Publication of CN103413075A publication Critical patent/CN103413075A/zh
Application granted granted Critical
Publication of CN103413075B publication Critical patent/CN103413075B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种保护JAVA可执行程序的方法和设备。该方法创建一个本地动态链接库文件,枚举受保护JAVA软件中的.class文件,分析该.class文件中的JVM代码,随机抽取代码片段,原位置替换为对native方法的调用,在本地动态链接库中生成导出函数,使用自定义的虚拟机实现抽取出代码片段的功能。通过本发明提供的方法,可以有效防止JAVA软件的代码和逻辑被逆向和破解,提高了软件的安全强度。

Description

一种通过虚拟机保护JAVA可执行程序的方法及设备
技术领域
本发明涉及软件保护领域,特别涉及一种保护JAVA可执行程序的方法及设备。
背景技术
JAVA软件一般由一些资源文件和JAVA可执行文件(单独的.class文件或者包装在.jar或.war包中的.class文件)组成。JAVA可执行文件是能被JAVA虚拟机执行的二进制文件,其代码是与平台无关的,格式遵循JAVA虚拟机规范,很容易被一些反编译分析工具还原为JAVA源代码,导致软件的逻辑和流程被泄露和窃取。
在JAVA语言中,类对象的方法函数有两种类型:普通方法和本地方法。普通方法是由JAVA语言编写编译成JAVA指令代码,运行时由JAVA虚拟机(JAVAVirtualMachine,JVM)执行;另一类本地方法(NativeMethod),它是通过JNI(JAVANativeInterface,JAVA本地调用)的接口访问外部的运行在本地操作系统的库。JNI实现了JAVA程序和外部库之间的相互调用,通常用来为JAVA程序提供非JAVA语言实现的功能。
软件由一个或多个JAVA可执行文件(如.jar、.war或者.class)和一个或者多个本地动态链接库文件(如.dll或者.so等格式)组成。JAVA中的可执行文件中的代码会调用动态链接库中导出接口(interface),实现特定的功能。类(class)是JAVA的基本概念,.jar文件中包括多个.class文件(jar包和war包等都是由若干.class文件和资源文件组成),对其不再进行详细描述。
目前常见的JAVA软件保护手段是对.class文件中的JVM(JAVAVirtualMachineJAVA,虚拟机)代码进行混淆处理,或借助于自定义的ClassLoader,将.class文件加密存储,加载到JVM时才解密。前者是在JVM指令的层面进行处理,受到JVM规范的限制,且自动化算法的效果还不够理想(常见的自动化算法包括名称和符号混淆,但是不易自动实现复杂的流程和类关系);而后者在JVM加载.class文件后,内存中就有原始的.class代码,容易受到内存DUMP(内存DUMP是将JVM运行时进程内存中的内容做"快照"并保存到文件)的攻击。
发明内容
为了防止JAVA软件的代码和逻辑被逆向和破解,本发明提供了一种保护JAVA可执行程序的方法及设备。首先创建一个本地动态链接库文件,枚举受保护JAVA软件中的.class文件,分析该.class文件中的JVM代码,随机抽取JVM代码中的部分代码片段,在所抽取的部分代码片段的原位置处替换为对native方法(即本地方法)的调用,在本地动态链接库中插入自定义虚拟机的代码,其中所述插入的虚拟机的代码所实现的功能与被抽取的代码等效,然后生成导出函数,运行时通过调用自定义虚拟机执行等效代码实现所述被抽取出的部分代码片段的功能。通过本发明提供的方法,可以提高软件的安全强度。
本发明不仅适用于windows平台,也适用于其他使用动态库机制的操作系统。
一种保护JAVA可执行程序的方法,具体步骤包括:
1.创建一个本地动态连接库文件;
2.枚举受保护的JAVA软件中的.class文件;
3.分析该.class文件中的JVM代码,随机选取代码片段;
4.将选中的代码片段从.class文件中抽去,原位置替换为对native方法的调用;
5.在步骤1中的本地动态链接库中,生成一个导出函数,函数名称与步骤4中的native方法对应,在所述导出函数的函数体中插入自定义虚拟机的代码(该代码逐条模拟JAVA代码片段中的指令),实现步骤4中抽取出的代码片段的功能。
6.回到步骤2,继续枚举,直至结束。
根据本发明的一个方面,所述步骤1中的本地动态链接库文件名称是随机的。
根据本发明的一个方面,所述步骤3中为便于自动化实现,抽取代码片段遵循单入单出和堆栈平衡原则。所述单入单出和堆栈平衡原则,是指执行流程只能从所述代码片段开头处进入这段代码,无法从所述代码片段外跳转到所述代码片段中间,并且只能从所述代码片段结尾处离开这段代码,无法从所述代码片段中跳转到代码片段外;所述代码片段中的基本运算是完整的,进出所述代码片段时不涉及JVM堆栈中的临时变量。这两个原则都可以通过静态分析JVM指令实现。
根据本发明的一个方面,步骤4中native方法名称是随机的。
根据本发明的一个方面,步骤5中,使用自定义指令集的虚拟机指令逐条模拟代码片段中的指令。JVM中常见的访问类、对象等指令、算数和控制转移等指令,在自定义虚拟机中都有对应的等效功能指令(不一定是一一对应的关系,一条JVM指令可能转换为多条自定义虚拟机指令,多条JVM指令也可能转换为一条自定义虚拟机指令,指令的格式也与JVM不同)。在程序运行时,自定义虚拟机指令最终还是由自定义虚拟机解释代码(本地代码)模拟(必要的访问JVM的功能可通过JNI实现)。
一种保护JAVA可执行程序的装置,具体包括:
枚举模块,用于枚举受保护的JAVA软件中的.class文件,并能从.jar、.war包中提取.class文件;
分析模块,用于分析.class文件中的JVM代码,根据单入单出和堆栈平衡原则来选取代码片段;
替换代码模块,用于将选中的代码片段从.class文件中抽取出去,在被抽取的代码片段的原位置处替换为对一个随机命名的native方法的调用;
生成自定义虚拟机指令模块,用于生成一个本地代码导出函数,并在函数中插入自定义虚拟机指令,实现所述被抽取出的代码片段的功能。
虚拟机解释模块:由一系列的本地代码,搭配必要的JNI功能,解释导出函数中的自定义虚拟机指令。
使用本发明保护后的JAVA软件中,代码的逻辑被分散到本地动态库文件中,可以较好的防范JVM层面的反编译静态分析,而且由于部分逻辑被替换为自定义虚拟机指令,流程分散在JVM的内外,增加了分析和破解的难度。另外,本地动态库中的代码是由自定义虚拟机解释运行的,JVM中不可能有替换前的代码,这样免受DUMP的攻击。因此本发明较好的保护了软件的逻辑和流程,以及运行时的代码和数据安全,并能够提供自动化的算法实现,提高了软件的安全性。
附图说明
图1为按照本发明的一种保护JAVA可执行程序的方法和设备的实施例1的流程图。
图2为按照本发明的一种保护JAVA可执行程序的方法和设备的一优选实施例的整体流程示意图。
图3为按照本发明的一种保护JAVA可执行程序的方法和设备的结构框图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
根据本发明的一个实施例,如图2所示,提供一种保护JAVA可执行程序的方法,具体步骤包括:
1.创建一个本地动态连接库文件;
2.枚举受保护的JAVA软件中的.class文件;
3.分析该.class文件中的JVM代码,随机选取代码片段;
4.将选中的代码片段从.class文件中抽去,原位置替换为对native方法的调用;
5.在步骤1中的本地动态链接库中,生成一个导出函数,函数名称与步骤4中的native方法对应,在所述导出函数的函数体中插入自定义虚拟机指令,其中所述插入的虚拟机的代码所实现的功能与被抽取的代码等效,用于实现步骤4中抽取出的代码片段的功能。
6.回到步骤2,继续枚举,直至结束。
根据本发明的一个方面,所述步骤1中的本地动态链接库文件名称可以是随机的。
根据本发明的一个方面,所述步骤3中为便于自动化实现,抽取代码片段遵循单入单出和堆栈平衡原则。
根据本发明的一个方面,步骤4中native方法名称可以是随机的。
根据本发明的一个方面,步骤5中逐条模拟代码片段中的JVM指令包括对访问类、对象等指令、算术和控制等指令。自定义虚拟机指令与JVM指令不一定一一对应,且格式不同,最终由虚拟机解释代码(本地代码)解释执行自定义虚拟机指令(必要的访问JVM的功能借助JNI实现)。
所述单入单出和堆栈平衡原则,即执行流程是只能从片段开头进入这段代码,不可以从片段外跳转到片段中间,只能从片段结尾离开这段代码,不可以在片段中跳转到外面。并且片段中基本运算是完整的,进出片段时不涉及JVM堆栈中的临时变量。这两个原则都可以通过静态分析JVM指令实现。
根据本发明的一个实施例,如图3所示,提供一种保护JAVA可执行程序的设备,具体包括:
枚举模块,用于枚举受保护的JAVA软件中的.class文件,并能从.jar、.war包中提取.class文件。
分析模块,用于分析.class文件中的JVM代码,根据单入单出和堆栈平衡的原则选取代码片段。
替换代码模块,用于将选中的代码片段从.class文件中抽取出去,原位置替换为对一个随机命名的native方法的调用。
生成自定义虚拟机指令模块,用于生成一个本地代码导出函数,并在本地代码导出函数中插入自定义虚拟机指令,实现所述被抽取出的代码片段的功能。
自定义虚拟机解释模块,由一系列的本地代码,搭配必要的JNI功能,解释本地代码导出函数中的自定义虚拟机指令。
作为优选,本实施例的保护可执行程序的设备还包括加密模块,用于对导出函数中的自定义虚拟机代码加密。其中,由虚拟机解释代码在运行时解密。
本发明创建一个本地动态链接库文件,枚举受保护JAVA软件中的.class文件,分析该.class文件中的JVM代码,随机抽取代码片段,原抽取位置替换为对native(本地方法)方法的调用,在本地动态链接库中生成导出函数,插入自定义虚拟机代码,实现抽取出代码片段的功能。使用本发明保护后的JAVA软件中,代码的逻辑被分散到本地动态库文件中,可以较好的防范JVM层面的反编译静态分析,而且由于部分逻辑被替换为自定义虚拟机代码,流程分散在JVM的内外,增加了分析和破解的难度。另外,本地动态库中的代码是由自定义虚拟机解释执行的,JVM中不可能有替换前的代码,这样一来,免受DUMP的攻击。因此本发明较好的保护了软件的逻辑和流程,以及运行时的代码和数据安全,并能够提供自动化的算法实现,提高了软件的安全性。
实施例1
根据本发明的一个实施例,参见图1,图1包括本实施例中各部分的代码示意片段。具体实例如下:某JAVA编写的软件,源代码中有一个类MyClass,其中定义了三个字段a、b、c和一个实例方法Mul,该方法的逻辑是将字段b与c的值相乘,结果赋给字段a。
Java源代码在编译时,会为每一个类生成一个.class文件,该.class文件的结构是在JVM文档中定义的,是一系列属性和值的集合。通过解析.class文件中的类名称相关属性,可以得知它来自于源代码中的哪个类;再解析方法表属性,可以得到类中所有方法的列表;解析每一个方法的Code属性,可以得到方法的JVM字节码。
例如图1中所示源代码编译后对应MyClass.class文件,在解析出的方法表中有Mul方法,字节码(JVM指令)如下,即,该段源代码编译后,生成的.class文件中会有如下JVM指令与Mul方法的逻辑对应:(仅为示意,实际的JVM指令会更复杂)
loadMyClass.a//将当前对象的a字段加载到JVM运行堆栈
loadMyClass.c//将当前对象的c字段加载到JVM运行堆栈
mul//将堆栈中的两个数弹出并相乘,将运算结果压栈
setFieldMyClass.b//将堆栈中的数弹出并保存到当前对象的b字段
根据JVM文档,字节码中的跳转指令都只限于方法内部,即不会跳转到其他方法的代码中(call指令也只能转移到其他方法的代码起始),因此方法是“单入”的;又因为所有跳转指令的目标位置是静态的(即在编译时就能确定,没有寄存器和间接转移,包括异常处理等也是静态的),所以可以将方法中每一条JVM指令列成一张表,分析并标记出每一条指令是否是跳转或call指令,以及是否为可能的跳转目的地。考虑由连续的若干条JVM指令组成的代码片段,如果它们都不是跳转或call指令(或有跳转但目的地也在片段内),也不是跳转目的地(或是目的地但都来自区间内),则这个片段是单入单出的。
JVM是基于堆栈的,每一条指令的执行对堆栈的影响在文档中都有规定。如loadint指令会向堆栈中压入一个字,而mulint会弹出2个,再压入1个,总计相当于减少一个字,这些也都是编译时可静态确定的。对方法中JVM指令列表,并用一个堆栈指针来记录每条指令执行对堆栈的影响。如果某单入单出区间中的连续若干条JVM指令,执行后堆栈指针不变,则这个子区间是堆栈平衡的。上面示意的JVM指令区间,即是单入单出和堆栈平衡的。
用本发明的方法进行保护后,.class文件中的以上JVM指令被抽去,替换为对本地方法native_fun123的调用。而新增的本地动态链接库中导出了native_fun123函数,函数体中的自定义虚拟机指令与以上JVM指令等效。
可以看到,保护后的软件中已经没有Mul方法的JVM指令。而本地动态库中的导出函数中,也只有自定义虚拟机的指令。
本方法不仅适用于windows平台,也适用于其他使用动态库机制的操作系统。其他操作系统使用时,方法步骤与windows平台步骤基本相同,此处不再赘述。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种保护JAVA可执行程序的方法,其特征在于,包括如下步骤:
步骤1:创建本地动态链接库文件;
步骤2:枚举受保护的JAVA可执行程序中的.class文件;
步骤3:分析所述.class文件中的JVM代码,然后根据单入单出和堆栈平衡的原则选取JVM代码中的代码片段;
步骤4:将选中的所述代码片段从.class文件中抽去,在所述代码片段的原位置处替换成对本地方法的调用;
步骤5:在所述本地动态链接库中,生成本地代码导出函数,所述本地代码导出函数的名称与所述本地方法对应,并且在所述导出函数的函数体中插入自定义虚拟机指令,其中所述插入的虚拟机的代码所实现的功能与被抽取的代码等效,用于实现步骤4中所抽取出的代码片段的功能;
步骤6:返回步骤2,继续枚举,直至结束。
2.根据权利要求1所述的方法,其特征在于,所述步骤1中的本地动态链接库文件名称是随机的,或者步骤4中本地方法名称是随机的。
3.根据权利要求1所述的方法,其特征在于,步骤5中逐条模拟代码片段中的指令包括对访问类、对象的指令使用JNI模拟。
4.根据权利要求1所述的方法,其特征在于,步骤5中逐条模拟代码片段中的JVM指令包括访问类、对象的指令以及算术和控制指令。
5.一种保护JAVA可执行程序的设备,其特征在于,包括:
枚举模块,用于枚举受保护的JAVA软件中的.class文件;
分析模块,用于分析.class文件中的JVM代码,根据单入单出和堆栈平衡的原则选取JVM代码中的代码片段;
替换代码模块,将选中的所述代码片段从所述.class文件中抽去,在所述代码片段的原位置处替换成对本地方法的调用;
生成自定义虚拟机指令模块,用于生成本地代码导出函数,并在本地代码导出函数中插入自定义虚拟机指令,实现所述被抽取出的代码片段的功能;
自定义虚拟机解释模块,由一系列的本地代码,搭配必要的JNI功能,解释本地代码导出函数中的自定义虚拟机指令。
6.根据权利要求5所述的保护JAVA可执行程序的设备,其特征在于,还包括:加密/解密模块,用于对本地代码生成模块进行加密/解密。
CN201310287243.3A 2013-07-10 2013-07-10 一种通过虚拟机保护java可执行程序的方法及设备 Active CN103413075B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310287243.3A CN103413075B (zh) 2013-07-10 2013-07-10 一种通过虚拟机保护java可执行程序的方法及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310287243.3A CN103413075B (zh) 2013-07-10 2013-07-10 一种通过虚拟机保护java可执行程序的方法及设备

Publications (2)

Publication Number Publication Date
CN103413075A CN103413075A (zh) 2013-11-27
CN103413075B true CN103413075B (zh) 2016-05-04

Family

ID=49606086

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310287243.3A Active CN103413075B (zh) 2013-07-10 2013-07-10 一种通过虚拟机保护java可执行程序的方法及设备

Country Status (1)

Country Link
CN (1) CN103413075B (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104680039B (zh) * 2013-11-28 2019-02-26 腾讯科技(深圳)有限公司 一种应用程序安装包的数据保护方法及装置
CN103902859A (zh) * 2013-12-25 2014-07-02 武汉安天信息技术有限责任公司 基于JAVA下hook技术的代码保护方法及系统
CN104239757B (zh) * 2014-09-30 2017-04-19 北京奇虎科技有限公司 应用程序防止逆向的方法及装置、运行方法及终端
CN105279399A (zh) * 2015-10-30 2016-01-27 百度在线网络技术(北京)有限公司 应用防破解方法和装置
CN105512521A (zh) * 2015-12-25 2016-04-20 北京奇虎科技有限公司 一种软件安装包的加固保护方法和系统
CN106250124B (zh) * 2016-07-25 2020-01-21 百富计算机技术(深圳)有限公司 功能模块跨平台运行的实现方法和装置
CN108733988B (zh) * 2017-04-19 2023-01-24 北京梆梆安全科技有限公司 安卓平台上可执行程序的保护方法
CN108932406B (zh) * 2017-05-18 2021-12-17 北京梆梆安全科技有限公司 虚拟化软件保护方法和装置
CN107220528A (zh) * 2017-07-21 2017-09-29 北京深思数盾科技股份有限公司 Java程序的保护与运行方法、装置和终端
CN107729725A (zh) * 2017-10-09 2018-02-23 南京南瑞集团公司 一种基于虚拟机指令修改的Android应用加固系统及方法
CN107992723A (zh) * 2017-11-29 2018-05-04 南京莱斯信息技术股份有限公司 一种基于动态链接库的Java源码保护方法
CN109241707A (zh) * 2018-08-09 2019-01-18 北京邮电大学 应用程序的混淆方法、装置和服务器
CN109325343B (zh) * 2018-09-17 2021-08-10 北京深思数盾科技股份有限公司 Java程序执行方法及装置
CN109815718A (zh) * 2019-01-18 2019-05-28 国能日新科技股份有限公司 War程序源文件加密保护方法及系统
CN110309630B (zh) * 2019-06-28 2023-05-30 南京冰鉴信息科技有限公司 一种Java代码加密方法及装置
CN110717150A (zh) * 2019-10-08 2020-01-21 北京顶象技术有限公司 代码保护方法、装置、保护设备及可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102081546A (zh) * 2009-11-30 2011-06-01 国际商业机器公司 通过分隔额外信息来内存优化虚拟机代码的方法和系统
CN102708322A (zh) * 2012-05-12 2012-10-03 北京深思洛克软件技术股份有限公司 安卓系统中java应用程序的保护方法
CN102831342A (zh) * 2012-07-28 2012-12-19 北京深思洛克软件技术股份有限公司 一种提高安卓系统中应用程序保护强度的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7496757B2 (en) * 2002-01-14 2009-02-24 International Business Machines Corporation Software verification system, method and computer program element

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102081546A (zh) * 2009-11-30 2011-06-01 国际商业机器公司 通过分隔额外信息来内存优化虚拟机代码的方法和系统
CN102708322A (zh) * 2012-05-12 2012-10-03 北京深思洛克软件技术股份有限公司 安卓系统中java应用程序的保护方法
CN102831342A (zh) * 2012-07-28 2012-12-19 北京深思洛克软件技术股份有限公司 一种提高安卓系统中应用程序保护强度的方法

Also Published As

Publication number Publication date
CN103413075A (zh) 2013-11-27

Similar Documents

Publication Publication Date Title
CN103413075B (zh) 一种通过虚拟机保护java可执行程序的方法及设备
CN103413073B (zh) 一种保护java可执行程序的方法及设备
CN105683990B (zh) 用于保护动态库的方法和装置
CN103914637B (zh) 一种安卓平台的可执行程序加密方法
KR101521765B1 (ko) 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법
CN102598017B (zh) 提高Java字节码的防窜改能力的系统和方法
CN106096338B (zh) 一种具有数据流混淆的虚拟化软件保护方法
US8176559B2 (en) Obfuscated malware detection
CN106126981B (zh) 基于虚拟函数表替换的软件安全防护方法
US8589897B2 (en) System and method for branch extraction obfuscation
CN103902910B (zh) 检测智能终端中恶意代码的方法及装置
CN108363911B (zh) 一种Python脚本混淆、水印的方法及装置
CN105612527A (zh) 为基于通用中间语言的程序提供安全性的方法
CN101393521B (zh) Windows应用程序内部固化数据的提取系统
CN107992723A (zh) 一种基于动态链接库的Java源码保护方法
CN108733988A (zh) 安卓平台上可执行程序的保护方法
US8615735B2 (en) System and method for blurring instructions and data via binary obfuscation
CN103761475A (zh) 检测智能终端中恶意代码的方法及装置
CN107092518A (zh) 一种保护拟态防御系统软件层安全的编译方法
CN104866734B (zh) 一种dex文件的保护方法及装置
CN107632832B (zh) 一种面向dalvik字节码控制流混淆方法
KR101861341B1 (ko) 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법
CN103413074B (zh) 一种通过api实现软件保护的方法和装置
CN106682460A (zh) 一种基于两次变换的代码混淆方法
CN105718765A (zh) 一种利用有限自动机实现代码混淆的方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

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

Applicant after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

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

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

COR Change of bibliographic data
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee
CP02 Change in the address of a patent holder

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 SENSESHIELD 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.