软件加密技术及实现 雷 鹏 ( 桂林电子工业学院 计算机系 ) 摘 要 当今盗版软件的泛滥成灾几乎已经成为了我们中国民族软件的灾难,为了防止软件的非法复制、盗版,保护软件开发商的利益,就必须对软件进行加密保护。现在市面上有许多反盗版软件,但这类软件多是单机处理,并且只使用简单的加密手段,很容易被解密者破解。 本文描述了一个通过Internet,集加密和电子注册于一身的完善的软件保护方案。该方案基于多种密码学意义上可靠的算法,如对称加密算法,散列算法,数字签名,密钥交换等等。通过对Windows下PE可执行文件的结构及载入机制进行深刻的剖析, 巧妙的使用这些密码学算法及多种反破解方案对PE文件进行加密保护。 在该方案的实现中,使用CryptoAPI中的数字签名算法RSA,加密算法RC2和RC4,散列算法SHA,同时自己编写了使用了MD5算法用于快速计算大量数据的摘要;网络接口使用WinSocket;编程语言选用汇编语言和C++混合编程方式;反破解方案有检测文件完整性、检测代码完整性、反跟踪、反-反汇编、反Dump、代码变形等等。 由于使用了可靠的密码学算法,使软件加密的强度大大提高;由于使用了Internet在线注册方式,用户使用也非常方便。 关键词 加密 ;数字签名 ;散列;反跟踪 ;电子注册 Software Protection technique and its realization LEI Peng ( GuiLin Institute of Electronic Technology . The Department of Computing ) Abstract The flooding of pirate software has been a calamity of our national software industry . In order to prevent software from pirate , and protect the profit of the software developer , they must encrypt their software to get a protection . There are several software protection tools in the market currently , but these tools were standalone nine tenths , and they only used simple encryption algorithms , so they could be cracked easily by the crackers . This thesis describes a perfect software encryption and protection scheme which integrate the encryption and electronic register . This scheme is based on multiple reliable cryptographic algorithms such as symmetric encryption algorithm , digital signature , hashing and key exchange . The PE file format (Portable Executable File Format) and its loading mechanism under Windows are dissected thoroughly in this thesis . Then these cryptographic algorithms and several anti-crack method are used gracefully to encrypt and protect the PE file . Within the realization of this scheme , the RSA digital signature algorithm , RC2 and RC4 encryption algorithm , SHA hasing algorithm etc in MicroSoft CryptoAPI are used . In order to increase the performace of caculate the digest of large number of data, MD5 hashing algorithm was rewritten . WinSocket API is used as the network interface . The blend of C++ and assembly are used for easily contoling the bottom layer of the system and simplify the programming . The anti-crack method consits the integralization of the file checking , the integralization of the code checking , and anti-debug , anti-disassembly , anti-dump and code metamorphose etc . The reliable cyrpto algorithms guarantee the crypto strength . As a result of online register , the retail users and the software developers get convenience . Key words Encrypt ; Digital Signature ; Hashing ; Anti-Debug ; Electronic Register
3 Windows 环境下 PE 文件简介 对Win32来讲,模块所使用的所有代码,数据,资源,导入表,和其它需要的模块数据结构都在一个连续的内存块中。在这种形势下,你只需要知道载入器把可执行文件映射到了什么地方就可以了。通过作为映像的一部分的指针,你可以很容易的找到这个模块所有不同的块。 3.3 PE文件的导入表 DWORD TimeDateStamp DWORD ForwarderChain DWORD Name
PIMAGE_THUNK_DATA FirstThunk PE文件导入表中的每一个函数有一个 IMAGE_IMPORT_BY_NAME 结构。IMAGE_IMPORT_BY_NAME结构非常简单,看上去是这样: 4 当前流行的一些软件保护技术
因为虚函数机制被 C++ 语言封装起来了,进行地址转化不大可能,所以,在 Shield 程序中"决不能使用虚函数"! (2) 网络接口的选用:
#ifdef SHIELD_PROGRAM 可以看到,在非Shield模块中,vA2IRA什么也不干,而在Shield模块中,它调用A2IRA进行地址转换。 (6) xxGetFACOffset: 其中,var 和LL的差是确定的,即汇编时和运行时,这两个符号地址的差是相同的,这个差可以在汇编时计算出来(var - LL)。运行时,call 指令的实际作用是把LL的运行时地址压入堆栈,然后再把这个地址弹出给dst,一般是一个寄存器。因为它们的差确定,只要把这个差加给dst,就得到了var的运行时地址。可以图示如下: 和 ;; 这个宏调用 api_call 产生一个跳转到 API 入口的代码
(e) UpdateOutFile: ValueType的定义为: CompareFunction的定义为:
8 使用说明及演示
10 结束语
作者Blog:
http://blog.csdn.net/whinah/
|