CN110147329A - 一种动态检测模拟器的方法、装置及终端 - Google Patents
一种动态检测模拟器的方法、装置及终端 Download PDFInfo
- Publication number
- CN110147329A CN110147329A CN201910444224.4A CN201910444224A CN110147329A CN 110147329 A CN110147329 A CN 110147329A CN 201910444224 A CN201910444224 A CN 201910444224A CN 110147329 A CN110147329 A CN 110147329A
- Authority
- CN
- China
- Prior art keywords
- memory
- code
- server
- memory field
- terminal
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/44—Program or device authentication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Quality & Reliability (AREA)
- Virology (AREA)
- Bioethics (AREA)
- Storage Device Security (AREA)
Abstract
一种动态检测模拟器的方法,该方法用于终端,涉及信息安全技术领域,包括:获取检测代码;调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区;调用系统文件读取函数,从系统内存中查找指定的系统模块,将指定的系统模块的代码拷贝到第一内存区;将检测代码插入指定的系统模块的代码中;调用内存拷贝函数Memcpy(),将检测代码从第一内存区中拷贝到第二内存区;执行存储于第二内存区的检测代码,得到检测结果;释放第一内存区和第二内存区;将检测结果发送给服务器,使服务器根据执行结果判定终端是否为模拟器。本公开还提供了一种动态检测模拟器的装置及终端。以上过程能有效隐藏检测代码,避免检测代码被黑客发现并破解。
Description
技术领域
本公开涉及信息安全技术领域,尤其涉及一种动态检测模拟器的方法、装置及终端。
背景技术
随着互联网的发展,安卓系统的应用程序(Application,简称APP)的应用愈加普遍。黑客常常通过模拟器在电脑上模拟安卓系统,以模拟终端APP的运行环境进行刷机、刷装机量、刷APP中各种抽奖福利数据等违法活动。为了使安卓系统的APP安全可靠,以保障APP用户及开发者的合法权益,需通过判断APP的运行环境是否为模拟器来判断APP是否遭到黑客入侵。
目前已存在大量的检测模拟器的方法,但多数检测方法是将检测代码预先编写在APP中,这种方式让黑客很容易通过内存搜索等方式发现预置的检测代码,并针对预置的检测代码进行破解或直接绕过,导致依靠在APP中运行检测代码来检测终端是否为模拟器的效果并不理想。
发明内容
本公开的提供了一种动态检测模拟器的方法、装置及终端,将用于检测终端是否为模拟器的检测代码预置在服务器上,由服务器向终端发送检测代码,使终端在收到检测代码后,将检测代码分块并存入动态分配的存有系统代码的内存,以隐藏检测代码,防止检测代码被黑客发现,以保证检测代码的安全执行。
本公开的一个方面提供了一种动态检测模拟器的方法,所述方法用于终端,方法包括:获取从服务器发送的检测代码;调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区;调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,调用内存拷贝函数Memcpy()将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满;将所述检测代码插入所述指定的系统模块的代码中;调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区;执行存储于所述第二内存区的所述检测代码,得到检测结果;释放所述第一内存区和第二内存区;将所述检测结果发送给所述服务器,使所述服务器根据所述执行结果判定所述终端是否为模拟器。
可选地,调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,调用内存拷贝函数Memcpy()将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满包括:调用系统文件读取函数fopen(),读取系统内存布局信息,从所述系统内存布局信息中获取所述系统内存中所有系统模块的名称、在所述系统内存中的起始地址和大小;依次查询所述系统内存布局信息中所述所有系统模块的名称,直到查询到所述指定的系统模块;调用内存拷贝函数Memcpy(),以所述指定的系统模块的起始地址为起点,拷贝与所述第一内存区大小相同的所述指定的系统模块的代码,存入所述第一内存区。
可选地,将所述检测代码插入所述指定的系统模块的代码中包括:在所述第一内存区中随机选取偏移地址,以所述偏移地址为起始地址,将所述检测代码插入所述第一内存中的所述指定的系统模块的代码中;其中,所述偏移地址与所述第一内存的末位地址之间的偏移量大于所述检测的大小。
可选地,执行存储于所述第二内存区的所述检测代码包括:调用更新缓存函数clear_cache(),将系统缓存清空,并将所述第二内存中的检测代码更新到所述系统缓存中,以执行所述检测代码。
可选地,将所述检测代码插入所述指定的系统模块的代码中还包括:向所述服务器发送请求,使所述服务器向所述终端发送所述终端的风险等级;根据所述风险等级,将所述检测代码拆分为多个代码块,其中,所述风险等级越高,将所述检测代码拆分为代码块的数量越多;分别为所述多个代码块在所述第一内存区中随机选取起始地址,将所述多个代码块分别插入所述指定的系统模块的代码中,并记录所述多个代码块的大小和在所述第一内存区中的起始地址。
可选的,调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区包括:按照所述多个代码块在所述检测代码中的位置顺序,根据所述多个代码块的大小和在所述第一内存区中的起始地址,依次将所述多个代码块复制到所述第二内存区,使所述检测代码完整的拷贝到所述第二内存区中。
可选的,方法还包括:向所述服务器发送终端信息,以使所述服务器向所述终端发送加密的检测代码;其中,所述终端信息包括所述终端账号、所述终端的系统版本号、所述终端的用户账号和一个随机数;获取从服务器发送的加密的检测代码,以及所述服务器生成加密的检测代码时,使用的哈希算法和加密算法的编码、服务器生成的随机数及时间戳信息;根据所述哈希算法的编码和所述加密算法的编码,分别从预置于所述终端的哈希算法库和集成加密算法库中查询所述服务器使用的哈希算法和加密算法;根据所述终端信息和所述服务器生成的随机数及时间戳信息,利用所述哈希算法生成密钥,基于所述密钥和所述加密算法,对所述加密的检测代码解密,获得检测代码。
可选的,向所述服务器发送终端信息,以使所述服务器向所述终端发送加密的检测代码包括:所述服务器随机从预置于所述服务器的哈希算法库中选择一种哈希算法,并记录预置的所述哈希算法的编码;所述服务器生成一个随机数及时间戳信息,利用所述哈希算法,根据所述终端信息和所述随机数及时间戳信息生成密钥;所述服务器随机从预置于所述服务器的集成加密算法库中选择一种加密算法,并记录预置的所述加密算法的编码;所述服务器基于所述密钥和所述加密算法,将预置于所述服务器中的检测代码加密得到加密的检测代码;所述服务器将所述加密的检测代码、所述哈希算法的编码、所述加密算法的编码、所述随机数及时间戳信息分别发送给所述终端。
本公开的另一个方面提供了以一种动态检测模拟器的装置,其特征在于,包括:第一处理模块,用于获取从服务器发送的检测代码;第二处理模块,用于调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区;第三处理模块,用于调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满;第四处理模块,用于将所述检测代码插入所述指定的系统模块的代码中;第五处理模块,用于调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区;第六处理模块,用于执行存储于所述第二内存区的所述检测代码,得到检测结果;第七处理模块,用于释放所述第一内存区和第二内存区;第八处理模块,用于将所述检测结果发送给所述服务器,使所述服务器根据所述执行结果判定所述终端是否为模拟器。
本公开的另一个方面提供了一种终端,包括:存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现第二方面中的任一项所述的一种用于终端的检测方法中的各个步骤。
在本公开实施例采用的上述至少一个技术方案能够达到以下有益效果:
(1)申请大于检测代码大小的内存,先存放系统模块代码,再将检测代码插入该内存中系统模块代码中,该过程将检测代码有效的隐藏到了系统模块代码中,可防止黑客通过内存搜索查找到检测代码;
(2)执行完毕检测代码后,立即清空存储和执行检测代码的内存,可减轻终端硬件环境的内存压力;
(3)将检测代码预置在服务器中,由服务器将检测代码加密,并将检测代码发送给终端,服务器每次对检测代码加密使用的密钥和加密算法都不同,这种方法使检测代码不容易被识别、破解,增加了检测代码的安全性。
附图说明
为了更完整地理解本公开及其优势,现在将参考结合附图的以下描述,其中:
图1示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法的流程图;
图2示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法中获取检测代码的流程图;
图3示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法中服务器对检测代码进行加密的流程图;
图4示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法中预置于服务器的检测代码;
图5A示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法中,将检测代码插入指定的系统模块中的示意图;
图5B示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法中,将检测代码插入指定的系统模块的代码的另一种示意图;
图6示意性示出了根据本公开实施例提供的一种动态检测模拟器的装置的框图;
图7示意性示出了根据本公开实施例提供的一种终端的框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。
因此,本公开的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。在本公开的上下文中,计算机可读介质可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,计算机可读介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。计算机可读介质的具体示例包括:磁存储装置,如磁带或硬盘(HDD);光存储装置,如光盘(CD-ROM);存储器,如随机存取存储器(RAM)或闪存;和/或有线/无线通信链路。
本公开的实施例提供了一种动态检测模拟器的方法,应用于终端,用于检测终端是否为模拟器。进行模拟器检测的代码预置在服务器上,当终端向服务器发送终端信息后,服务器将检测代码发送给终端,终端检测代码后,先将检测代码隐藏在存有系统代码的内存中,当需要执行检测代码时,终端系统再分配动态内存以执行检测代码。
图1示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法的流程图。
如图1所示,本公开实施例提供的一种动态检测模拟器的方法的过程如下:
S1,获取从服务器发送的检测代码。
在本公开实施例中,检测代码预置在服务器上,每当终端登录该服务器,服务器会向该终端发送检测代码,用于检测该终端是否为模拟器。为了避免检测代码被黑客截获,服务器在将检测代码发送给终端前,对检测代码进行加密保护。上述过程的具体实现方式参考图2、图3。
S2,调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区。
为了保证检测代码的安全性,终端可分配一个5~10倍于检测代码的动态内存为第一内存,用于存储终端的系统中的部分代码,然后将检测代码插入到第一内存中,即将检测代码隐藏到系统的部分代码中。
从服务器获取的检测代码在未执行前,以数组的形式存放于第一内存区,因此需要分配一个可执行的内存空间用于执行检测代码,即第二内存区,第二内存区的大小与检测代码相同。
在本公开实施例中,可使用Android系统提供的mmap()函数进行内存分配的操作,其函数原型如下:
oid*mmap(void*addr,size_t len,int prot,int flags,int fd,off_toffset);
其中,addr用于指定文件应被映射到进程空间的起始地址,len为映射到调用进程地址空间的字节数,prot用于指定共享内存的访问权限,flags用于指定映射对象的类型,fd指有效的文件描述词,offset表示从文件头开始映射,一般设为0。
例如,使用mmap()函数在系统进程空间中分配一段可以执行代码的内存空间,具体实现如下:
void*start=mmap(NULL,(size_t)sizeof(checkcode),PROT,
MAP_ANONYMOUS|MAP_PRIVATE,-1,(off_t)0);
其中,返回值start则是分配的内存起始地址,checkcode表示检测代码。
S3,调用系统文件读取函数fopen(),从系统内存中查找指定的系统模块,将指定的系统模块的代码拷贝到第一内存区,使第一内存区存满。
为了隐藏检测代码,可先将部分系统代码存入第一内存区,然后将检测代码插入到存有部分系统代码的第一内存区中,从而达到将检测代码隐藏到系统代码中的目的。
存入第一内存区的部分系统代码可以为指定的系统模块的代码,查找指定的系统模块的方法为:
调用系统文件读取函数fopen(),读取系统内存布局信息,从系统内存布局信息中获取系统内存中所有系统模块的名称、在系统内存中的起始地址和大小;
依次查询系统内存信息中所有系统模块的名称,直到查询到指定的系统模块;
调用内存拷贝函数Memcpy(),以指定的系统模块的起始地址为起点,拷贝与第一内存区大小相同的指定的系统模块的代码,存入第一内存区。
具体的,在Android系统中,提供了指令/proc/selffmaps用于获取当前系统进程的内存布局信息,内存布局信息中包含了所有进程使用到的模块在内存中的起始位置和大小。可通过fopen()函数来读取内存布局信息,例如:
FILE*fp=fopen(″/proc/self/maps″,″r″));
其中,*fp表示读取内存布局信息的句柄,r表示读取信息。
获取内存布局信息的句柄后,可定义一个循环,依据内存布局信息的句柄,依次查询内存布局信息,例如:
while(fgets(line,sizeof(line),fp)){…};
其中,line表示读取的内存布局信息的一行数据。
在该循环中,通过名称判定line表示的数据是否为指定的系统模块的数据,如果是,则读取line中表示的指定的系统模块在内存中的起始位置和该指定的系统模块的大小,并将该系统模块存储到指定变量中,然后跳出循环,通过fclose()函数关闭句柄。
依据该指定的系统模块在内存中的起始位置和该指定的系统模块的大小,调用内存拷贝函数Memcpy(),将该系统模块的代码拷贝到第一内存区,使第一内存区存满。调用函数Memcpy()的方式为:
Memcpy(start,base_addr,size);
其中,start表示第一内存区的起始地址,base_addr表示存储该系统模块的指定变量,size为第一内存区的大小。
S4,将检测代码插入指定的系统模块的代码中。
为了将检测代码隐藏到指定的系统模块的代码中,需为检测代码选择插入的起始地址。
在第一内存区中随机选取偏移地址,以偏移地址为起始地址,将检测代码插入第一内存中的指定的系统模块的代码中;
其中,偏移地址与第一内存区的末位地址之间的偏移量大于检测代码的大小。
第一内存区的大小为检测代码的大小总和的5~10倍,在第一内存区中选取一个偏移地址,要使该偏移地址到该第一内存区的末尾地址之间的偏移量大于代码块的长度,以保证改代码块完整的存入该第一内存区中。
具体的,随机选取一个偏移地址的方式如下:
假设第一内存区的大小为size,检测代码的大小为codesize,偏移地址为offset,则:
Uint32_t offset=rand()%(size-codesize);
在第一内存区中随机选取一个偏移地址作为起始地址将该代码块插入该内存,是为了分散的隐藏该至少一个代码块,避免该内存的起始地址就是该检测代码的地址,从而避免该检测代码被黑客通过内存搜索等手段感知。
进一步的,为了更好的隐藏检测代码,可以将检测代码分为多个代码块分散的插入第一内存区的系统代码中。
具体的,可使服务器根据该终端的活跃等级、充值记录、转账记录、是否为批量账号、异常行为等记录,对终端存在的风险进行风险等级评价,由服务器向终端发送风险等级。
例如,假设某一终端平时的活跃等级较高,且该终端为批量账号,存在刷APP中各种抽奖福利等异常行为,服务器根据这些特征判定该终端可能为存在恶意刷单的风险,服务器将该终端的风险等级评为5级,当服务器收到终端发送的终端信息,服务器向终端发送检测代码,同时服务器还可以将风险等级发送给终端。对风险等级的评价可在服务器中实现,在此不做赘述。
终端根据风险等级,将检测代码拆分为多个代码块,其中,风险等级越高,将检测代码拆分为代码块的数量越多。
如果终端存在较高的风险,不排除该终端为模拟器的可能,需要检测该终端是否为模拟器,为了保证检测代码的安全性,防止被黑客发现,这就要求检测代码隐藏的更加隐蔽,将检测代码拆分为多个代码块分别插入系统代码中,有助于进一步提高检测代码的安全性。
例如,假设该终端的风险等级为5级,说明该终端的为模拟器的可能性高,可将检测代码分为5个代码块;假设该终端的风险等级为1级,说明该终端的为模拟器的可能性低,可将检测代码分为2个代码块。
相应的,终端将由检测代码拆分得到的多个代码块插入第一内存区时,分别为多个代码块在第一内存区中随机选取起始地址,将多个代码块分别插入指定的系统模块的代码中,并记录多个代码块的大小和在第一内存区中的起始地址。
S5,调用内存拷贝函数Memcpy(),将检测代码从第一内存区中拷贝到第二内存区。
根据检测代码在第一内存区中的偏移地址和检测代码的大小,通过内存拷贝函数Memcpy()即可将检测代码拷贝到第二内存中来。
具体的,可通过Android系统中Memcpy()函数来实现。
如果检测代码被拆分为多个代码块分散的隐藏在第一内存区中,则需要按照代码块在检测代码中的顺序依次将代码块拷贝到第二内存区,以还原检测代码,包括:
按照该多个代码块在检测代码中的位置顺序,根据该多个代码块的大小和在第一内存区中的起始地址,依次将该多个代码块复制到第二内存区,使检测代码完整的拷贝到第二内存区中。
S6,执行存储于第二内存区的检测代码,得到检测结果。
当执行检测代码时,需将检测代码从第二内存区中更新到系统缓存中再执行。
调用更新缓存函数clear_cache(),将系统缓存清空,并将第二内存中的检测代码更新到系统缓存中,以执行检测代码。
具体的,终端通过调用Android系统函数clear_cache()来更新缓存:
clear_cache(start,start+(size_t)sizeof(checkcode));
其中,start表示第二内存区的起始地址,checkcode表示检测代码。
然后,终端执行系统缓存中的检测代码,获取检测结果。
S7,释放第一内存区和第二内存区。
终端获取检测结果后,释放第一内存区和第二内存区,并删除检测代码、该服务器生成的随机数及时间戳信息、哈希算法的编码和加密算法的编码。每次检测完毕,终端就及时清空执行检测代码所占用地所有内存,以降低终端的内存占用量。
S8,将检测结果发送给服务器,使服务器根据执行结果判定终端是否为模拟器。
图2示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法中获取检测代码的流程图。
如图2所示,终端获取检测代码的过程如下。
S01,向服务器发送终端信息,以使服务器向终端发送加密的检测代码;其中,终端信息包括终端账号、终端的系统版本号、终端的用户账号和一个随机数。
终端向服务器发送的终端信息中每次都包含一个随机数,因此,对于服务器来说,每次收到的终端信息都不相同。
服务器收到终端发送的终端信息后,会利用该终端信息对预置在服务器上的检测代码进行加密,具体加密的方式参考图3。
S02,获取从服务器发送的加密的检测代码,以及服务器生成加密的检测代码时,使用的哈希算法和加密算法的编码、服务器生成的随机数及时间戳信息。
S03,根据哈希算法和加密算法的编码,分别从预置于终端的哈希算法库和集成加密算法库中查询服务器使用的哈希算法和加密算法。
终端与服务器预置了相同的哈希算法库和集成加密算法库,相应的预置了与服务器相同的算法的编码,根据从服务器发送来的哈希算法和加密算法的编码,终端可知服务器对检测代码加密所使用的哪种哈希算法和加密算法。
S04,根据终端信息和服务器生成的随机数及时间戳信息,利用哈希算法生成密钥,基于密钥和加密算法,对加密的检测代码解密,获得检测代码。
例如,终端查询到服务器使用了使用Sha256.Create算法来计算密钥,使用了AES.encrypt算法对检测代码进行加密。假设终端账号为deviceid,终端的系统版本号为version,终端的用户账号为userid,一个终端生成的随机数为clientrand,服务器生成一个随机数为serverrand,服务器生成时间戳为timestamp,那么计算密钥的方法如下:
Key=Sha256.Create(deviceid+version+userid+clientrand+serverrand+timestamp);
那么最终解密得到的检测代码为:
checkcode=AES.decrypt(Encrypt_data,Key)。
图3示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法中服务器对检测代码进行加密的流程图,具体过程如下方所描述。
S011,服务器收到终端信息后,服务器随机从预置于服务器的哈希算法库中选择一种哈希算法,并记录预置的哈希算法的编码。
服务器将预置的哈希算法库中的算法都进行了编码,例如MD5算法则可以编码成0x8。在使用哈希算法库中的算法时,仅记录哈希算法的编码。服务器会将算法的编码发送给终端,而不是直接告知终端使用的算法的名称。这种对算法名进行编码的方式可防止黑客直接截获服务器所使用的哈希算法来解密检测代码。
需要说明的是,终端中需预置与服务器中相同的哈希算法库和哈希算法相应的编码,终端可根据服务器发送的编码获知服务器使用的哪种哈希算法。
S012,服务器生成一个随机数及时间戳信息,利用哈希算法,根据终端信息和随机数及时间戳信息生成密钥。
对于服务器来说,每次收到的终端信息都不相同,在此基础上,服务器生成一个随机数及时间戳信息,基于终端信息和该随机数及该时间戳信息在生成密钥,可增加密钥安全性,这种方法相比于仅使用终端信息生成密钥,可以防止黑客从终端获取终端信息和截取算法编码来破解密钥。
例如,使用Sha256.Create算法来计算密钥,该终端账号为deviceid,该终端的系统版本号为version,该终端的用户账号为userid,一个终端生成的随机数为clientrand,该服务器生成一个随机数为serverrand,该服务器生成时间戳为timestamp,那么计算密钥的方法如下:
Key=Sha256.Create(deviceid+version+userid+clientrand+serverrand+timestamp)。
S013,服务器随机从预置于服务器的集成加密算法库中选择一种加密算法,并记录预置的加密算法的编码。
需要说明的是,与预置于服务器的哈希算法库一样,服务器将预置的集成加密算法库中的算法都进行编码,例如将AES加密算法编码成0xaa,在使用集成加密算法库中的加密算法时,仅记录加密算法的编码,并将该编码发送给终端。终端预置与服务器相同的加密算法库和集成加密算法相应的编码。
S014,服务器基于密钥和加密算法,将预置于服务器中的检测代码加密得到加密的检测代码。
假设使用AES.encrypt算法对检测代码checkcode加密,密钥为Key,则加密后的检测代码Encrypt_data为:
Encrypt_data=AES.encrypt(checkcode,Key)。
在本公开实施例中,将用于检测终端是否为模拟器的检测代码预置在服务器上。由于模拟器运行的CPU是X86架构,而绝大部分真机使用的是ARM架构,X86架构对缓存cache的访问是连续的,ARM架构对缓存cache的访问是非连续的,因此可基于这一点区别编写检测代码,图4中给出了一段基于X86架构和ARM架构访问缓存的差异编写的伪代码。
进一步的,在服务器中可以预置大量的无用代码用于增强检测代码的多样性。例如,在不影响代码质量的情况下,在检测代码中某一处增加对一个变量进行简单加法运算,在检测代码中另一处对该变量进行相应的减法运算,使该变量最终的值不变。在不影响代码质量的情况下,在检测代码中随机的插入大量无用代码,可以使检测代码随机的变化,防止黑客通过搜索内存代码来定位到检测代码。
由于服务器每次收到的终端信息不同,根据终端信息随机选择哈希算法生成密钥,进一步的,随机选择加密算法,基于密钥和加密算法对检测代码进行加密,因此,服务器每次的加密的方式都不同,且由于预置的检测代码中可随机添加无用代码,最终使得服务器得到的加密的检测代码每次都不一样。这种加密方式安全系数高,能有效保证检测代码不轻易被黑客破解。
S015,服务器将加密的检测代码、哈希算法的编码、加密算法的编码、随机数及时间戳信息分别发送给终端。
在对检测代码加密完成后,服务器发送加密的检测代码和哈希算法的编码、加密算法的编码、随机数及时间戳信息给终端的先后顺序随机。
将加密的检测代码和哈希算法的编码、加密算法的编码、随机数及时间戳信息不同时发送给终端,可以保护这些信息不被黑客一次性获取。
图4示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法中预置于服务器的检测代码。
如图4所示,此段代码执行完成后会返回R0寄存器的值,如果终端不是模拟器,则返回值为10,如果终端是模拟器,则返回值为1。
图5A示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法中步骤S4的示意图。
如图5A所示,A表示检测代码,在第一内存memory中随机选取内存地址,将检测代码插入存有系统代码的第一内存区memory,这种存储方式可将检测代码隐藏到系统代码中,避免了直接将检测代码存入第一内存区,使黑客能轻易找到检测代码。
图5B示意性示出了根据本公开实施例提供的一种动态检测模拟器的方法中实现步骤S4的另一种示意图。
如图5B所示,检测代码被拆分为A、B、C大小不一的三个代码块,随机为A、B、C三个代码块分配起始地址,并将A、B、C三个代码块分别插入第一内存memory中,这种插入方式使检测代码分散的插入系统代码中,从而更好的隐藏检测代码。
如图5B所示,由于偏移地址是随机选取的,代码块B被插入第一内存区memory中后,代码块C被插入了代码块B所在的位置,将代码块B分为了B1和B2两个部分,当将代码块拷贝到第二内存区时,应根据实际情况,先将各代码块代码块还原,然后按照各代码块在检测代码中的顺序依次拷贝到第二内存区,将代码块还原为完整的检测代码。
图6示意性示出了根据本公开实施例提供的一种动态检测模拟器的装置的框图。
如图6所示,系统600包括:第一处理模块610,第二处理模块620,第三处理模块630,第四处理模块640,第五处理模块650,第六处理模块660,第七处理模块670,第8处理模块680。该终端600可执行如图1所描述的方法。
具体的,第一处理模块610,用于获取从服务器发送的检测代码;
第二处理模块620,用于调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区;第三处理模块630,用于调用系统文件读取函数fopen(),从系统内存中查找指定的系统模块,将指定的系统模块的代码拷贝到第一内存区,使第一内存区存满;第四处理模块640,用于将检测代码插入指定的系统模块的代码中;第五处理模块650,用于调用内存拷贝函数Memcpy(),将检测代码从第一内存区中拷贝到第二内存区;第六处理模块660,用于执行存储于第二内存区的检测代码,得到检测结果;第七处理模块670,用于释放第一内存区和第二内存区;第八处理模块680,用于将检测结果发送给服务器,使服务器根据执行结果判定终端是否为模拟器。
可以理解的是,第一处理模块610、第二处理模块620、第三处理模块630、第四处理模块640、第五处理模块650、第六处理模块660、第七处理模块670及第8处理模块680可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本发明的实施例,第一处理模块610、第二处理模块620、第三处理模块630、第四处理模块640、第五处理模块650、第六处理模块660、第七处理模块670及第8处理模块680中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以以对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式的适当组合来实现。或者,第一处理模块610、第二处理模块620、第三处理模块630、第四处理模块640、第五处理模块650、第六处理模块660、第七处理模块670及第8处理模块680中的至少一个可以至少被部分地实现为计算机程序模块,当该程序被计算机运行时,可以执行相应模块的功能。
图7示意性示出了根据本公开另一实施例的终端的框图。
如图7所示,终端700包括处理器710、计算机可读存储介质720。该终端700可以执行上面参考图1描述的方法,以实现对特定操作的检测。
具体地,处理器710例如可以包括通用微处理器、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器710还可以包括用于缓存用途的板载存储器。处理器710可以是用于执行参考图1描述的根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
计算机可读存储介质720,例如可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,可读存储介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。可读存储介质的具体示例包括:磁存储装置,如磁带或硬盘(HDD);光存储装置,如光盘(CD-ROM);存储器,如随机存取存储器(RAM)或闪存;和/或有线/无线通信链路。
计算机可读存储介质720可以包括计算机程序721,该计算机程序721可以包括代码/计算机可执行指令,其在由处理器710执行时使得处理器710执行例如上面结合图1所描述的方法流程及其任何变形。
计算机程序721可被配置为具有例如包括计算机程序模块的计算机程序代码。例如,在示例实施例中,计算机程序721中的代码可以包括一个或多个程序模块,例如包括721A、模块721B、……。应当注意,模块的划分方式和个数并不是固定的,本领域技术人员可以根据实际情况使用合适的程序模块或程序模块组合,当这些程序模块组合被处理器710执行时,使得处理器710可以执行例如上面结合图1所描述的方法流程及其任何变形。
根据本发明的实施例,第一处理模块610、第二处理模块620、第三处理模块630、第四处理模块640、第五处理模块650、第六处理模块660、第七处理模块670及第8处理模块680中的至少一个可以实现为参考图6描述的计算机程序模块,其在被处理器610执行时,可以实现上面描述的相应操作。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。
Claims (10)
1.一种动态检测模拟器的方法,所述方法用于终端,其特征在于,方法包括:
获取从服务器发送的检测代码;
调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区;
调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,调用内存拷贝函数Memcpy()将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满;
将所述检测代码插入所述指定的系统模块的代码中;
调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区;
执行存储于所述第二内存区的所述检测代码,得到检测结果;
释放所述第一内存区和第二内存区;
将所述检测结果发送给所述服务器,使所述服务器根据所述执行结果判定所述终端是否为模拟器。
2.根据权利要求1所述的方法,其特征在于,所述调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,调用内存拷贝函数Memcpy()将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满包括:
调用系统文件读取函数fopen(),读取系统内存布局信息,从所述系统内存布局信息中获取所述系统内存中所有系统模块的名称、在所述系统内存中的起始地址和大小;
依次查询所述系统内存布局信息中所述所有系统模块的名称,直到查询到所述指定的系统模块;
调用内存拷贝函数Memcpy(),以所述指定的系统模块的起始地址为起点,拷贝与所述第一内存区大小相同的所述指定的系统模块的代码,存入所述第一内存区。
3.根据权利要求1所述的方法,其特征在于,所述将所述检测代码插入所述指定的系统模块的代码中包括:
在所述第一内存区中随机选取偏移地址,以所述偏移地址为起始地址,将所述检测代码插入所述第一内存中的所述指定的系统模块的代码中;
其中,所述偏移地址与所述第一内存的末位地址之间的偏移量大于所述检测的大小。
4.根据权利要求1所述的方法,其特征在于,所述执行存储于所述第二内存区的所述检测代码包括:
调用更新缓存函数clear_cache(),将系统缓存清空,并将所述第二内存中的检测代码更新到所述系统缓存中,以执行所述检测代码。
5.根据权利要求4所述的方法,其特征在于,所述将所述检测代码插入所述指定的系统模块的代码中还包括:
向所述服务器发送请求,使所述服务器向所述终端发送所述终端的风险等级;
根据所述风险等级,将所述检测代码拆分为多个代码块,其中,所述风险等级越高,将所述检测代码拆分为代码块的数量越多;
分别为所述多个代码块在所述第一内存区中随机选取起始地址,将所述多个代码块分别插入所述指定的系统模块的代码中,并记录所述多个代码块的大小和在所述第一内存区中的起始地址。
6.根据权利要求5所述的方法,其特征在于,所述调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区包括:
按照所述多个代码块在所述检测代码中的位置顺序,根据所述多个代码块的大小和在所述第一内存区中的起始地址,依次将所述多个代码块复制到所述第二内存区,使所述检测代码完整的拷贝到所述第二内存区中。
7.根据权利要求1所述的方法,其特征在于,所述获取从服务器发送的检测代码之前,方法还包括:
向所述服务器发送终端信息,以使所述服务器向所述终端发送加密的检测代码;其中,所述终端信息包括所述终端账号、所述终端的系统版本号、所述终端的用户账号和一个随机数;
获取从所述服务器发送的加密的检测代码,以及所述服务器生成加密的检测代码时,使用的哈希算法和加密算法的编码、服务器生成的随机数及时间戳信息;
根据所述哈希算法和所述加密算法的编码,分别从预置于所述终端的哈希算法库和集成加密算法库中查询所述服务器使用的哈希算法和加密算法;
根据所述终端信息和所述服务器生成的随机数及时间戳信息,利用所述哈希算法生成密钥,基于所述密钥和所述加密算法,对所述加密的检测代码解密,获得检测代码。
8.根据权利要求7所述的方法,其特征在于,所述向所述服务器发送终端信息,以使所述服务器向所述终端发送加密的检测代码包括:
所述服务器收到所述终端信息后,所述服务器随机从预置于所述服务器的哈希算法库中选择一种哈希算法,并记录预置的所述哈希算法的编码;
所述服务器生成一个随机数及时间戳信息,利用所述哈希算法,根据所述终端信息和所述随机数及时间戳信息生成密钥;
所述服务器随机从预置于所述服务器的集成加密算法库中选择一种加密算法,并记录预置的所述加密算法的编码;
所述服务器基于所述密钥和所述加密算法,将预置于所述服务器中的检测代码加密得到加密的检测代码;
所述服务器将所述加密的检测代码、所述哈希算法的编码、所述加密算法的编码、所述随机数及时间戳信息分别发送给所述终端。
9.一种动态检测模拟器的装置,其特征在于,包括:
第一处理模块,用于获取从服务器发送的检测代码;
第二处理模块,用于调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区;
第三处理模块,用于调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满;
第四处理模块,用于将所述检测代码插入所述指定的系统模块的代码中;
第五处理模块,用于调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区;
第六处理模块,用于执行存储于所述第二内存区的所述检测代码,得到检测结果;
第七处理模块,用于释放所述第一内存区和第二内存区;
第八处理模块,用于将所述检测结果发送给所述服务器,使所述服务器根据所述执行结果判定所述终端是否为模拟器。
10.一种终端,包括:存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现权利要求1至8中的任一项所述的一种动态检测模拟器的方法中的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910444224.4A CN110147329B (zh) | 2019-05-24 | 2019-05-24 | 一种动态检测模拟器的方法、装置及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910444224.4A CN110147329B (zh) | 2019-05-24 | 2019-05-24 | 一种动态检测模拟器的方法、装置及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110147329A true CN110147329A (zh) | 2019-08-20 |
CN110147329B CN110147329B (zh) | 2022-06-14 |
Family
ID=67592084
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910444224.4A Active CN110147329B (zh) | 2019-05-24 | 2019-05-24 | 一种动态检测模拟器的方法、装置及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110147329B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111414235A (zh) * | 2020-03-20 | 2020-07-14 | 杭州云缔盟科技有限公司 | 一种基于符号的识别Android应用运行在模拟器中的方法 |
CN111459572A (zh) * | 2020-03-31 | 2020-07-28 | 深圳市汇顶科技股份有限公司 | 程序加载方法、控制器、芯片以及电子设备 |
CN112200591A (zh) * | 2020-10-21 | 2021-01-08 | 湖南康凯信息技术有限公司 | 一种用于中药材的物联网鉴别防伪溯源系统 |
CN112559328A (zh) * | 2020-12-04 | 2021-03-26 | 北京字节跳动网络技术有限公司 | 指令模拟引擎的判别方法、装置、设备及介质 |
CN113434165A (zh) * | 2021-06-02 | 2021-09-24 | 武汉天喻信息产业股份有限公司 | 一种嵌入式操作系统的补丁更新方法及系统 |
CN115643021A (zh) * | 2022-09-28 | 2023-01-24 | 深圳市财富趋势科技股份有限公司 | 基于动态编码的终端防护方法及装置 |
CN116760868A (zh) * | 2023-08-16 | 2023-09-15 | 国网江苏省电力有限公司电力科学研究院 | 一种智能配电变压器的自动判定检测方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8510571B1 (en) * | 2003-03-24 | 2013-08-13 | Hoi Chang | System and method for inserting security mechanisms into a software program |
CN105184118A (zh) * | 2015-08-31 | 2015-12-23 | 西北大学 | 一种基于代码碎片化的Android应用程序加壳保护方法及装置 |
CN106648835A (zh) * | 2016-12-26 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 检测Android应用程序在安卓模拟器中运行的方法及系统 |
CN107239410A (zh) * | 2017-05-31 | 2017-10-10 | 上海交通大学 | 基于动态插桩的大块内存分配系统及方法 |
CN107741907A (zh) * | 2017-09-30 | 2018-02-27 | 北京梆梆安全科技有限公司 | 结合底层指令和系统信息的模拟器检测方法及装置 |
CN108197439A (zh) * | 2018-01-04 | 2018-06-22 | 武汉斗鱼网络科技有限公司 | 一种文件加密方法、装置及服务器 |
-
2019
- 2019-05-24 CN CN201910444224.4A patent/CN110147329B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8510571B1 (en) * | 2003-03-24 | 2013-08-13 | Hoi Chang | System and method for inserting security mechanisms into a software program |
CN105184118A (zh) * | 2015-08-31 | 2015-12-23 | 西北大学 | 一种基于代码碎片化的Android应用程序加壳保护方法及装置 |
CN106648835A (zh) * | 2016-12-26 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 检测Android应用程序在安卓模拟器中运行的方法及系统 |
CN107239410A (zh) * | 2017-05-31 | 2017-10-10 | 上海交通大学 | 基于动态插桩的大块内存分配系统及方法 |
CN107741907A (zh) * | 2017-09-30 | 2018-02-27 | 北京梆梆安全科技有限公司 | 结合底层指令和系统信息的模拟器检测方法及装置 |
CN108197439A (zh) * | 2018-01-04 | 2018-06-22 | 武汉斗鱼网络科技有限公司 | 一种文件加密方法、装置及服务器 |
Non-Patent Citations (4)
Title |
---|
HJH200507609: "Android如何区别真机和模拟器", 《CSDN》 * |
于洲: "《Android平台恶意软件的动态检测技术研究》", 《信息科技辑》 * |
何志昌: "Android平台应用程序恶意行为检测方法研究", 《信息科技辑》 * |
刘长亮: "移动互联网软件安全保护技术研究", 《信息科技辑》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111414235A (zh) * | 2020-03-20 | 2020-07-14 | 杭州云缔盟科技有限公司 | 一种基于符号的识别Android应用运行在模拟器中的方法 |
CN111459572A (zh) * | 2020-03-31 | 2020-07-28 | 深圳市汇顶科技股份有限公司 | 程序加载方法、控制器、芯片以及电子设备 |
CN111459572B (zh) * | 2020-03-31 | 2023-01-31 | 深圳市汇顶科技股份有限公司 | 程序加载方法、控制器、芯片以及电子设备 |
CN112200591A (zh) * | 2020-10-21 | 2021-01-08 | 湖南康凯信息技术有限公司 | 一种用于中药材的物联网鉴别防伪溯源系统 |
CN112559328A (zh) * | 2020-12-04 | 2021-03-26 | 北京字节跳动网络技术有限公司 | 指令模拟引擎的判别方法、装置、设备及介质 |
CN113434165A (zh) * | 2021-06-02 | 2021-09-24 | 武汉天喻信息产业股份有限公司 | 一种嵌入式操作系统的补丁更新方法及系统 |
CN115643021A (zh) * | 2022-09-28 | 2023-01-24 | 深圳市财富趋势科技股份有限公司 | 基于动态编码的终端防护方法及装置 |
CN116760868A (zh) * | 2023-08-16 | 2023-09-15 | 国网江苏省电力有限公司电力科学研究院 | 一种智能配电变压器的自动判定检测方法及系统 |
CN116760868B (zh) * | 2023-08-16 | 2023-10-20 | 国网江苏省电力有限公司电力科学研究院 | 一种智能配电变压器的自动判定检测方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110147329B (zh) | 2022-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110147329A (zh) | 一种动态检测模拟器的方法、装置及终端 | |
CN109508552B (zh) | 分布式云存储系统的隐私保护方法 | |
JP7364724B2 (ja) | ブロックチェーンIoT装置のためのオペレーティングシステム | |
US10956584B1 (en) | Secure data processing | |
CN109740384A (zh) | 基于区块链的数据存证方法和装置 | |
US10402109B2 (en) | Systems and methods for storing data blocks using a set of generated logical memory identifiers | |
KR100823738B1 (ko) | 컴퓨팅 플랫폼의 설정 정보를 은닉하면서 무결성 보증을제공하는 방법 | |
CN111355705A (zh) | 一种基于区块链的数据审计与安全去重云存储系统、方法 | |
CN110138733A (zh) | 基于区块链的对象存储系统可信存证与访问权限控制方法 | |
CN114254386B (zh) | 基于层次聚合和区块链的联邦学习隐私保护系统及方法 | |
CN109600366A (zh) | 基于区块链的保护用户数据隐私的方法及装置 | |
CN108628611A (zh) | 一种数据调用方法及数据调用装置 | |
CN110266659A (zh) | 一种数据处理方法和设备 | |
CN113344222A (zh) | 一种基于区块链的安全可信的联邦学习机制 | |
CN113254955A (zh) | 前向安全的连接关键词对称可搜索加密方法、系统及应用 | |
CN109104724A (zh) | 一种用于设备升级的数据加密方法和装置 | |
CN117459327B (zh) | 一种云数据透明加密保护方法、系统及装置 | |
Sultan et al. | A novel image-based homomorphic approach for preserving the privacy of autonomous vehicles connected to the cloud | |
CN107133517A (zh) | 一种基于内存中数据加密和计算的数据还原方法 | |
US20090319805A1 (en) | Techniques for performing symmetric cryptography | |
CN117439736A (zh) | 数据加密方法、系统、电子设备及数据溯源方法 | |
ES2383100T3 (es) | Registro de la información de distribución del contenido en un adjunto al contenido | |
CN112367396B (zh) | 分布式集群中的样本特征分位点确定方法及装置 | |
KR102496436B1 (ko) | 블록체인 네트워크에서 저장소에 복수의 데이터 조각들을 저장하는 방법 및 저장된 복수의 데이터 조각들을 수신하는 방법 | |
CN115296808B (zh) | 秘钥更换方法、装置、计算机设备和存储介质 |
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 |