CN113127223B - 一种Windows客户端程序模块间的加密数据传输的方法和装置 - Google Patents

一种Windows客户端程序模块间的加密数据传输的方法和装置 Download PDF

Info

Publication number
CN113127223B
CN113127223B CN201911420868.6A CN201911420868A CN113127223B CN 113127223 B CN113127223 B CN 113127223B CN 201911420868 A CN201911420868 A CN 201911420868A CN 113127223 B CN113127223 B CN 113127223B
Authority
CN
China
Prior art keywords
data
key data
key
module
invisible window
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
CN201911420868.6A
Other languages
English (en)
Other versions
CN113127223A (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.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network 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 Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201911420868.6A priority Critical patent/CN113127223B/zh
Publication of CN113127223A publication Critical patent/CN113127223A/zh
Application granted granted Critical
Publication of CN113127223B publication Critical patent/CN113127223B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/0819Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
    • H04L9/0822Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) using key encryption key
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/14Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using a plurality of keys or algorithms

Abstract

本发明涉及加密数据传输技术领域,具体涉及一种Windows客户端程序模块间的加密数据传输的方法和装置。本发明首先对为第一DLL模块创建并设置第一密钥数据,然后在隐形窗口的句柄中存入初始密钥以及第一加密数据;当第一DLL模块向第二DLL模块传输第一数据时,本发明首先通过读取隐形窗口的句柄以解密获知第二密钥数据,然后使用第一密钥数据和第二密钥数据共同对第一数据的指针进行加密;之后当第二DLL模块获取第一数据时,再次通过读取隐形窗口的句柄以解密获知第二密钥数据,从而获得第一数据。本发明创新地将第二密钥数据的解密信息保存在隐藏窗口的句柄中,通过读取隐藏窗口的句柄获得加解密数据,提高了DLL模块间的数据传输的安全性。

Description

一种Windows客户端程序模块间的加密数据传输的方法和 装置
技术领域
本发明涉及加密数据传输技术领域,具体涉及一种Windows客户端程序模块间的加密数据传输的方法和装置。
背景技术
在一些Windows客户端程序正常运行过程中,DLL模块之间有时需要进行数据传输。现有方式都是通过在每个DLL模块中增加一个接口,通过返回数据给该接口以实现DLL模块间的数据传输。但这种数据传输方式,存在较大的被病毒程序获取的风险,安全性太低。
因此,目前亟需一种安全性高的Windows客户端程序模块间的数据传输方案。
发明内容
本发明所要解决的是现有技术中现有的Windows客户端程序模块间数据传输安全性低的问题。
本发明实施例提供了以下方案:
第一方面,本发明实施例提供一种Windows客户端程序模块间的加密数据传输的方法,包括:
根据主程序的启动时间戳、主程序中所有线程的线程ID和第一DLL模块的名称,生成所述第一DLL模块的第一密钥数据;
创建隐形窗口,将初始密钥数据保存在所述隐形窗口的句柄中;其中,所述初始密钥数据通过所述隐形窗口的句柄计算Hash值得到;
以所述初始密钥数据为密钥,利用第一加密算法对第二密钥数据加密,生成第一加密数据,并将所述第一加密数据保存在所述隐形窗口的句柄中;
对所述第一加密数据进行第一次解密,以获得第一次解密后的所述第二密钥数据;
根据所述第一密钥数据和第一次解密后的所述第二密钥数据,第一次生成第三密钥数据;
以所述第三密钥数据为密钥,利用所述第一加密算法对所述第一数据的指针加密,获得第二加密数据,并将所述第二加密数据保存在所述第一DLL模块中的局部存储对象中;
对所述第一加密数据进行第二次解密,以获得第二次解密后的所述第二密钥数据;
根据所述第一密钥数据和第二次解密后的所述第二密钥数据,第二次获得所述第三密钥数据;
判断当前线程是否属于所述第一DLL模块;
若是,则根据第二次获得的所述第三密钥数据对所述第二加密数据解密,获得所述第一数据。
在一种可能的实施例中,所述以所述初始密钥数据为密钥,利用第一加密算法对第二密钥数据加密,生成第一加密数据,并将所述第一加密数据保存在所述隐形窗口的句柄中之前,包括:
将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中;
根据所述隐形窗口的当前累计刷新次数的更新间隔时间,计算所述隐形窗口的刷新帧率;
根据所述刷新帧率,计算每秒钟处理的数据量,计算公式如下所示:
Figure BDA0002352351500000021
其中,DS为每秒钟处理的数据量,FPS为所述隐形窗口的刷新帧率,Factor1为第一拟合参数,Factor2为第二拟合参数,Factor3为第三拟合参数;
根据所述每秒钟处理的数据量,从加密算法库中选择第一加密算法。
在一种可能的实施例中,所述对所述第一加密数据进行第一次解密,以获得第一次解密后的所述第二密钥数据之前,以及所述对所述第一加密数据进行第二次解密,以获得第二次解密后的所述第二密钥数据之前,均包括:
将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中;
根据所述隐形窗口的当前累计刷新次数的更新间隔时间,计算所述隐形窗口的刷新帧率;
根据所述刷新帧率,计算每秒钟处理的数据量,计算公式如下所示:
Figure BDA0002352351500000022
其中,DS为每秒钟处理的数据量,FPS为所述隐形窗口的刷新帧率,Factor1为第一拟合参数,Factor2为第二拟合参数,Factor3为第三拟合参数;
根据所述每秒钟处理的数据量,从加密算法库中选择第一加密算法对应的第一解密算法。
在一种可能的实施例中,所述根据主程序的启动时间戳、主程序中所有线程的线程ID和第一DLL模块的名称,生成所述第一DLL模块的第一密钥数据,包括:
根据主程序中所有线程的线程ID获取盐数据;
基于主程序启动时生成的当前时间戳、进程ID数据、所述第一DLL模块的名称和随机数据和所述盐数据创建第一密钥数据;
使用系统函数LoadLibrary来加载所述第一DLL模块;
调用所述第一DLL模块的密钥设置函数接口将所述第一密钥数据设置到所述第一DLL模块中。
在一种可能的实施例中,所述根据主程序中所有线程的线程ID获取盐数据,包括:
获取当前的进程ID;
判断当前线程的快照信息是否包含所述当前的进程ID;
若是,则将当前线程的线程ID存入到线程ID列表中;
将所述线程ID列表作为所述盐数据。
在一种可能的实施例中,所述将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中,包括:
基于所述当前累计刷新次数生成当前BKDRHash值,并将所述当前BKDRHash值保存在所述隐形窗口的句柄的第一变量中;
基于所述当前累计刷新次数生成当前APHash值,并将所述当前APHash值保存在所述隐形窗口的句柄的第二变量中;
其中,所述当前BKDRHash值和所述当前APHash值用以共同组成第一int数据;所述第一int数据用以指代所述当前累计刷新次数。
第二方面,本发明实施例提供一种Windows客户端程序模块间的加密数据传输的装置,包括:
第一密钥数据生成模块,用于根据主程序的启动时间戳、主程序中所有线程的线程ID和第一DLL模块的名称,生成所述第一DLL模块的第一密钥数据;
窗口创建模块,用于创建隐形窗口,将初始密钥数据保存在所述隐形窗口的句柄中;其中,所述初始密钥数据通过所述隐形窗口的句柄计算Hash值得到;
第一加密数据生成模块,用于以所述初始密钥数据为密钥,利用第一加密算法对第二密钥数据加密,生成第一加密数据,并将所述第一加密数据保存在所述隐形窗口的句柄中;
第二密钥数据获得模块,用于对所述第一加密数据进行第一次解密,以获得第一次解密后的所述第二密钥数据;
第三密钥数据生成模块,用于根据所述第一密钥数据和第一次解密后的所述第二密钥数据,第一次生成第三密钥数据;
第二加密数据获得模块,用于以所述第三密钥数据为密钥,利用所述第一加密算法对所述第一数据的指针加密,获得第二加密数据,并将所述第二加密数据保存在所述第一DLL模块中的局部存储对象中;
第二密钥数据获得模块,还用于对所述第一加密数据进行第二次解密,以获得第二次解密后的所述第二密钥数据;
第三密钥数据生成模块,还用于根据所述第一密钥数据和第二次解密后的所述第二密钥数据,第二次获得所述第三密钥数据;
第一判断模块,用于判断当前线程是否属于所述第一DLL模块;
第一数据获得模块,用于当当前线程属于所述第一DLL模块时根据第二次获得的所述第三密钥数据对所述第二加密数据解密,获得所述第一数据。
在一种可能的实施例中,所述装置还包括:
当前累计刷新次数存储模块,用于将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中;
刷新帧率计算模块,用于根据所述隐形窗口的当前累计刷新次数的更新间隔时间,计算所述隐形窗口的刷新帧率;
每秒钟处理的数据量计算模块,用于根据所述刷新帧率,计算每秒钟处理的数据量,计算公式如下所示:
Figure BDA0002352351500000041
其中,DS为每秒钟处理的数据量,FPS为所述隐形窗口的刷新帧率,Factor1为第一拟合参数,Factor2为第二拟合参数,Factor3为第三拟合参数;
第一加密算法筛选模块,用于根据所述每秒钟处理的数据量,从加密算法库中选择第一加密算法对应的第一解密算法。
第三方面,本发明实施例提供一种计算机设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行该计算机程序以实现如上述第一方面任意一项所述的加密数据传输的方法的步骤。
第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时以实现如上述第一方面任意一项所述的加密数据传输的方法的步骤。
本发明与现有技术相比,具有如下的优点和有益效果:
本发明首先对为第一DLL模块创建并设置第一密钥数据,然后在隐形窗口的句柄中存入初始密钥以及通过初始密钥加密对第二密钥数据加密的第一加密数据;当第一DLL模块向第二DLL模块传输第一数据时,本发明首先通过读取隐形窗口的句柄以解密获知第二密钥数据,然后使用第一密钥数据和第二密钥数据共同对第一数据的指针进行加密;之后当第二DLL模块获取第一数据时,再次通过读取隐形窗口的句柄以解密获知第二密钥数据,然后去解密第一数据的指针的加密数据,从而获得第一数据。
本发明没有使用调用DLL模块接口的方式直接传输数据,而是创新地将第二密钥数据的解密信息保存在隐藏窗口的句柄中,通过读取隐藏窗口的句柄,来获得传输数据的加密、解密信息,从而完成DLL模块间的数据传输。而隐形窗口的句柄是实时变化的,第二密钥数据的值只有解密当时才能确定,使得第二密钥数据安全性非常高,提高了数据传输的安全性。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种Windows客户端程序模块间的加密数据传输的方法的流程图;
图2是本发明实施例提供的一种可能的一种Windows客户端程序模块间的加密数据传输的装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例,基于本发明实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明实施例保护的范围。
请参阅图1,图1为本发明实施例提供的一种Windows客户端程序模块间的加密数据传输的方法的流程图,具体包括步骤101至步骤110。
这里,先说明步骤101至步骤103的作用:步骤101至步骤103首先生成第一DLL模块对应的第一密钥数据的第二密钥数据,其中第一密钥数据配置到第一DLL模块中,第二密钥数据经加密后与其加密密钥一起保存在隐形窗口的句柄中,供之后对数据加密以及数据解密时使用。由于隐形窗口会随着主程序的窗口进行实时刷新,从而使得每次加密、解密所使用到的密钥数据都不同,对于第二密钥数据可以起到很好的隐蔽效果,从而提高了整个数据传输过程的安全性。
步骤101,根据主程序的启动时间戳、主程序中所有线程的线程ID和第一DLL模块的名称,生成所述第一DLL模块的第一密钥数据。
具体的,Windows系统中的程序一般由主程序EXE和多个功能模块DLL文件组成,主EXE是可执行程序,其会加载其他的功能模块DLL文件来完成整个程序的功能逻辑。
具体的,本发明实施例中使用系统函数LoadLibrary来加载第一DLL模块。
具体的,所述根据主程序的启动时间戳、主程序中所有线程的线程ID和第一DLL模块的名称,生成所述第一DLL模块的第一密钥数据,包括下述步骤1.1至步骤1.4。
步骤1.1,根据主程序中所有线程的线程ID获取盐数据。
具体的,盐数据属于一种加密数值,在加密过程为重要数据添加盐数据,使得加密的得到的密文更加冷僻,不宜查询。即使黑客有密文查询到的值,也是加了盐数据的加密数据,而非原始的重要数据。盐数据可以是随机生成的一组字符串,包括随机的大小写字母、数字、字符,还可以是根据动态数据信息进行生成。本发明实施例采用了所有线程的线程ID来生成盐数据,由于每次开机时所有线程的线程ID是不同的,使得使用该盐数据创建的第一DLL模块的第一密钥数据与其他DLL模块对应的密钥数据是不同的,保证了第一DLL模块的第一密钥数据的独有性,提高了加密等级,保证了数据传输的安全性。
具体的,所述根据主程序中所有线程的线程ID获取盐数据,包括下述步骤1.1.1至步骤1.1.4。
这里,先说明步骤1.1.1至步骤1.1.4的作用:步骤1.1.1至步骤1.1.4使用所有线程的线程ID获取盐数据,而由于系统中每时每刻的线程ID不一定相同,因此每次获取的盐数据就不相同,从而使得每个DLL模块对应的第一密钥数据也不同,同时盐数据还可以提高加密强度,降低被暴力破解的可能性,提高整个数据传输过程的安全性。
步骤1.1.1,获取当前的进程ID。
具体的获取方式为:
DWORD th32ProcessID=GetCurrentProcessId()。
步骤1.1.2,判断当前线程的快照信息是否包含所述当前的进程ID。
具体的线程的快照信息获取方式为:
hThreadSnap=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,th32ProcessID);
具体的获取所有线程的快照信息的获取方式为:
do{
if(th32.th32OwnerProcessID==th32ProcessID){;
上述判断的具体实现方式为:
threadids.push(th32.th32ThreadID);}。
步骤1.1.3,若是,则将当前线程的线程ID存入到线程ID列表中。
这里,定义一个vector来存储所有的线程ID信息,具体的定义方式为:
Vector<DWORD>threadids。
存储的实现方式为:
}while(Thread32Next(hThreadSnap,&th32))。
步骤1.1.4,将所述线程ID列表作为所述盐数据。
步骤1.2,基于主程序启动时生成的当前时间戳、进程ID数据、所述第一DLL模块的名称和随机数据和所述盐数据创建第一密钥数据。
具体的,创建第一密钥数据的过程,包括下述步骤
步骤1.2.1,创建基础数据对象secret。
步骤1.2.2,将主程序启动时生成的当前时间戳、进程ID数据、所述第一DLL模块的名称和随机数据存入所述基础数据对象中。
使用Secret.push_back(timestamp)向secret中存入主程序启动时生成的当前时间戳;
使用Secret.push_back(pid)向secret中存入进程ID数据;
使用Secret.push_back(modename)向secret中存入第一DLL模块的名称;
使用Secret.push_back(rand())向secret中存入随机数据。
步骤1.2.3,调用所述基础数据对象和所述盐数据创建第一密钥数据。
具体的创建方式为:
vector<uint8_t>derive_key(size_t key_len,const vector<uint8_t>&secret,const string&salt);
其中,derive_key是创建第一密钥数据的接口,size_t key_len是第一密钥数据的长度,const vector<uint8_t>&secret是生成第一密钥数据的基础数据,const string&salt是盐数据。
步骤1.3,使用系统函数LoadLibrary来加载所述第一DLL模块。
步骤1.4,调用所述第一DLL模块的密钥设置函数接口将所述第一密钥数据设置到所述第一DLL模块中。
具体的,将所述第一密钥数据设置到所述第一DLL模块的过程,包括下述步骤1.4.1至步骤1.4.4。
步骤1.4.1,首先定义设置密钥的接口类型fnFunc,其返回值告诉主程序是否设置成功;
具体操作指令为:typedef int(*fnFunc)(const vector<uint8_t>&secret);
其中,const vector<uint8_t>&secret为第一密钥数据中的参数。
步骤1.4.2,使用系统函数GetProcAddress来获取第一DLL模块的设置密钥的接口函数地址;
具体操作指令为:fnFunc pFunc=(fnFunc)GetProcAddress(inst,“setSecret”);
其中,“setSecret”是设置密钥的接口函数的名称,inst则是加载的第一DLL模块的实例。
步骤1.4.3,获得第一DLL模块的设置密钥接口并存储到pFunc中;
具体操作指令为:pFunc(key1);
其中,key1为第一密钥数据。
步骤1.4.4,调用该接口来给第一DLL模块设置第一密钥数据。
步骤102,创建隐形窗口,将初始密钥数据保存在所述隐形窗口的句柄中。
其中,所述初始密钥数据通过所述隐形窗口的句柄计算Hash值得到。
本步骤将初始密钥保存到隐形窗口的句柄中,方便DLL模块在加解密数据时的使用,同时隐蔽性好,提高了数据传输的安全性。
具体的,调用Windows系统的API函数来创建一个具体的窗口,隐形是指本窗口是隐藏在系统后台运行的,通常情况下不被用户所看见。具体操作指令为:
Figure BDA0002352351500000091
具体的,通过现有的加密算法,对当前累计刷新次数进行加密,就获得了初始密钥,现有的加密算法可以使用Hash值加密、MD5加密等。本发明实施例中使用当前创建的隐形窗口的句柄来计算Hash值得到,这样可以使初始密钥随着隐形窗口的句柄的变化而动态变化,从而保证了数据的安全性。
具体计算公式为:Initial_key=Md5.Create(hWnd)。
其中,Initial_key为初始密钥,hWnd为隐形窗口的句柄。具体的,在Windows中,句柄是一个系统内部数据结构的引用。当操作一个窗口时,系统会给主程序一个该窗口的句柄,以告诉主程序窗口的当前信息,因此,句柄中可以包含有已经注册的窗口类名称lpClassName、窗口标题栏的名字lpWindowName、窗口左上角水平坐标位置x、窗口左上角垂直坐标位置y、窗口的宽度nWidth和窗口的高度nHeight等信息。
具体的,本发明实施例将初始密钥存在lpClassName中。由于窗口句柄是客户端的全局资源,所以他的值会时时刻刻都会发生变化,lpClassName中存储的初始密钥也在实时发生变化。
步骤103,以所述初始密钥数据为密钥,利用第一加密算法对第二密钥数据加密,生成第一加密数据,并将所述第一加密数据保存在所述隐形窗口的句柄中。
具体的计算公式为:
Encrypt_Next_key=Encrypt_alg.encrypt(Next_key,Initial_key)。
其中,Next_key为第二密钥数据,Encrypt_Next_key为第一加密数据,Encrypt_alg为第一加密算法。
具体的,为方便计算,以及提高第二密钥数据的安全性,这里使用Hash加密的方式对初始密钥进行加密,获得第二密钥数据。
具体计算公式为:Next_key=md5.create(Initial_key)。
具体的,本发明实施例使用lpWindowName来保存第一加密数据。
这里,先说明步骤104至步骤106的作用:步骤104至步骤106的目的是为了在第一DLL模块向第二DLL模块传输第一数据前,对第一数据的指针进行加密。具体通过读取隐形窗口的当前句柄,通过解密获得第二密钥数据,并使用第一密钥数据和第二密钥数据共同为传输给第二DLL模块的数据进行加密,整个过程中,解密所需的所有数据都保存在了隐形窗口的句柄中,避免了直接将密钥数据发送出来而导致的数据泄密风险,同时这些解密数据会随着隐形窗口的刷新而实时更新,从而提高了数据传输的安全性。
步骤104,对所述第一加密数据进行第一次解密,以获得第一次解密后的所述第二密钥数据。
具体的,第一加密算法对应的有第一解密算法,通过读取隐形窗口的句柄中的lpClassName获得初始密钥,再使用第一解密算法可以对第一加密数据进行解密。
步骤105,根据所述第一密钥数据和第一次解密后的所述第二密钥数据,第一次生成第三密钥数据。
本步骤考虑到第一密钥数据可能会被黑客获取,因此采用了两个密钥数据创建第三密钥数据,使用第三密钥数据为之后的传输数据进行加密,由于第一密钥数据和第二密钥数据是采用两种完全不同的生成方式,同时被黑客获取的概率非常低,极大地提高了数据传输的安全性。
具体的计算公式为:Key=derive_key(Next_key,key1)。
其中,key1是第一密钥数据,Key为第三密钥数据。
步骤106,以所述第三密钥数据为密钥,利用所述第一加密算法对所述第一数据的指针加密,获得第二加密数据,并将所述第二加密数据保存在所述第一DLL模块中的局部存储对象中。
本步骤使用第三密钥数据作为密钥对所述第一数据的指针进行加密,提高了数据传输的安全性。
具体的计算公式为:Encrypt_data=Encrypt_alg.encrypt(data,Key)。
其中,Encrypt_data为加密传输数据,data为第一数据的指针。
具体的,加密传输数据Encrypt_data存储到索引为0的局部存储对象中,通过解密Encrypt_data就可以获得第一数据的指针,进而可以获得第一数据。
这里,先说明步骤107至步骤110的作用:步骤107至步骤110的目的是通过遍历当前所有线程以寻找出第一DLL模块,然后通过读取隐形窗口的句柄以获得解密第一数据的相关密钥数据,从而最终使第二DLL模块获得第一数据,完成整个数据的传输。由于整个过程中,都是通过读取密钥信息,然后解密以获得第一数据,不涉及数据的直接传输调用,从而减少了数据被窃取的风险,提高了数据传输的安全性。
步骤107,对所述第一加密数据进行第二次解密,以获得第二次解密后的所述第二密钥数据。
具体的,第一加密算法对应的有第一解密算法,通过读取隐形窗口的句柄中的lpClassName获得初始密钥,再使用第一解密算法可以对第一加密数据进行解密。
步骤108,根据所述第一密钥数据和第二次解密后的所述第二密钥数据,第二次获得所述第三密钥数据。
具体的计算公式为:Key=derive_key(Next_key,key1)。
步骤109,判断当前线程是否属于所述第一DLL模块。
具体的,判断的过程包括下述步骤2.1至步骤2.5。
步骤2.1,通过创建线程的函数来创建一个独立的线程对象。
具体的创建方式为:CreateThread(NULL,0,ThreadFunc,0,0,&threadId)。
步骤2.2,获得当前所有线程的快照信息。
具体的获取方式为:
hThreadSnap=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,th32ProcessID)。
步骤2.3,判断当前线程的进程ID是否是本进程的。
具体判断方式为:
do{
if(th32.th32OwnerProcessID==th32ProcessID){。
步骤2.4,获取线程的执行入口函数的地址信息。
具体获取方式为:
NtQueryInformationThread(th32.handle,
ThreadQuerySetWin32StartAddress,&dwStartAddress,sizeof(DWORD),NULL)。
其中NtQueryInformationThread则是查询线程的入口函数信息。
步骤2.5,根据获得的第一线程的入口函数地址dwStartAddress寻找第一线程。
具体的,由于每个DLL模块都创建了一个线程,而线程函数的入口地址则属于该DLL模块,那么通过查询该入口函数地址所属于的模块,则可以知道该线程是属于哪个模块的。得到哪个模块就可以通过线程局部存储对象得到该模块存储的数据,从而获取该模块的隐藏数据。
步骤110,若是,则根据第二次获得的所述第三密钥数据对所述第二加密数据解密,获得所述第一数据。
具体的,通过先前计算得到的第三密钥数据以及第一解密算法,就可对第二加密数据解密,获得第一数据的指针,从而获得第一数据。
在一种可能的实施例中,通常来说,加密强度大的加密算法安全性能更好,但是需要的每秒处理的数据量也会更大,这就需要性能更高的运行设备。本发明实施例中,还增加了第一加密算法的选择过程,使性能更好的硬性设备选择加密强度大的加密算法,性能较差的设备选择加密强度小的加密算法,使运行设备在保证其自身运行得流畅性的同时,选用更安全的加密算法。
所述以所述初始密钥数据为密钥,利用第一加密算法对第二密钥数据加密,生成第一加密数据,并将所述第一加密数据保存在所述隐形窗口的句柄中之前,包括下述步骤3.1至步骤3.4。
步骤3.1,将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中。
具体的,本发明实施例中用n来记录隐形窗口的当前累计刷新次数,当窗口刷新一次,n的值则加1。
具体的,本发明实施例通过Hash加密,对当前累计刷新次数进行加密。对当前累计刷新次数进行加密保存,用来避免黑客通过读取隐形窗口的句柄轻易获得当前累计刷新次数,提高数据传输的安全性。
步骤3.2,根据所述隐形窗口的当前累计刷新次数的更新间隔时间,计算所述隐形窗口的刷新帧率。
本发明实施例通过记录隐形窗口的句柄中加密的当前累计刷新次数相邻两次变化的间隔时间,便可通过该间隔时间计算出隐形窗口的刷新帧率。
步骤3.3,根据所述刷新帧率,计算每秒钟处理的数据量,计算公式如下所示:
Figure BDA0002352351500000131
其中,DS为每秒钟处理的数据量,FPS为所述隐形窗口的刷新帧率,Factor1为第一拟合参数,Factor2为第二拟合参数,Factor3为第三拟合参数。
Factor1、Factor2和Factor3的具体获取过程为:本发明实施例通过实机测试获取了一定数量的隐形窗口的刷新帧率以及其对应的每秒钟处理的数据量,获得如下关系:当隐形窗口的刷新帧率不大于40时,隐形窗口的刷新帧率以及其对应的每秒钟处理的数据量呈线性关系,而当隐形窗口的刷新帧率大于40时,隐形窗口的刷新帧率以及其对应的每秒钟处理的数据量呈二次函数关系。通过代入数据组进行拟合计算,可以确定出Factor1、Factor2和Factor3三个拟合参数的数值。
步骤3.4,从加密算法库中依据步骤3.3中计算获得的所述每秒钟处理的数据量选择第一加密算法。
本发明实施例中的加密算法库中存有一定数量的加密算法和其对应的解密算法,通常情况下加密效果好、不容易被破解的加密算法,对性能要求较高,而隐形窗口的刷新帧率高低能表征当前机器的性能,刷新帧率越高,性能越好,刷新帧率越低,性能越差。本发明实施例中将加密算法按照性能进行排序,然后为每个刷新帧率对应设置一个加密算法以及该加密算法对应的解密算法,使加密算法的选择符合当前机器的性能。本发明实施例首先计算隐形窗口的刷新帧率,然后依据刷新帧率并通过步骤3.3中的公式计算得到该刷新帧率对应的每秒钟处理的数据量,最后依据该计算获得的每秒钟处理的数据量,从加密算法库中选出符合与该每秒钟处理的数据量相对应的第一加密算法以及其对应的第一解密算法。
具体的,本发明实施例的加密算法库可以包括有DES、3DES、AES、IDEA和PBE等加密算法以及各加密算法对应的解密算法。其中,DES算法加密速度较快,对每秒钟处理的数据量的需求较低,可以在低性能设备使用;3DES算法较DES算法加密性能更好,但对每秒钟处理的数据量的需求较高,可以用于性能稍好的设备使用;AES算法相较于DES算法和3DES算法,有更好的加密性能,因此对每秒钟处理的数据量的需求更高,要用于性能较好的设备进行使用。同时,相同的加密算法还拥有不同的加密模式,例如DES算法就包括有EBC模式、CBC模式、CFB模式、OFB模式和CTR模式,每个模式还拥有不同的加密强度等级和具体的DS需求,本发明实施例通过对不同算法、不同加密模式进行所需DS排序,从而完成了加密算法库的构建。
具体的,表1所示为本发明实施例中使用的一种加密算法库。
表1
FPS 加密算法 解密算法
20 加密算法1 解密算法1
21 加密算法2 解密算法2
22 加密算法3 解密算法3
…… …… ……
120 加密算法121 解密算法121
在一种可能的实施例中,所述对所述第一加密数据进行第一次解密,以获得第一次解密后的所述第二密钥数据之前,以及所述对所述第一加密数据进行第二次解密,以获得第二次解密后的所述第二密钥数据之前,包括步骤4.1至步骤4.4。
步骤4.1,将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中。
具体的,本发明实施例中用n来记录隐形窗口的当前累计刷新次数,当窗口刷新一次,n的值则加1。
具体的,本发明实施例通过Hash加密,对当前累计刷新次数进行加密。对当前累计刷新次数进行加密保存,用来避免黑客通过读取隐形窗口的句柄轻易获得当前累计刷新次数,提高数据传输的安全性。
步骤4.2,根据所述隐形窗口的当前累计刷新次数的更新间隔时间,计算所述隐形窗口的刷新帧率。
本发明实施例通过记录隐形窗口的句柄中加密的当前累计刷新次数相邻两次变化的间隔时间,便可通过该间隔时间计算出隐形窗口的刷新帧率。
步骤4.3,根据所述刷新帧率,计算每秒钟处理的数据量,计算公式如下所示:
Figure BDA0002352351500000151
其中,DS为每秒钟处理的数据量,FPS为所述隐形窗口的刷新帧率,Factor1为第一拟合参数,Factor2为第二拟合参数,Factor3为第三拟合参数。
Factor1、Factor2和Factor3的具体获取过程为:本发明实施例通过实机测试获取了一定数量的隐形窗口的刷新帧率以及其对应的每秒钟处理的数据量,获得如下关系:当隐形窗口的刷新帧率不大于40时,隐形窗口的刷新帧率以及其对应的每秒钟处理的数据量呈线性关系,而当隐形窗口的刷新帧率大于40时,隐形窗口的刷新帧率以及其对应的每秒钟处理的数据量呈二次函数关系。通过代入数据组进行拟合计算,可以确定出Factor1、Factor2和Factor3三个拟合参数的数值。
具体的,性能越好的设备,提供的用于加密算法计算所需的每秒钟处理的数据量就会越高,这样的设备能够流畅运行对设备计算能力要求更高、加密效果更好的加密算法;反之,性能不好的设备,提供的用于加密算法计算所需的每秒钟处理的数据量就会越低,这样的设备应当运行对设备计算能力要求较低、加密效果一般的加密算法。本发明实施例中,创新性地使用设备上隐形窗口的刷新帧率来表征该设备性能高低以及能够提供的最佳的每秒钟处理的数据量,所述最佳的每秒钟处理的数据量是在保证当前设备运行流畅的前提下该设备所能提供的最大每秒钟处理的数据量。
同时,本发明实施例还提供了一种最优的依据隐形窗口的刷新帧率计算每秒钟处理的数据量的计算方案。该计算方案中的公式中,在确定出Factor1、Factor2和Factor3三个拟合参数的数值后,通过下述公式可以计算出计算公式中衔接的FPS的数值40,具体公式为:
FPS·Factor1=FPS·FPS·Factor2+Factor3。
具体的,该计算方案中的公式所包含的意义为:对于隐形窗口的刷新帧率不大于40的设备,由于设备性能限制,隐形窗口的刷新帧率的变化与设备所提供的每秒钟处理的数据量的变化是呈线性关系的,避免每秒钟处理的数据量的增速太快,影响设备上其他程序的流畅运行;而对于隐形窗口的刷新帧率大于40的设备,随着刷新帧率的不断提高,这些设备的性能已经有了很大的提高,因而允许其提供的每秒钟处理的数据量的增速进一步提高,与FPS呈现二次函数关系,从而使该设备在不影响设备上其他程序的流畅运行的前提下,提供更大的每秒钟处理的数据量。也即,在本发明实施例中,隐形窗口的刷新帧率为40,相对于小于40或大于40的刷新帧率,能够达到更准确地计算出设备所能提供的最佳的每秒钟处理的数据量的技术效果。
步骤4.3,从加密算法库中依据步骤4.2中计算获得的所述每秒钟处理的数据量选择第一加密算法对应的第一解密算法。
本发明实施例中的加密算法库中存有一定数量的加密算法和其对应的解密算法,通常情况下加密效果好、不容易被破解的加密算法,对性能要求较高,而隐形窗口的刷新帧率高低能表征当前机器的性能,刷新帧率越高,性能越好,刷新帧率越低,性能越差。本发明实施例中将加密算法按照性能进行排序,然后为每个刷新帧率对应设置一个加密算法以及该加密算法对应的解密算法,使加密算法的选择符合当前机器的性能。本发明实施例首先计算隐形窗口的刷新帧率,然后依据刷新帧率并通过步骤4.2中的公式计算得到该刷新帧率对应的每秒钟处理的数据量,最后依据该计算获得的每秒钟处理的数据量,从加密算法库中选出符合与该每秒钟处理的数据量相对应的第一加密算法以及其对应的第一解密算法。
在一种可能的实施例中,由于使用单一Hash值来保存当前累计刷新次数,会存在Hash碰撞情况的出现,即同一个Hash值对应了两个不同的当前累计刷新次数,为此本发明实施例使用两个Hash值来保存当前累计刷新次数,从而规避Hash碰撞的情况的出现。
所述将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中,包括:
步骤5.1,基于所述当前累计刷新次数生成当前BKDRHash值,并将所述当前BKDRHash值保存在所述隐形窗口的句柄的nHeight中。
具体计算公式为:nHeight=BKDRHash(n)。
步骤5.2,基于所述当前累计刷新次数生成当前APHash值,并将所述当前APHash值保存在所述隐形窗口的句柄的nWidth中。
具体计算公式为:nWidth=aphash(n)。
其中,所述当前BKDRHash值和所述当前APHash值用以共同组成第一int数据;所述第一int数据用以指代所述当前累计刷新次数。
具体的,由于当前累计刷新次数在不停地变化,因此当前BKDRHash值和当前APHash值也在不停发生变化。
具体的,当通过读取隐形窗口的句柄,即可获得当前BKDRHash值和当前APHash值,从而可以知晓当前累计刷新次数。而当第一int数据发生变化时,即可认为当前累计刷新次数进行了更新。
基于与方法同样的发明构思,本发明实施例还提供了一种Windows客户端程序模块间的加密数据传输的装置,如图2所示为该装置实施例的结构示意图,具体包括:
第一密钥数据生成模块201,用于根据主程序的启动时间戳、主程序中所有线程的线程ID和第一DLL模块的名称,生成所述第一DLL模块的第一密钥数据;
窗口创建模块202,用于创建隐形窗口,将初始密钥数据保存在所述隐形窗口的句柄中;其中,所述初始密钥数据通过所述隐形窗口的句柄计算Hash值得到;
第一加密数据生成模块203,用于以所述初始密钥数据为密钥,利用第一加密算法对第二密钥数据加密,生成第一加密数据,并将所述第一加密数据保存在所述隐形窗口的句柄中;
第二密钥数据获得模块204,用于对所述第一加密数据进行第一次解密,以获得第一次解密后的所述第二密钥数据;
第三密钥数据生成模块205,用于根据所述第一密钥数据和第一次解密后的所述第二密钥数据,第一次生成第三密钥数据;
第二加密数据获得模块206,用于以所述第三密钥数据为密钥,利用所述第一加密算法对所述第一数据的指针加密,获得第二加密数据,并将所述第二加密数据保存在所述第一DLL模块中的局部存储对象中;
第二密钥数据获得模块204,还用于对所述第一加密数据进行第二次解密,以获得第二次解密后的所述第二密钥数据;
第三密钥数据生成模块205,还用于根据所述第一密钥数据和第二次解密后的所述第二密钥数据,第二次获得所述第三密钥数据;
第一判断模块207,用于判断当前线程是否属于所述第一DLL模块;
第一数据获得模块208,用于当当前线程属于所述第一DLL模块时根据第二次获得的所述第三密钥数据对所述第二加密数据解密,获得所述第一数据。
在一种可能的实施例中,所述装置还包括:
当前累计刷新次数存储模块,用于将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中;
刷新帧率计算模块,用于根据所述隐形窗口的当前累计刷新次数的更新间隔时间,计算所述隐形窗口的刷新帧率;
每秒钟处理的数据量计算模块,用于根据所述刷新帧率,计算每秒钟处理的数据量,计算公式如下所示:
Figure BDA0002352351500000181
其中,DS为每秒钟处理的数据量,FPS为所述隐形窗口的刷新帧率,Factor1为第一拟合参数,Factor2为第二拟合参数,Factor3为第三拟合参数;
第一加密算法筛选模块,用于根据所述每秒钟处理的数据量,从加密算法库中选择第一加密算法对应的第一解密算法。
在一种可能的实施例中,所述装置还包括:
当前累计刷新次数存储模块,用于将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中;
刷新帧率计算模块,用于根据所述隐形窗口的当前累计刷新次数的更新间隔时间,计算所述隐形窗口的刷新帧率;
每秒钟处理的数据量计算模块,用于根据所述刷新帧率,计算每秒钟处理的数据量,计算公式如下所示:
Figure BDA0002352351500000182
其中,DS为每秒钟处理的数据量,FPS为所述隐形窗口的刷新帧率,Factor1为第一拟合参数,Factor2为第二拟合参数,Factor3为第三拟合参数;
第一解密算法筛选模块,用于根据所述每秒钟处理的数据量,从加密算法库中选择第一加密算法对应的第一解密算法。
在一种可能的实施例中,所述第一加密数据生成模块203,包括:
盐数据获取模块,用于根据主程序中所有线程的线程ID获取盐数据;
第一密钥数据创建模块,用于基于主程序启动时生成的当前时间戳、进程ID数据、所述第一DLL模块的名称和随机数据和所述盐数据创建第一密钥数据;
第一DLL模块加载模块,用于使用系统函数LoadLibrary来加载所述第一DLL模块;
第一密钥数据设置模块,用于调用所述第一DLL模块的密钥设置函数接口将所述第一密钥数据设置到所述第一DLL模块中。
在一种可能的实施例中,所述盐数据获取模块,包括:
进程ID获取模块,用于获取当前的进程ID;
第二判断模块,用于判断当前线程的快照信息是否包含所述当前的进程ID;
线程ID存储模块,用于当当前线程的快照信息包含所述当前的进程ID时将当前线程的线程ID存入到线程ID列表中;
盐数据生成模块,用于将所述线程ID列表作为所述盐数据。
在一种可能的实施例中,所述当前累计刷新次数存储模块,包括:
当前BKDRHash值生成模块,用于基于所述当前累计刷新次数生成当前BKDRHash值,并将所述当前BKDRHash值保存在所述隐形窗口的句柄的第一变量中;
当前APHash值生成模块,用于基于所述当前累计刷新次数生成当前APHash值,并将所述当前APHash值保存在所述隐形窗口的句柄的第二变量中;
其中,所述当前BKDRHash值和所述当前APHash值用以共同组成第一int数据;所述第一int数据用以指代所述当前累计刷新次数。
基于与方法同样的发明构思,本发明实施例还提供了一种计算机设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行该计算机程序以实现如上述方法实施例中所述的加密数据传输的方法的步骤。
第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时以实现如上述方法实施例中所述的加密数据传输的方法的步骤。
本发明实施例与现有技术相比,具有如下的优点和有益效果:
本发明实施例首先对为第一DLL模块创建并设置第一密钥数据,然后在隐形窗口的句柄中存入初始密钥以及通过初始密钥加密对第二密钥数据加密的第一加密数据;当第一DLL模块向第二DLL模块传输第一数据时,本发明首先通过读取隐形窗口的句柄以解密获知第二密钥数据,然后使用第一密钥数据和第二密钥数据共同对第一数据的指针进行加密;之后当第二DLL模块获取第一数据时,再次通过读取隐形窗口的句柄以解密获知第二密钥数据,然后去解密第一数据的指针的加密数据,从而获得第一数据。
本发明实施例没有使用调用DLL模块接口的方式直接传输数据,而是创新地将第二密钥数据的解密信息保存在隐藏窗口的句柄中,通过读取隐藏窗口的句柄,来获得传输数据的加密、解密信息,从而完成DLL模块间的数据传输。而隐形窗口的句柄是实时变化的,第二密钥数据的值只有解密当时才能确定,使得第二密钥数据安全性非常高,提高了数据传输的安全性。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(装置、系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包括这些改动和变型在内。

Claims (10)

1.一种Windows客户端程序模块间的加密数据传输的方法,其特征在于,包括:
根据主程序的启动时间戳、主程序中所有线程的线程ID和第一DLL模块的名称,生成所述第一DLL模块的第一密钥数据;
创建隐形窗口,将初始密钥数据保存在所述隐形窗口的句柄中;其中,所述初始密钥数据通过所述隐形窗口的句柄计算Hash值得到;
生成所述第一DLL模块对应的第一密钥数据的第二密钥数据;
以所述初始密钥数据为密钥,利用第一加密算法对第二密钥数据加密,生成第一加密数据,并将所述第一加密数据保存在所述隐形窗口的句柄中;对所述第一加密数据进行第一次解密,以获得第一次解密后的所述第二密钥数据;
根据所述第一密钥数据和第一次解密后的所述第二密钥数据,第一次生成第三密钥数据;
以所述第三密钥数据为密钥,利用所述第一加密算法对第一数据的指针加密,获得第二加密数据,并将所述第二加密数据保存在所述第一DLL模块中的局部存储对象中;
对所述第一加密数据进行第二次解密,以获得第二次解密后的所述第二密钥数据;
根据所述第一密钥数据和第二次解密后的所述第二密钥数据,第二次获得所述第三密钥数据;
判断当前线程是否属于所述第一DLL模块;
若是,则根据第二次获得的所述第三密钥数据对所述第二加密数据解密,获得所述第一数据。
2.根据权利要求1所述的加密数据传输的方法,其特征在于,所述以所述初始密钥数据为密钥,利用第一加密算法对第二密钥数据加密,生成第一加密数据,并将所述第一加密数据保存在所述隐形窗口的句柄中之前,包括:
将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中;
根据所述隐形窗口的当前累计刷新次数的更新间隔时间,计算所述隐形窗口的刷新帧率;
根据所述刷新帧率,计算每秒钟处理的数据量,计算公式如下所示:
Figure DEST_PATH_FDA0002352351490000011
其中,DS为每秒钟处理的数据量,FPS为所述隐形窗口的刷新帧率,Factor1为第一拟合参数,Factor2为第二拟合参数,Factor3为第三拟合参数;
从加密算法库中依据所述每秒钟处理的数据量选择第一加密算法。
3.根据权利要求1所述的加密数据传输的方法,其特征在于,所述对所述第一加密数据进行第一次解密,以获得第一次解密后的所述第二密钥数据之前,以及所述对所述第一加密数据进行第二次解密,以获得第二次解密后的所述第二密钥数据之前,均包括:
将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中;
根据所述隐形窗口的当前累计刷新次数的更新间隔时间,计算所述隐形窗口的刷新帧率;
根据所述刷新帧率,计算每秒钟处理的数据量,计算公式如下所示:
Figure 718273DEST_PATH_FDA0002352351490000011
其中,DS为每秒钟处理的数据量,FPS为所述隐形窗口的刷新帧率,Factor1为第一拟合参数,Factor2为第二拟合参数,Factor3为第三拟合参数;
从加密算法库中依据所述每秒钟处理的数据量选择第一加密算法对应的第一解密算法。
4.根据权利要求1所述的加密数据传输的方法,其特征在于,所述根据主程序的启动时间戳、主程序中所有线程的线程ID和第一DLL模块的名称,生成所述第一DLL模块的第一密钥数据,包括:
根据主程序中所有线程的线程ID获取盐数据;
基于主程序启动时生成的当前时间戳、进程ID数据、所述第一DLL模块的名称和随机数据和所述盐数据创建第一密钥数据;
使用系统函数LoadLibrary来加载所述第一DLL模块;
调用所述第一DLL模块的密钥设置函数接口将所述第一密钥数据设置到所述第一DLL模块中。
5.根据权利要求4所述的加密数据传输的方法,其特征在于,所述根据主程序中所有线程的线程ID获取盐数据,包括:
获取当前的进程ID;
判断当前线程的快照信息是否包含所述当前的进程ID;
若是,则将当前线程的线程ID存入到线程ID列表中;
将所述线程ID列表作为所述盐数据。
6.根据权利要求2或3所述的加密数据传输的方法,其特征在于,所述将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中,包括:
基于所述当前累计刷新次数生成当前BKDRHash值,并将所述当前BKDRHash值保存在所述隐形窗口的句柄的第一变量中;
基于所述当前累计刷新次数生成当前APHash值,并将所述当前APHash值保存在所述隐形窗口的句柄的第二变量中;
其中,所述当前BKDRHash值和所述当前APHash值用以共同组成第一int数据;所述第一int数据用以指代所述当前累计刷新次数。
7.一种Windows客户端程序模块间的加密数据传输的装置,其特征在于,包括:
第一密钥数据生成模块,用于根据主程序的启动时间戳、主程序中所有线程的线程ID和第一DLL模块的名称,生成所述第一DLL模块的第一密钥数据;
窗口创建模块,用于创建隐形窗口,将初始密钥数据保存在所述隐形窗口的句柄中;其中,所述初始密钥数据通过所述隐形窗口的句柄计算Hash值得到;以及生成第一DLL模块对应的第一密钥数据的第二密钥数据;
第一加密数据生成模块,用于以所述初始密钥数据为密钥,利用第一加密算法对第二密钥数据加密,生成第一加密数据,并将所述第一加密数据保存在所述隐形窗口的句柄中;第二密钥数据获得模块,用于对所述第一加密数据进行第一次解密,以获得第一次解密后的所述第二密钥数据;
第三密钥数据生成模块,用于根据所述第一密钥数据和第一次解密后的所述第二密钥数据,第一次生成第三密钥数据;
第二加密数据获得模块,用于以所述第三密钥数据为密钥,利用所述第一加密算法对第一数据的指针加密,获得第二加密数据,并将所述第二加密数据保存在所述第一DLL模块中的局部存储对象中;
第二密钥数据获得模块,还用于对所述第一加密数据进行第二次解密,以获得第二次解密后的所述第二密钥数据;
第三密钥数据生成模块,还用于根据所述第一密钥数据和第二次解密后的所述第二密钥数据,第二次获得所述第三密钥数据;
第一判断模块,用于判断当前线程是否属于所述第一DLL模块;
第一数据获得模块,用于当当前线程属于所述第一DLL模块时根据第二次获得的所述第三密钥数据对所述第二加密数据解密,获得所述第一数据。
8.根据权利要求7所述的加密数据传输的装置,其特征在于,所述装置还包括:
当前累计刷新次数存储模块,用于将所述隐形窗口的当前累计刷新次数保存在所述隐形窗口的句柄中;
刷新帧率计算模块,用于根据所述隐形窗口的当前累计刷新次数的更新间隔时间,计算所述隐形窗口的刷新帧率;
每秒钟处理的数据量计算模块,用于根据所述刷新帧率,计算每秒钟处理的数据量,计算公式如下所示:
Figure 307518DEST_PATH_FDA0002352351490000011
其中,DS为每秒钟处理的数据量,FPS为所述隐形窗口的刷新帧率,Factor1为第一拟合参数,Factor2为第二拟合参数,Factor3为第三拟合参数;
第一加密算法筛选模块,用于根据所述每秒钟处理的数据量,从加密算法库中选择第一加密算法对应的第一解密算法。
9.一种计算机设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序以实现权利要求1至6任一所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时以实现权利要求1至6任一所述的方法的步骤。
CN201911420868.6A 2019-12-31 2019-12-31 一种Windows客户端程序模块间的加密数据传输的方法和装置 Active CN113127223B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911420868.6A CN113127223B (zh) 2019-12-31 2019-12-31 一种Windows客户端程序模块间的加密数据传输的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911420868.6A CN113127223B (zh) 2019-12-31 2019-12-31 一种Windows客户端程序模块间的加密数据传输的方法和装置

Publications (2)

Publication Number Publication Date
CN113127223A CN113127223A (zh) 2021-07-16
CN113127223B true CN113127223B (zh) 2022-10-11

Family

ID=76769538

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911420868.6A Active CN113127223B (zh) 2019-12-31 2019-12-31 一种Windows客户端程序模块间的加密数据传输的方法和装置

Country Status (1)

Country Link
CN (1) CN113127223B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102938036A (zh) * 2011-11-29 2013-02-20 Ut斯达康通讯有限公司 Windows动态链接库的分段双重加密及安全加载方法
CN108804937A (zh) * 2018-06-12 2018-11-13 广州华多网络科技有限公司 系统函数调用方法及相关装置
CN109558721A (zh) * 2017-09-27 2019-04-02 思杰系统有限公司 客户端应用程序的安全单点登录和条件访问

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
EP2222048A1 (en) * 2009-02-24 2010-08-25 BRITISH TELECOMMUNICATIONS public limited company Detecting malicious behaviour on a computer network
US8370934B2 (en) * 2009-06-25 2013-02-05 Check Point Software Technologies Ltd. Methods for detecting malicious programs using a multilayered heuristics approach

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102938036A (zh) * 2011-11-29 2013-02-20 Ut斯达康通讯有限公司 Windows动态链接库的分段双重加密及安全加载方法
CN109558721A (zh) * 2017-09-27 2019-04-02 思杰系统有限公司 客户端应用程序的安全单点登录和条件访问
CN108804937A (zh) * 2018-06-12 2018-11-13 广州华多网络科技有限公司 系统函数调用方法及相关装置

Also Published As

Publication number Publication date
CN113127223A (zh) 2021-07-16

Similar Documents

Publication Publication Date Title
CN110995409B (zh) 基于部分同态加密算法的拟态防御裁决方法和系统
US11637689B2 (en) Efficient encrypted data management system and method
WO2018184407A1 (zh) 一种具有隐私保护的K-means聚类方法及系统
US9178779B2 (en) System for detecting whether client state matches predetermined state
CN106878013B (zh) 一种文件的加密、解密方法和装置
CN105450620A (zh) 一种信息处理方法及装置
US11128452B2 (en) Encrypted data sharing with a hierarchical key structure
CN110719160A (zh) 一种基于量子随机数和国密算法的数据库加密方法
US9819493B2 (en) Enhanced security for media encryption
CN106446697A (zh) 隐私数据的保存方法及装置
CN111767411A (zh) 知识图谱表示学习优化方法、设备及可读存储介质
CN113326518B (zh) 一种数据处理方法及装置
CN113127223B (zh) 一种Windows客户端程序模块间的加密数据传输的方法和装置
CN113722741A (zh) 数据加密方法及装置、数据解密方法及装置
CN111400744B (zh) 文件加解密处理方法、装置、设备及可读存储介质
CN111191253B (zh) 一种数据加密组合方法
US9336696B2 (en) Enhanced security setup for media decryption
US9519757B2 (en) AES-GCM based enhanced security setup for media encryption
US9825764B2 (en) Enhanced security for media decryption
CN116248258A (zh) 一种密码检测方法、装置、设备及存储介质
CN108734016A (zh) 一种数据持久层的访问方法以及计算机设备
US20220014366A1 (en) Key protection using a noising and de-noising scheme
CN114513302A (zh) 一种数据加解密方法及设备
Zhang et al. Encrypted and compressed key-value store with pattern-analysis security in cloud systems
CN111639349B (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