CN108064382A - 一种基于Ukey的软件解密的方法及终端 - Google Patents

一种基于Ukey的软件解密的方法及终端 Download PDF

Info

Publication number
CN108064382A
CN108064382A CN201780001446.8A CN201780001446A CN108064382A CN 108064382 A CN108064382 A CN 108064382A CN 201780001446 A CN201780001446 A CN 201780001446A CN 108064382 A CN108064382 A CN 108064382A
Authority
CN
China
Prior art keywords
ukey
address
block
code
software
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
CN201780001446.8A
Other languages
English (en)
Other versions
CN108064382B (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.)
Fujian Landi Commercial Equipment Co Ltd
Original Assignee
Fujian Landi Commercial Equipment 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 Fujian Landi Commercial Equipment Co Ltd filed Critical Fujian Landi Commercial Equipment Co Ltd
Publication of CN108064382A publication Critical patent/CN108064382A/zh
Application granted granted Critical
Publication of CN108064382B publication Critical patent/CN108064382B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明提供一种基于Ukey的软件解密方法及终端,包括对软件代码进行加密,得到加密数据,并将与所述加密对应的解密程序存储于Ukey;通过shell程序获取加密数据,将所述加密数据发送至所述Ukey,使得所述Ukey通过所述解密程序解密所述加密数据,得到解密数据;接收Ukey发送的解密数据,通过将解密程序存储于Ukey,通过Ukey来解密已经加密了的程序代码,将解密程序和程序代码分开,使得破解者无法获取解密程序并分析,提高了软件解密的安全性。

Description

一种基于Ukey的软件解密的方法及终端
技术领域
本发明涉及软件安全领域,特别涉及一种基于Ukey的软件解密的方法及终端。
背景技术
软件的加密与解密,就是通常说的加壳与脱壳。加壳是指在程序的PE文件块区段中新增一个块,再把解密程序写入到这个块中,并重新定位程序的入口点到此块,最后把程序的代码段数据进行加密,使得破解者在获得程序时无法直接分析程序代码段,从而达到防破解的目的;脱壳是指在程序运行起来时,入口点进入新增块的程序,把原先加密的代码段数据解密,并重新定位程序的其它块的地址,再把入口点跳到解密代码段原先的入口点中,完成解密的过程。这种加密与解密也是现在比较常用的方法。
新增一个区块是在最后一个区块上加入一个新块,在PE格式的文件上,最后一个块的地址Address,其长度为size,那么新增区块的地址=Address+size。那么把解密的程序的代码段用memcpy复制到新增的区块地址上。由于在解密程序中的代码段中地址需要重新定位,其地址原先是相对于解密程序所在PE格式文件中的偏移,现在加入到PE文件的中,新增块代码段的偏移地址就要改成相对于PE文件的偏移。
新增区块在重新定位地址后,并修改PE的相关属性(如区块的数量)后,再把程序原来的入口地址修改成新增块的入口地址,在新增块程序后再用指令jmp跳转到原来的入口地址,以保证在解密后可以按程序的流程执行原来的代码。
在现有加密与解密方法上,解密程序同软件的代码都保存在程序的可执行文件PE中,可执行程序最终运行在用户的设备上,这样可执行程序很容易被破解者在第一时间内获取并分析,存在安全隐患。
发明内容
本发明所要解决的技术问题是:提供一种安全性高的基于Ukey的软件解密的方法及终端。
为了解决上述技术问题,本发明采用的一种技术方案为:
一种基于Ukey的软件解密的方法,包括步骤:
S1、对程序代码进行加密,得到加密数据,并将与所述加密对应的解密程序存储于Ukey;
S2、通过shell程序获取加密数据,将所述加密数据发送至所述Ukey,使得所述Ukey通过所述解密程序解密所述加密数据,得到解密数据;
S3、接收Ukey发送的解密数据。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种基于Ukey的软件解密的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
S1、对软件代码进行加密,得到加密数据,并将与所述加密对应的解密程序存储于Ukey;
S2、通过shell程序获取加密数据,将所述加密数据发送至所述Ukey,使得所述Ukey通过所述解密程序解密所述加密数据,得到解密数据;
S3、接收Ukey发送的解密数据。
本发明的有益效果在于:通过将解密程序存储于Ukey,通过Ukey来解密已经加密了的程序代码,将解密程序和程序代码分开,使得破解者无法获取解密程序并分析,提高了软件解密的安全性。
附图说明
图1为本发明实施例的基于Ukey的软件解密的方法流程图;
图2为本发明实施例的基于Ukey的软件解密的终端结构示意图;
标号说明:
1、基于Ukey的软件解密的终端;2存储器;3、处理器;4、Ukey。
具体实施方式
本发明最关键的构思在于:将解密程序存储于Ukey,通过Ukey来解密已经加密了的程序代码,将解密程序和程序代码分开。
请参照图1,一种基于Ukey的软件解密的方法,其特征在于,包括步骤:
S1、对软件代码进行加密,得到加密数据,并将与所述加密对应的解密程序存储于Ukey;
S2、通过shell程序获取加密数据,将所述加密数据发送至所述Ukey,使得所述Ukey通过所述解密程序解密所述加密数据,得到解密数据;
S3、接收Ukey发送的解密数据。
从上述描述可知,本发明的有益效果在于:通过将解密程序存储于Ukey,通过Ukey来解密已经加密了的程序代码,将解密程序和程序代码分开,使得破解者无法获取解密程序并分析,提高了软件解密的安全性。
进一步的,步骤S1中对软件代码进行加密,得到加密数据具体包括步骤:
S11、将所述软件代码以PE文件格式读取并写入缓存区域中,根据缓存区域中PE文件的偏移信息得到首个区块的地址,并判断得到代码区块地址;
S12、根据所述代码区块地址,从所述缓存区域中提取所述软件代码的可执行二进制代码;
S13、将所述可执行二进制代码进行加密后写回缓存区域中PE文件的代码区块。
由上述描述可知,根据所述代码区块地址,从所述缓存区域中提取所述软件代码的可执行二进制代码,将所述可执行二进制代码加密后写回缓存区域中PE文件的代码区块,方便后续对所述代码进行解密。
进一步的,所述软件代码的PE文件的头信息中预留自定义存储空间。
由上述描述可知,在所述软件代码的PE文件的头信息中预留自定义存储空间,方便对数据的保存。
进一步的,还包括步骤:
S14、记录加密后的可执行二进制代码的长度,将所述长度写入所述自定义存储空间。
由上述描述可知,将所述长度写入所述自定义存储空间,保证了后续运行程序时可以获得相应长度的加密后的软件代码以方便进行解密。
进一步的,所述判断得到代码区块地址具体包括步骤:
S111、解析PE文件,获取区块数、首个区块的地址和PE的入口地址;
S112、判断PE的入口地址是否大于等于区块的起始地址和小于区块的最后一个地址,若是,则该区块为代码区块,其对应的地址为代码区块地址;否则,获取下一个区块的地址,并返回步骤S112。
进一步的,还包括步骤:
S15、获取缓存区域中PE文件的地址,在所述缓存区域添加一个新的区块,并设置所述新的区块的属性,使其满足PE文件的格式;
S16、在所述新的区块中加入与获取解密程序相关的shell程序代码,并将所述缓存区域中PE文件的入口地址更新为所述新的区块的地址。
由上述描述可知,将所述缓存区域中PE文件的入口地址更新为所述新的区块的地址,保证了软件启动时先执行解密操作。
进一步的,还包括步骤:
S17、将所述缓存区域中PE文件的原始入口地址备份至所述自定义存储空间。
由上述描述可知,将所述缓存区域中PE文件的原始入口地址备份至所述自定义存储空间,方便解密时获得所述原始入口地址以获取加密后的软件代码。
进一步的,步骤S2具体包括步骤:
S21、shell程序获取PE文件信息,得到PE文件的原始入口地址;
S22、根据所述缓存区域中PE文件的原始入口地址,得到所述加密后的可执行二进制数据的区块地址;
S23、根据所述区块地址,获取所述加密后的可执行二进制数据;
S24、将所述加密后的可执行二进制数据发送至Ukey,使得所述Ukey通过所述解密程序解密所述加密后的可执行二进制数据,得到解密数据。
由上述描述可知,通过Ukey来解密已经加密了的程序代码,将解密程序和程序代码分开,使得破解者无法获取解密程序并分析,提高了软件解密的安全性。
进一步的,将所述加密后的可执行二进制数据分块发送至所述Ukey。
进一步的,步骤S3具体包括接收Ukey发送的解密数据,并将所述解密数据写回相应的软件代码的进程虚拟内存中。
由上述描述可知,接收Ukey发送的解密数据,并将所述解密数据写回相应的所述软件代码的进程虚拟内存中,保证了解密后程序正常运行。
进一步的,在写入前先设置所述软件代码的进程虚拟内存有读写权限。
从上述描述可知,写入前先设置所述软件代码的进程虚拟内存有读写权限,以保证所述软件代码能顺利修改加密后的代码。
请参照图2,一种基于Ukey的软件解密的终端1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述程序时实现以下步骤:
S1、对软件代码进行加密,得到加密数据,并将与所述加密对应的解密程序存储于Ukey;
S2、通过shell程序获取加密数据,将所述加密数据发送至所述Ukey,使得所述Ukey通过所述解密程序解密所述加密数据,得到解密数据;
S3、接收Ukey发送的解密数据。
从上述描述可知,本发明的有益效果在于:通过将解密程序存储于Ukey,通过Ukey来解密已经加密了的程序代码,将解密程序和程序代码分开,使得破解者无法获取解密程序并分析,提高了软件解密的安全性。
进一步的,步骤S1中对软件代码进行加密,得到加密数据具体包括步骤:
S11、将所述软件代码以PE文件格式读取并写入缓存区域中,根据缓存区域中PE文件的偏移信息得到首个区块的地址,并判断得到代码区块地址;
S12、根据所述代码区块地址,从所述缓存区域中提取所述软件代码的可执行二进制代码;
S13、将所述可执行二进制代码进行加密后写回缓存区域中的代码区块。
由上述描述可知,根据所述代码区块地址,从所述缓存区域中提取所述软件代码的可执行二进制代码,将所述可执行二进制代码加密后写回缓存区域中PE文件的代码区块,方便后续对所述代码进行解密。
进一步的,所述软件代码的PE文件的头信息中预留自定义存储空间。
由上述描述可知,在所述软件代码的PE文件的头信息中预留自定义存储空间,方便对数据的保存。
进一步的,还包括步骤:
S14、记录加密后的可执行二进制代码的长度,将所述长度写入所述自定义存储空间。
由上述描述可知,将所述长度写入所述自定义存储空间,保证了后续运行程序时可以获得相应长度的加密后的软件代码以方便进行解密。
进一步的,所述判断得到代码区块地址具体包括步骤:
S111、解析PE文件,获取区块数、首个区块的地址和PE的入口地址;
S112、判断PE的入口地址是否大于等于区块的起始地址和小于区块的最后一个地址,若是,则该区块为代码区块,其对应的地址为代码区块地址;否则,获取下一个区块的地址,并返回步骤S112。
进一步的,还包括步骤:
S15、获取缓存区域中PE文件的地址,在所述缓存区域添加一个新的区块,并设置所述新的区块的属性,使其满足PE文件的格式;
S16、在所述新的区块中加入与获取解密程序相关的shell程序代码,并将所述缓存区域中的PE文件入口地址更新为所述新的区块的地址。
由上述描述可知,将所述缓存区域中的PE文件入口地址更新为所述新的区块的地址,保证了软件启动时先执行解密操作。
进一步的,还包括步骤:
S17、将所述缓存区域中的PE文件原始入口地址备份至所述自定义存储空间。
由上述描述可知,将所述缓存区域中的PE文件原始入口地址备份至所述自定义存储空间,方便解密时获得所述原始入口地址以获取加密后的软件代码。
进一步的,步骤S2具体包括步骤:
S21、shell程序获取PE文件信息,得到PE文件原始入口地址;
S22、根据所述缓存区域中PE文件原始入口地址,得到所述加密后的可执行二进制数据的区块地址;
S23、根据所述区块地址,获取所述加密后的可执行二进制数据;
S24、将所述加密后的可执行二进制数据发送至Ukey,使得所述Ukey通过所述解密程序解密所述加密后的可执行二进制数据,得到解密数据。
由上述描述可知,通过Ukey来解密已经加密了的程序代码,将解密程序和程序代码分开,使得破解者无法获取解密程序并分析,提高了软件解密的安全性。
进一步的,将所述加密后的可执行二进制数据分块发送至所述Ukey。
进一步的,步骤S3具体包括接收Ukey发送的解密数据,并将所述解密数据写回相应的所述软件代码的进程虚拟内存中。
由上述描述可知,接收Ukey发送的解密数据,并将所述解密数据写回相应的所述软件代码的进程虚拟内存中,保证了解密后程序正常运行。
进一步的,在写入前先设置所述软件代码的进程虚拟内存有读写权限。
从上述描述可知,写入前先设置所述软件代码的进程虚拟内存有读写权限,以保证所述软件代码能顺利修改加密后的代码。
实施例一
一种基于Ukey的软件解密的方法,包括步骤:
S1、对软件代码进行加密,得到加密数据,并将与所述加密对应的解密程序存储于Ukey;
步骤S1中对软件代码进行加密,得到加密数据具体包括步骤:
S11、将所述软件代码以PE文件格式读取并写入缓存区域中,根据缓存区域中PE文件的偏移信息得到首个区块的地址,再根据PE中的入口地址判断代码区块所在地址,在使用缓存区域前需要先申请;
判断得到代码区块地址具体包括步骤:
S111、解析PE文件,获取区块数、首个区块的地址和PE的入口地址;
S112、判断PE的入口地址是否大于等于区块的起始地址和小于区块的最后一个地址,若是,则该区块为代码区块,其对应的地址为代码区块地址;否则,获取下一个区块的地址,并返回步骤S112;
S12、根据所述代码区块地址,可以从所述缓存区域中提取软件代码的可执行二进制代码;
S13、将所述可执行二进制代码进行加密后写回缓存区域中的代码区块;
所述软件代码的PE文件的头信息中预留自定义存储空间;
S14、记录加密后的可执行二进制代码的长度,将所述长度写入所述自定义存储空间;
S15、获取缓存区域中PE文件的地址,在所述缓存区域添加一个新的区块,并设置所述新的区块的属性,使其满足PE文件的格式;
S16、在所述新的区块中加入与获取解密程序相关的shell程序代码,并将所述缓存区域中PE文件的入口地址更新为所述新的区块的地址;
S17、将所述缓存区域中PE文件的原始入口地址备份至所述自定义存储空间,最终这个缓存区域的数据将会以PE的文件格式保存为本地磁盘的可执行文件,即加密后的程序;
S2、通过shell程序获取加密数据,将所述加密数据发送至所述Ukey,使得所述Ukey通过所述解密程序解密所述加密数据,得到解密数据;
步骤S2具体包括步骤:
S21、shell程序获取PE文件信息,得到PE文件原始入口地址;
S22、根据所述缓存区域中PE文件原始入口地址,得到所述加密后的可执行二进制数据的区块地址;
S23、根据所述区块地址,获取所述加密后的可执行二进制数据;
S24、将所述加密后的可执行二进制数据发送至Ukey,使得所述Ukey通过所述解密程序解密所述加密后的可执行二进制数据,得到解密数据;
S3、接收Ukey发送的解密数据;
步骤S3具体包括接收Ukey发送的解密数据,并将所述解密数据写回相应的所述软件代码的进程虚拟内存中。
实施例二
一种基于Ukey的软件解密的方法,包括步骤:
S1、对软件代码进行加密,得到加密数据,并将与所述加密对应的解密程序存储于Ukey;
步骤S1中对软件代码进行加密,得到加密数据具体包括步骤:
S11、将所述软件代码以PE文件格式读取并写入缓存区域pBuf中,根据缓存区域pBuf中PE文件的偏移信息得到首个区块的地址,再根据PE中的入口地址判断代码区块所在地址,在使用缓存区域前需要先申请;
判断得到代码区块地址具体包括步骤:
S111、解析PE文件,获取区块数、首个区块的地址和PE的入口地址;
S112、判断PE的入口地址是否大于等于区块的起始地址和小于区块的最后一个地址,若是,则该区块为代码区块,其对应的地址为代码区块地址;否则,获取下一个区块的地址,并返回步骤S112;
S12、根据所述代码区块地址,可以从所述缓存区域pBuf中提取软件代码的可执行二进制代码;
S13、将所述可执行二进制代码进行加密后写回缓存区域pBuf中PE文件的代码区块;
所述软件代码的PE文件的头信息中预留自定义存储空间,所述自定义存储空间大小为29*2字节;
S14、记录加密后的可执行二进制代码的长度,将所述长度写入所述自定义存储空间;
S15、获取缓存区域pBuf,在所述缓存区域pBuf中添加一个新的区块,并设置所述新的区块的属性,使其满足PE文件的格式;
所述新的区块的大小是NewSectionSize,在原来区块数组的基础上新增一个块,假设原来最后一个区块索引是LastSec-1,则新增区块的索引为LastSec,再设置新的区块的信息数据,使其满足PE的格式;
S16、在所述新的区块中加入与获取解密程序相关的shell程序代码,并将所述缓存区域pBuf中的PE文件入口地址更新为所述新的区块的地址;
其中,所述与获取解密程序相关的shell程序代码不是解密程序本身,而是当系统执行到所述shell程序时,shell程序会从PE文件的原始入口地址读取加密后的程序,将所述加密后的程序发送给Ukey,与Ukey进行后续一系列与加密后的程序解密相关的操作;
S17、将所述缓存区域pBuf中PE文件原始入口地址备份至所述自定义存储空间,最终这个缓存区域pBuf中的数据将会以PE的文件格式保存为本地磁盘的可执行文件,即加密后的程序;
在软件运行时,会先进入新的区块入口地址进行解密,具体解密过程如下:
UKey是一种通过USB(通用串行总线接口)直接与计算机相连、具有密码验证功能、可靠高速的小型存储设备,Ukey内置有芯片来对数据进行运算,可以将程序下发到Ukey中,当它插入到设备中并上电后,程序会运行起来对数据进行处理,并通过USB接口与设备进行数据的通信;
先把Ukey插入电脑上,再运行软件,软件能在系统中运行是由系统通过加载器把PE文件相关的数据加载到进程虚拟内存中,然后找到程序的入口地址,并执行进程的代码,由于所述PE文件的入口地址是先定位到新的区块的代码,因此先执行的是所述新的区块的代码,即shell程序;
S2、通过shell程序获取加密数据,将所述加密数据发送至所述Ukey,使得所述Ukey通过所述解密程序解密所述加密数据,得到解密数据;
步骤S2具体包括步骤:
S21、shell程序获取PE文件信息,得到PE文件的原始入口地址;
S22、根据所述缓存区域中PE文件的原始入口地址,得到所述加密后的可执行二进制数据的区块地址;
S23、根据所述区块地址,获取所述加密后的可执行二进制数据;
S24、将所述加密后的可执行二进制数据发送至Ukey,使得所述Ukey通过所述解密程序解密所述加密后的可执行二进制数据,得到解密数据;
shell程序代码读取自身程序文件的PE头信息,读取存储于自定义存储空间的PE文件的原始入口地址,根据所述PE文件的原始入口地址,得到所述加密后的可执行二进制数据的区块地址;根据所述区块地址,获取所述加密后的可执行二进制数据;将所述加密后的可执行二进制数据分块发送至Ukey,使得所述Ukey通过所述解密程序解密所述加密后的可执行二进制数据,得到解密数据
S3、接收Ukey发送的解密数据;
步骤S3具体包括接收Ukey发送的解密数据,并将所述解密数据写回相应的所述软件代码的进程虚拟内存中;
Ukey收到加密数据会根据其上存储的解密程序对所述加密数据进行解密,并将解密数据发送给shell程序,shell程序将所述解密数据写回相对应的虚拟内存地址中,在写入前先设置所述软件代码的进程的进程虚拟内存有读写权限,重复此发送与返回数据的过程直到数据被完全解密,最后,基于PE文件的原始入口地址便能够获取解密后的软件代码并执行所述软件代码,其中,所述原始入口地址读取至所述自定义存储空间。
实施例三
一种基于Ukey的软件解密的终端1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,其特征在于,所述处理器3执行所述程序时实现以下步骤:
S1、对软件代码进行加密,得到加密数据,并将与所述加密对应的解密程序存储于Ukey;
步骤S1中对软件代码进行加密,得到加密数据具体包括步骤:
S11、将所述软件代码以PE文件格式读取并写入缓存区域中,根据缓存区域中PE文件的偏移信息得到首个区块的地址,再根据PE中的入口地址判断代码区块所在地址,在使用缓存区域前需要先申请;
判断得到代码区块地址具体包括步骤:
S111、解析PE文件,获取区块数、首个区块的地址和PE的入口地址;
S112、判断PE的入口地址是否大于等于区块的起始地址和小于区块的最后一个地址,若是,则该区块为代码区块,其对应的地址为代码区块地址;否则,获取下一个区块的地址,并返回步骤S112;
S12、根据所述代码区块地址,可以从所述缓存区域中提取软件代码的可执行二进制代码;
S13、将所述可执行二进制代码进行加密后写回缓存区域中PE文件的代码区块;
所述软件代码的PE文件的头信息中预留自定义存储空间;
S14、记录加密后的可执行二进制代码的长度,将所述长度写入所述自定义存储空间;
S15、获取缓存区域中PE文件的地址,在所述缓存区域添加一个新的区块,并设置所述新的区块的属性,使其满足PE文件的格式;
S16、在所述新的区块中加入与获取解密程序相关的shell程序代码,并将所述缓存区域中PE文件的入口地址更新为所述新的区块的地址;
S17、将所述缓存区域中PE文件的原始入口地址备份至所述自定义存储空间,最终这个缓存区域的数据将会以PE的文件格式保存为本地磁盘的可执行文件,即加密后的程序;
S2、通过shell程序获取加密数据,将所述加密数据发送至所述Ukey,使得所述Ukey通过所述解密程序解密所述加密数据,得到解密数据;
步骤S2具体包括步骤:
S21、shell程序获取PE文件信息,得到PE文件的原始入口地址;
S22、根据所述缓存区域中PE文件的原始入口地址,得到所述加密后的可执行二进制数据的区块地址;
S23、根据所述区块地址,获取所述加密后的可执行二进制数据;
S24、将所述加密后的可执行二进制数据发送至Ukey,使得所述Ukey通过所述解密程序解密所述加密后的可执行二进制数据,得到解密数据;
S3、接收Ukey发送的解密数据;
步骤S3具体包括接收Ukey发送的解密数据,并将所述解密数据写回相应的所述软件代码的进程虚拟内存中。
实施例四
一种基于Ukey的软件解密的终端1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,其特征在于,所述处理器3执行所述程序时实现以下步骤:
S1、对软件代码进行加密,得到加密数据,并将与所述加密对应的解密程序存储于Ukey;
步骤S1中对软件代码进行加密,得到加密数据具体包括步骤:
S11、将所述软件代码以PE文件格式读取并写入缓存区域pBuf中,根据缓存区域pBuf中PE文件的偏移信息得到首个区块的地址,再根据PE中的入口地址判断代码区块所在地址,在使用缓存区域前需要先申请;
判断得到代码区块地址具体包括步骤:
S111、解析PE文件,获取区块数、首个区块的地址和PE的入口地址;
S112、判断PE的入口地址是否大于等于区块的起始地址和小于区块的最后一个地址,若是,则该区块为代码区块,其对应的地址为代码区块地址;否则,获取下一个区块的地址,并返回步骤S112;
S12、根据所述代码区块地址,可以从所述缓存区域pBuf中提取软件代码的可执行二进制代码;
S13、将所述可执行二进制代码进行加密后写回缓存区域pBuf中的代码区块;
所述软件代码的PE文件的头信息中预留自定义存储空间,所述自定义存储空间大小为29*2字节;
S14、记录加密后的可执行二进制代码的长度,将所述长度写入所述自定义存储空间;
S15、获取缓存区域pBuf中PE文件的地址,在所述缓存区域pBuf中添加一个新的区块,并设置所述新的区块的属性,使其满足PE文件的格式;
所述新的区块的大小是NewSectionSize,在原来区块数组的基础上新增一个块,假设原来最后一个区块索引是LastSec-1,则新增区块的索引为LastSec,再设置新的区块的信息数据,使其满足PE的格式;
S16、在所述新的区块中加入与获取解密程序相关的shell程序代码,并将所述缓存区域pBuf中PE文件的入口地址更新为所述新的区块的地址;
其中,所述与获取解密程序相关的shell程序代码不是解密程序本身,而是当系统执行到所述shell程序时,shell程序会从PE文件的原始入口地址读取加密后的程序,将所述加密后的程序发送给Ukey,与Ukey进行后续一系列与加密后的程序解密相关的操作;
S17、将所述PE文件的原始入口地址备份至所述自定义存储空间,最终这个缓存区域pBuf中的数据将会以PE的文件格式保存为本地磁盘的可执行文件,即加密后的程序;
在软件运行时,会先进入新的区块入口地址进行解密,具体解密过程如下:
UKey是一种通过USB(通用串行总线接口)直接与计算机相连、具有密码验证功能、可靠高速的小型存储设备,Ukey内置有芯片来对数据进行运算,可以将程序下发到Ukey中,当它插入到设备中并上电后,程序会运行起来对数据进行处理,并通过USB接口与设备进行数据的通信;
先把Ukey插入电脑上,再运行软件,软件能在系统中运行是由系统通过加载器把PE文件相关的数据加载到进程虚拟内存中,然后找到程序的入口地址,并执行进程的代码,由于所述PE文件的入口地址是先定位到新的区块的代码,因此先执行的是所述新的区块的代码,即shell程序;
S2、通过shell程序获取加密数据,将所述加密数据发送至所述Ukey,使得所述Ukey通过所述解密程序解密所述加密数据,得到解密数据;
步骤S2具体包括步骤:
S21、shell程序获取PE文件信息,得到PE文件的原始入口地址;
S22、根据所述缓存区域中PE文件的原始入口地址,得到所述加密后的可执行二进制数据的区块地址;
S23、根据所述区块地址,获取所述加密后的可执行二进制数据;
S24、将所述加密后的可执行二进制数据发送至Ukey,使得所述Ukey通过所述解密程序解密所述加密后的可执行二进制数据,得到解密数据;
shell程序代码读取自身程序文件的PE头信息,读取存储于自定义存储空间的PE文件的原始入口地址,根据所述PE文件的原始入口地址,得到所述加密后的可执行二进制数据的区块地址;根据所述区块地址,获取所述加密后的可执行二进制数据;将所述加密后的可执行二进制数据分块发送至Ukey,使得所述Ukey通过所述解密程序解密所述加密后的可执行二进制数据,得到解密数据
S3、接收Ukey发送的解密数据;
步骤S3具体包括接收Ukey发送的解密数据,并将所述解密数据写回相应的所述软件代码的进程虚拟内存中;
Ukey收到加密数据会根据其上存储的解密程序对所述加密数据进行解密,并将解密数据发送给shell程序,shell程序将所述解密数据写回相对应的虚拟内存地址中,在写入前先设置所述软件代码的进程虚拟内存有读写权限,重复此发送与返回数据的过程直到数据被完全解密,最后,基于PE文件的原始入口地址便能够获取解密后的软件代码并执行所述软件代码,其中,所述原始入口地址读取至所述自定义存储空间,将缓存区域pBuf中的数据保存为本地可执行文件。
综上所述,本发明提供的一种基于Ukey的软件解密的方法及终端,通过将解密程序存储于Ukey,通过Ukey4来解密已经加密了的程序代码,将解密程序和程序代码分开,防止逆向分析者的静态分析,提高了软件解密的安全性。

Claims (22)

1.一种基于Ukey的软件解密的方法,其特征在于,包括步骤:
S1、对软件代码进行加密,得到加密数据,并将与所述加密对应的解密程序存储于Ukey;
S2、通过shell程序获取加密数据,将所述加密数据发送至所述Ukey,使得所述Ukey通过所述解密程序解密所述加密数据,得到解密数据;
S3、接收Ukey发送的解密数据。
2.根据权利要求1所述的基于Ukey的软件解密的方法,其特征在于,
步骤S1中对软件代码进行加密,得到加密数据具体包括步骤:
S11、将所述软件代码以PE文件格式读取并写入缓存区域中,根据缓存区域中PE文件的偏移信息得到首个区块的地址,并判断得到代码区块地址;
S12、根据所述代码区块地址,从所述缓存区域中提取所述软件代码的可执行二进制代码;
S13、将所述可执行二进制代码进行加密后写回缓存区域中PE文件的代码区块。
3.根据权利要求2所述的基于Ukey的软件解密的方法,其特征在于,
所述软件代码的PE文件的头信息中预留自定义存储空间。
4.根据权利要求3所述的基于Ukey的软件解密的方法,其特征在于,
还包括步骤:
S14、记录加密后的可执行二进制代码的长度,将所述长度写入所述自定义存储空间。
5.根据权利要求2所述的基于Ukey的软件解密的方法,其特征在于,
所述判断得到代码区块地址具体包括步骤:
S111、解析PE文件,获取区块数、首个区块的地址和PE的入口地址;
S112、判断PE的入口地址是否大于等于区块的起始地址和小于区块的最后一个地址,若是,则该区块为代码区块,其对应的地址为代码区块地址;否则,获取下一个区块的地址,并返回步骤S112。
6.根据权利要求3所述的基于Ukey的软件解密的方法,其特征在于,
还包括步骤:
S15、获取缓存区域中PE文件的地址,在所述缓存区域添加一个新的区块,并设置所述新的区块的属性,使其满足PE文件的格式;
S16、在所述新的区块中加入与获取解密程序相关的shell程序代码,并将所述PE文件的入口地址更新为所述新的区块的地址。
7.根据权利要求6所述的基于Ukey的软件解密的方法,其特征在于,还包括步骤:
S17、将所述缓存区域中PE文件的原始入口地址备份至所述自定义存储空间。
8.根据权利要求7所述的基于Ukey的软件解密的方法,其特征在于,
步骤S2具体包括步骤:
S21、shell程序获取PE文件信息,得到PE文件的原始入口地址;
S22、根据所述缓存区域中PE文件的原始入口地址,得到所述加密后的可执行二进制数据的区块地址;
S23、根据所述区块地址,获取所述加密后的可执行二进制数据;
S24、将所述加密后的可执行二进制数据发送至Ukey,使得所述Ukey通过所述解密程序解密所述加密后的可执行二进制数据,得到解密数据。
9.根据权利要求8所述的基于Ukey的软件解密的方法,其特征在于,
将所述加密后的可执行二进制数据分块发送至所述Ukey。
10.根据权利要求9所述的基于Ukey的软件解密的方法,其特征在于,
步骤S3具体包括接收Ukey发送的解密数据,并将所述解密数据写回相应的软件代码的进程虚拟内存中。
11.根据权利要求10所述的基于Ukey的软件解密的方法,其特征在于,
在写入前先设置所述软件代码的进程虚拟内存有读写权限。
12.一种基于Ukey的软件解密的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现以下步骤:
S1、对软件代码进行加密,得到加密数据,并将与所述加密对应的解密程序存储于Ukey;
S2、通过shell程序获取加密数据,将所述加密数据发送至所述Ukey,使得所述Ukey通过所述解密程序解密所述加密数据,得到解密数据;
S3、接收Ukey发送的解密数据。
13.根据权利要求12所述的基于Ukey的软件解密的终端,其特征在于,
步骤S1中对软件代码进行加密,得到加密数据具体包括步骤:
S11、将所述软件代码以PE文件格式读取并写入缓存区域中,根据缓存区域中PE文件的偏移信息得到首个区块的地址,并判断得到代码区块地址;
S12、根据所述代码区块地址,从所述缓存区域中提取所述软件代码的可执行二进制代码;
S13、将所述可执行二进制代码进行加密后写回缓存区域中的代码区块。
14.根据权利要求13所述的基于Ukey的软件解密的终端,其特征在于,
所述软件代码的PE文件的头信息中预留自定义存储空间。
15.根据权利要求14所述的基于Ukey的软件解密的终端,其特征在于,
还包括步骤:
S14、记录加密后的可执行二进制代码的长度,将所述长度写入所述自定义存储空间。
16.根据权利要求13所述的基于Ukey的软件解密的终端,其特征在于,
所述判断得到代码区块地址具体包括步骤:
S111、解析PE文件,获取区块数、首个区块的地址和PE的入口地址;
S112、判断PE的入口地址是否大于等于区块的起始地址和小于区块的最后一个地址,若是,则该区块为代码区块,其对应的地址为代码区块地址;否则,获取下一个区块的地址,并返回步骤S112。
17.根据权利要求14所述的基于Ukey的软件解密的终端,其特征在于,
还包括步骤:
S15、获取缓存区域中PE文件的地址,在所述缓存区域添加一个新的区块,并设置所述新的区块的属性,使其满足PE文件的格式;
S16、在所述新的区块中加入与获取解密程序相关的shell程序代码,并将所述缓存区域中PE文件的入口地址更新为所述新的区块的地址。
18.根据权利要求17所述的基于Ukey的软件解密的终端,其特征在于,还包括步骤:
S17、将所述缓存区域中PE文件的原始入口地址备份至所述自定义存储空间。
19.根据权利要求18所述的基于Ukey的软件解密的终端,其特征在于,
步骤S2具体包括步骤:
S21、shell程序获取PE文件信息,得到PE文件的原始入口地址;
S22、根据所述PE文件的原始入口地址,得到所述加密后的可执行二进制数据的区块地址;
S23、根据所述区块地址,获取所述加密后的可执行二进制数据;
S24、将所述加密后的可执行二进制数据发送至Ukey,使得所述Ukey通过所述解密程序解密所述加密后的可执行二进制数据,得到解密数据。
20.根据权利要求19所述的基于Ukey的软件解密的终端,其特征在于,
将所述加密后的可执行二进制数据分块发送至所述Ukey。
21.根据权利要求20所述的基于Ukey的软件解密的终端,其特征在于,
步骤S3具体包括接收Ukey发送的解密数据,并将所述解密数据写回相应的软件代码的进程虚拟内存中。
22.根据权利要求21所述的基于Ukey的软件解密的终端,其特征在于,
在写入前先设置所述软件代码的进程虚拟内存有缓存区域的读写权限。
CN201780001446.8A 2017-10-27 2017-10-27 一种基于Ukey的软件解密的方法及终端 Active CN108064382B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2017/108090 WO2019080112A1 (zh) 2017-10-27 2017-10-27 一种基于 Ukey 的软件解密的方法及终端

Publications (2)

Publication Number Publication Date
CN108064382A true CN108064382A (zh) 2018-05-22
CN108064382B CN108064382B (zh) 2021-11-09

Family

ID=62141991

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780001446.8A Active CN108064382B (zh) 2017-10-27 2017-10-27 一种基于Ukey的软件解密的方法及终端

Country Status (2)

Country Link
CN (1) CN108064382B (zh)
WO (1) WO2019080112A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109062582A (zh) * 2018-07-23 2018-12-21 北京云测信息技术有限公司 一种应用安装包的加密方法及装置
CN109672526A (zh) * 2018-12-17 2019-04-23 福建联迪商用设备有限公司 一种管控可执行程序的方法及系统
CN110187897A (zh) * 2019-05-28 2019-08-30 新华三技术有限公司 一种固件升级方法及装置
CN113656764A (zh) * 2021-08-18 2021-11-16 天津津航计算技术研究所 一种集成优化系统下的软件加密方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090013016A1 (en) * 2007-07-06 2009-01-08 Neoscale Systems, Inc. System and method for processing data for data security
CN102122336A (zh) * 2011-02-14 2011-07-13 中国联合网络通信集团有限公司 游戏保护加密和解密方法、设备和系统
CN103065069A (zh) * 2013-01-28 2013-04-24 电子科技大学 一种基于壳技术的软件保护方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101038568B (zh) * 2007-04-16 2010-05-19 丁万年 外置式计算机硬盘数据加密方法及其装置
US9819653B2 (en) * 2015-09-25 2017-11-14 International Business Machines Corporation Protecting access to resources through use of a secure processor
CN105760789A (zh) * 2016-02-19 2016-07-13 山东超越数控电子有限公司 一种加密移动固态硬盘加密密钥的保护方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090013016A1 (en) * 2007-07-06 2009-01-08 Neoscale Systems, Inc. System and method for processing data for data security
CN102122336A (zh) * 2011-02-14 2011-07-13 中国联合网络通信集团有限公司 游戏保护加密和解密方法、设备和系统
CN103065069A (zh) * 2013-01-28 2013-04-24 电子科技大学 一种基于壳技术的软件保护方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
何文才 等: "一种基于新型USB Key的加解密系统设计与实现", 《网络安全技术与应用》 *
王玮: "一种基于USB KEY加解密技术的软件保护方案研究", 《信息网络安全》 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109062582A (zh) * 2018-07-23 2018-12-21 北京云测信息技术有限公司 一种应用安装包的加密方法及装置
CN109672526A (zh) * 2018-12-17 2019-04-23 福建联迪商用设备有限公司 一种管控可执行程序的方法及系统
CN109672526B (zh) * 2018-12-17 2021-11-09 福建联迪商用设备有限公司 一种管控可执行程序的方法及系统
CN110187897A (zh) * 2019-05-28 2019-08-30 新华三技术有限公司 一种固件升级方法及装置
CN110187897B (zh) * 2019-05-28 2022-05-31 新华三技术有限公司 一种固件升级方法及装置
CN113656764A (zh) * 2021-08-18 2021-11-16 天津津航计算技术研究所 一种集成优化系统下的软件加密方法
CN113656764B (zh) * 2021-08-18 2024-05-14 天津津航计算技术研究所 一种集成优化系统下的软件加密方法

Also Published As

Publication number Publication date
CN108064382B (zh) 2021-11-09
WO2019080112A1 (zh) 2019-05-02

Similar Documents

Publication Publication Date Title
CN100464313C (zh) 一种移动存储装置及存取移动存储装置中加密数据的方法
CN108064382A (zh) 一种基于Ukey的软件解密的方法及终端
CN102918539B (zh) 用于保护重放内容的方法、装置和设备
US20090172393A1 (en) Method And System For Transferring Data And Instructions Through A Host File System
CN100437618C (zh) 一种便携式信息安全设备
CN107612683B (zh) 一种加解密方法、装置、系统、设备和存储介质
CN103294961A (zh) 一种文件加/解密方法以及文件加/解密装置
US7818567B2 (en) Method for protecting security accounts manager (SAM) files within windows operating systems
CN105683990A (zh) 用于保护动态库的方法和装置
CN101578608B (zh) 用于基于会话票证存取内容的方法及设备
KR20210008486A (ko) 안전한 데이터세트 관리
CN113987557A (zh) 一种文件加密处理方法、系统、电子设备和存储介质
CN104767761A (zh) 一种云存储平台访问控制方法及装置
CN111832053A (zh) 一种基于应用程序的透明加解密方法和系统
CN109325322B (zh) 用于嵌入式平台的软件知识产权保护系统和方法
de Assumpção et al. Forensic method for decrypting TPM-protected BitLocker volumes using Intel DCI
US20180314837A1 (en) Secure file wrapper for tiff images
CN112711764A (zh) 一种数据读写方法、装置及电子设备
KR101043255B1 (ko) Usb 허브 보안 장치 및 이를 이용한 데이터 보안 방법
CN111143879A (zh) 一种Android平台SD卡文件保护方法、终端设备及存储介质
CN104272317A (zh) 在更安全的执行环境中标识并执行多个指令的子集
CN107861892B (zh) 一种实现数据处理的方法及终端
CN113158203B (zh) 一种soc芯片、电路和soc芯片的外部数据读写方法
CN114116710A (zh) 基于区块链的数据处理方法、装置、设备及存储介质
CN115033870A (zh) 一种基于大数据云部署的反恶意篡改代码方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant