共享软件加解密与注册方法研究.doc
《共享软件加解密与注册方法研究.doc》由会员分享,可在线阅读,更多相关《共享软件加解密与注册方法研究.doc(7页珍藏版)》请在三一文库上搜索。
1、精品论文共享软件加解密与注册方法研究夏治国 1,2,陈林 21 重庆大学软件学院,重庆 (400044)2 中国人民解放军 78155 部队,四川成都 (610036)E-mail:, 摘要:共享软件的限制和注册既是作者保护版权的方式,也是软件实现价值的途径。本文 就 Visual C+环境下共享软件开发中的限制用户使用、软件加解密、注册方法等关键问题进 行了讨论研究。关键词:磁盘序列号;加密;解密;注册表控制 中图分类号:TP3091引言共享软件并不是一种软件的类型,而是一种传播方式,它是指个人或非公司团队开发的 向用户直接收取注册费或相关服务费的“先试后买”的中、小规模的软件。这种软件通过
2、网络 等各种传播方式,十分方便用户,有利于软件的普及和推广;再加上注册费低,性价比高, 因而深受广大用户欢迎1,2。共享软件在未注册之前通常会有一定的功能限制,如使用的时间限制、次数限制、功能 限制等。用户在向软件作者支付一定的注册费用,成为正式版用户后,可以享受到相应的待 遇,包括:版本升级、技术服务、疑问解答等3。2软件注册模块的整体设计共享软件的注册功能主要包括两个方面的内容:一是软件注册,即利用获取的磁盘序列 号加密生成注册申请号,再用算号器计算注册号,注册成功后生成注册信息,供程序启动时查询;二是软件试用,需要检查注册信息,判断软件是否超过试用限制。实现流程如下图:- 7 -程序启动
3、是否注册Y启 动提示注册NN Y是否限制生成注册信息生成注册文件计算注册号用户注册3软件注册模块的实现3.1 磁盘序列号加密的实现图 1 软件共享实现流程图在 Windows 中,硬盘的磁盘序列号是在硬盘分区后系统产生的 8 字节随机数字,理论上有重复的可能,但实际上找到两个相同的分区序列号很难,因此,在实际应用中可以把硬 盘序列号作为唯一识别码用于我们的加密系统。程序中获取 C 盘序列号的库函数是 GetVolumeInformation ()4,其实现代码如下:BOOL CDRegedit:OnInitDialog() CDialog:OnInitDialog();/取得机器码(C 盘序列
4、号)LPCTSTR lpRootPathName=C:;LPTSTR lpVolumeNameBuffer=new char12; DWORD nVolumnNameSize=12;DWORD MaximumComponentLength; DWORD FileSystemFlags;LPTSTR lpFileSystemNameBuffer=new char10; DWORD FileSystemNameLength=12; GetVolumeInformation(lpRootPathName,lpVolumeNameBuffer,nVolumnNameSize,&m_VolumnSeri
5、alNumber,&MaximumComponentLength,&FileSystemFlags,lpFileSystemNameBuffer,FileSystemNameLength); delete(lpVolumeNameBuffer); delete(lpFileSystemNameBuffer);return TRUE;/ return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSE生成注册文件时,用户首先填入用户名,然后点击“生成注册文件”按
6、钮,调用函数CDRegedit: OnButhere( ),为了避免别人轻易看出是磁盘序列号,我们将其与 2402029307412(可以任意指定数)进行异或运算,得到用户机的机器码,其实这就是一个加密的过程;再 把机器码和用户名一起写入注册文件。其代码如下:void CDRegedit:OnButhere()CString sUserName; m_EdtUserName.GetWindowText(sUserName); if(sUserName.IsEmpty()MessageBox(请输入用户名!,系统提示,MB_OK|MB_ICONSTOP);this-m_EdtUserName.S
7、etFocus();CString sSerialNumber;sSerialNumber.Format(%d,m_VolumnSerialNumber2402029307412);CFileDialogdlg(false, 注 册 .RXI, 注 册 .RXI,OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT,注册文件|*.RXI|);dlg.DoModal();CString sFile=dlg.GetPathName();if(sFile.IsEmpty()return;/写入文件CFile file(sFile, CFile:modeCreate | CFil
8、e:modeWrite ); file.WriteHuge(sUserName.GetBuffer(sUserName.GetLength(),sUserName.GetLength(); file.WriteHuge(,1); file.WriteHuge(sSerialNumber.GetBuffer(sSerialNumber.GetLength(),sSerialNumber.GetLength();file.Close();MessageBox( 注册文 件生成完 毕,其路 径为 :+sFile, 系 统提示 ,MB_OK|MB_ICONEXCLAMATION);当然,也可以在注册程
9、序中直接将注册申请号显示给用户,但是考虑到这样一方面需要用户记录,容易出错,另一方面也是为了注册申请号的安全,所以我们采用生成一个包含机 器码和用户名的注册文件,以电子邮件方式发送给作者。注册程序运行界面如下图:图 2 系统注册的界面3.2 打开电子邮件程序发送注册文件为方便用户注册,在注册界面设计了作者电子邮箱的连接,点击 “Email” 按钮就可以 打开电子邮件程序,发送注册申请文件。这个功能 的实现用 到了函 数 ShellExecute( ) ,它解析系 统注册表 HKEY_CLASSES_ROOT 中所有的内容,判断启动那一个执行程序,并且启动一个新的实例 或使用 DDE 将文件名连
10、到一打开的实例。其函数原型5:HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd );参数说明:hwnd 窗口的句柄lpOperation 进行的操作,如open、print、explore,或为空(),进行默认操作。lpFile 要操作的文件。lpParameters 如果 lpFile 指定的是一个可执行文件则表示参数。通过调用函数 ShellExecute(NULL, open, mai
11、lto: , NULL, NULL, SW_SHOWNORMAL)来打开电子邮件程序,同时打开一个地址为 的待 编辑新邮件,方便用户发送注册信息。3.3 利用注册文件解密生成注册号注册号是软件作者在确认收到注册费用和注册文件后,通过算号器生成的。计算注册号 的过程其实就是一个解密的过程,其程序界面如下图:图 3 算号器的界面计算注册号时,先输入注册申请文件的路径,再点击“获取”按钮响应 OnButget()函数: 打开用户的注册申请文件,获取机器码和用户名信息,并自动输入到相应的文本框中,如果 路径为空,则默认读取机器码框和用户名框中的内容;将机器码与指定数 2402029307412 进行
12、异或运算,再与用户名编码进行异或运算,最终生成注册序列号,并自动输入序列号框 中。程序流程如下图:获取机器码与指定数进行异或运算注册序列号获取用户名进行异或运算每隔三位增加一个“-”符号图 4 注册号获取流程图3.4 程序注册并生成注册信息程序的 注 册过程 其 实也是 一 个解密 的 过程。 首 先同样 需 要 调 用函数 GetVolumeInformation()获取磁盘序列号与指定数 2402029307412 进行异或运算,然后再与从 文本框中获取的用户名编码进行异或运算,每隔三位增加一个“-”符号,得到正确的注册码, 将其与用户输入的注册码进行比较,如果相同则注册成功,并向文件中写
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 共享软件 解密 注册 方法 研究
链接地址:https://www.31doc.com/p-3622657.html