共享软件加解密与注册方法_IT/计算机_专业资料
第 22 卷 12 期 第 Vol 。 22 12 No。重 庆 工 学 院 学 报 ( 自然科学) Journal of Chongqing Institute of Technology (Natural Science)2008 年 12 月 Dec。 2008共享软件加解密与注册方法夏治国1共享软件注册,2 ,陈 1 林(1。 重庆大学 软件学院 ,重庆 400044 ; 2。 中国人民解放军 78155 部队 ,成都 610036)摘要 : 介绍了软件注册模块的整体设计方案 , 并从磁盘序列号加密的实现 、 打开电子邮件程序发 送注册文件 、 利用注册文件和用户名解密生成注册号 、 程序注册并生成注册信息等几个方面具体 分析了软件注册模块的设计 ,还探讨了程序启动检查模块的设计方法 , 并给出了部分相关代码 。 最后提出了加密方式和使用限制中存在的问题 。 关 :磁盘序列号 ; 加密 ; 解密 ; 注册表控制 键 词 中图分类号 :TP309 文献标识码 :A文章编号 :1671 - 0924 (2008) 12 - 0144 - 04Research on Encryption , Decryption and Registration Method of Share wareXIA Zhi - guo1 ,2 ,CHEN Lin12。
Unit 78155 of PLA , Chengdu 610036 , China)(1。 College of Software Engineering , Chongqing University , Chongqing 400044 , China ;ware registration module design from the aspects of realizing the encryption of disk serial number , opening email program to sent registration documents , using registration documents and users’names to generate registration number , registering program and generating registration information , etc。 Besides , this paper paper puts forward encryption method and the problems in using restrictions。
Key words : disk serial number ; encryption ; decryption ; control registrydiscusses the design method of program starting module and presents part of the related codes。 Finally , this 共享软件并不是一种软件的类型 ,而是一种传 播方式 ,它是指个人或非公司团队开发的向用户直 接收取注册费或相关服务费的 “先试后买” 的中、 小[1 ]规模的软件 。 这种软件通过网络等各种传播方式 ,十分方便用户使用 ,有利于软件的普及和推广 ; 再Ξ 收稿日期 :2008 - 10 - 11Abstract : This paper introduces the overall design plan for software registration module , analyzes the soft2Ξ加上注册费低 ,性价比高 ,因而很受用户欢迎 。共享软件在未注册之前通常会有一定的功能限制 ,如使用的时间限制 、 次数限制 、 功能限制等 。
用户在向软件作者支付一定的注册费用 , 成为正 式版用户后 ,可以享受到相应的待遇 , 包括版本升) 作者简介 : 夏治国 (1977 — ,男 ,四川崇州人 ,硕士研究生 ,工程师 ,主要从事应用软件系统研究 。? 1994-2009 China Academic Journal Electronic Publishing House。 All rights reserved。夏治国 ,等 : 共享软件加解密与注册方法 级、 技术服务 、 疑问解答等 [2 ] 。NameBuffer ,FileSystemNameLength) ,1451 软件注册模块的整体设计 共享软件的注册功能主要包括 2 个方面的内 容 : 一是软件注册 ,即利用获取的磁盘序列号加密 生成注册申请号 ,再用算号器计算注册号 , 注册成 功后生成注册信息 ,供程序启动时查询 ; 二是软件 试用 ,需要检查注册信息 , 判断软件是否超过试用 限制 。 实现流程如图 1。rialNumber 中 。 最 后 一 定 要 记 得 释 放 内 存 资 源 : NameBuffer) ;生成注册文件时 , 为了避免别人轻易看出是 磁盘序列号 ,将其与 2418859167332 ( 可以任意指定 数) 进行异或运算 , 得到用户机的机器码 , 然后和 用户名一起写入注册文件 。
号显示给用户 , 但是考虑到这样一方面需要用户 记录 ,容易出错 ,另一方面也是为了注册申请号的 名的注册文件 ,以电子邮件方式传给作者 , 来获取 注册号 。 注册程序运行界面如图 2。 安全 ,所以我们采用生成一个包含机器码和用户图1 软件共享实现流程2 软件注册模块设计2。 1 磁盘序列号加密2。 2 打开电子邮件程序发送注册文件子邮箱的连接 ,点击“Email ” 按钮就可以打开电子 邮件程序 ,发送注册申请文件 。在 Windows 中 ,硬盘的磁盘序列号是在硬盘分 区后系统产生的 8 字节随机数字 , 理论上有重复 的可能 ,但实际上找到两个相同的分区序列号很 难 ,因此 ,在实际应用中可以把硬盘序列号作为唯 一识别码用于加密系统 。 程序注册时 ,用户首先填入用户名 , 然后点击 “生成注册文件” 按钮 , 调用函数 CDRegedit : : On2 Buthere ( ) ,即可生成注册申请文件 。NameSize , & - VolumnSerialNumber , & m MaximumCom2 ponentLength , &FileSystemFlags ,解析系统注册表 HKEY- CLASSES - ROOT 中所有的 的实例或使用 DDE 将文件名连到一打开的实例 。
其函数原型 :内容 ,判断启动哪一个执行程序 ,并且启动一个新程序中获取 C 盘序列号的函数是 GetVolume2 Information ( ) ,其函数调用为 : GetVolumeInformation( lpRootPathName , lpVolumeNameBuffer , nVolumn2eters , LPCTSTR lpDirectory , INT nShowCmd ) ;? 1994-2009 China Academic Journal Electronic Publishing House。 All rights reserved。lpFileSystem2STR lpOperation , LPCTSTR lpFile , LPCTSTR lpParam2) explore″也可以为空 (″ ,进行默认操作 ; , ″delete ( lpVolumeNameBuffer ) ; delete ( lpFileSystem2当然 ,也可以在注册程序中直接将注册申请 这个功能的实现用到了函数 ShellExecute ( ) ,它lpOperation 为进行的操作 , 如″ ″″ ″″ open 、 print 、获得 C 盘序列号后将其存入变量 CString sSe2图2 系统注册的界面为方便用户注册 , 在注册界面设计了作者电参数说明 :hwnd 为窗口的句柄 ;HINSTANCE ShellExecute ( HWND hwnd , LPCT2146 lpFile 为要操作的文件 。
eters 表示参数 。重庆工学院学报 首先同样需要调用函数 GetVolumeInformation ( ) 获 取磁盘序列号与指定数 2418859167332 进行异或 运算 ,然后再与从文本框中获取的用户名编码进 行异或运算 ,每隔 3 位增加 1 个 - ” “ 符号 ,得到正 确的注册码 ,将其与用户输入的注册码进行比较 , 如果相同则注册成功 , 并向文件中写入注册信息 以供程序启动时检查 。 注册信息包括用户名和注 册码 ,以文件 SYSRX。 ini 的形式保存在程序目录 下 。 功能实现函数为 :OnButreg () 。mailto : abcd1234 @163。 com″ NULL , NULL , SW ,SHOWNORMAL ) 来打开电子邮件程序 ,同时打开一个地址为 abcd1234 @163。 com 的待编辑新邮件 , 方 便用户发送注册信息 。2。 3 利用注册文件和用户名解密生成注册号册文件后 ,通过算号器生成的 。 计算注册号的过程 其实就是一个解密的过程 ,其程序界面如图 3。 计算注册号时 ,先输入注册申请文件的路径 , 再点击 “获取” 按钮响应 OnButget () 函数 : 打开用户 的注册申请文件 ,获取机器码和用户名信息 , 并自 动输入到相应的文本框中 , 如果路径为空 , 则默认读取机器码框和用户名框中的内容 ; 将机器码与 编码进行异或运算 ,最终生成注册序列号 ,并自动 输入序列号框中 。
程序流程如图 4。指定数 2418859167332 进行异或运算共享软件注册,再与用户名2。 4 程序注册并生成注册信息当 lpFile 指定的是一个可执行文件时 lpParam2 注册号是软件作者在确认收到注册费用和注图3 算号器的界面 图4 注册号获取流程通过调用函数 ShellExecute ( NULL , ″ ″ ″ open ,3 程序启动检查模块设计3。 1 检查注册信息 ,判断是否注册程序在注册完成后 , 已经将用户名和注册号 生成注册信息写入程序安装目录中的 SYSRX。 ini 文件 ,在程序每次启动的时候首先检查 SYSRX。ini : 实现代码如下 : char cPath[ - MAX - DIR ] ; CString sName ,sCode ,sPath ; : : GetSystemDirectory ( cPath ,sizeof ( cPath) ) ; sPath。 Format (″ \ \ SYSRX。 ini″ %s ,cPath) ; : : GetPrivateProfileString (″ENROL″″ , NAME″ , NULL ,sName。
GetBuffer ( 128) ,128 ,sPath) ; : : GetPrivateProfileString (″ENROL″″CODE″ , , NULL ,sCode。 GetBuffer ( 128) ,128 ,sPath) ; CString cStrCode ,cStrName ; cStrCode。 Format (″ ″ %s ,sCode) ; cStrName。 Format (″ ″ %s ,sName) ;如果 cStrCode。 IsEmpty () = = true | | cStrName。 IsEmpty () = = true 成立 , 即注册信息存在 , 则继续 验证其合法性 ,其过程和注册过程一样 , 通过磁盘 序列号和用户名进行解密运算 , 将结果与注册信 息中的注册号比较 ,验证其合法性 , 如果合法则运 行程序 。 如果不存在注册信息或者注册信息不合法 , 弹出注册对话框要求注册 。 如果用户选择试用 , 则 通过查询注册表判断是否限制使用 , 功能实现函 数为 : OnTimer (UINT nIDEvent ) 。3。 2 使用限制的注册表控制共享软件的使用限制信息有两种保存方式 : 一是文件保存 ,二是注册表保存 。
虽然用文件保存 比较简单易于实现 ,但安全性不如注册表保存 。 下程序的注册过程其实也是一个解密的过程 。? 1994-2009 China Academic Journal Electronic Publishing House。 All rights reserved。夏治国 ,等 : 共享软件加解密与注册方法 面研究如何通过注册表控制实现共享限制功能 。Win32 API 提供了大约 25 个有关注册表的函147rityAttributes 为一个指向 SECURITY - ATTRIBUTES结构的指针 ;phkResult 为一个指向新创建或打开 的键的句柄的指针 ;lpdwDispition 指明键是被创建 还是被打开的 ;lpData 为一个指向包含数据的缓冲 区的指针 ;cbData 以字节为单位 ,指定数据的长度 。 在程序中 ,首先查询 HKEY- CURRENT - USER “\ Software \ \ 软件名” 下是否存在注册表信息 。 如数 ,可以对注册表进行打开 、 读取 、 写入和删除等 操作 ,还可以实现对注册表备份 , 连接和对远端注 册表进行查看等功能 。
本研究实例程序需要用到 指定键打开 、 写入 、 查询和修改等功能 , 其 API 函 数原型及说明如下 : 1) RegCreateKeyEx () 原 型 : LONG RegCreateKeyEx ( HKEY hKey ,LPCTSTR lpSubKey , DWORD Reserved , LPTSTR lp2 Class , DWORD dwOptions , REGSAM samDesired , KEY phkResult , LPDWORD lpdwDisposition ) ;果不存在 ,则写入新信息 , 并将能使用的次数设置 为 99 存入健 TryTime 中 ; 如果存在 ,则读取剩下使 用次数并提示给用户 , 同时修改注册表键值 , 将剩 下次数即 TryTime 值减 1 ; 如果剩下次数小于 1 , 则 提示用户共享此次数已到 , 同时弹出注册对话框 要求注册软件 。 需要注意的是 , 注册表中键值为CString 型 ,在读写的时候需要进行格式转换 。 功能LPSECURITY - ATTRIBUTES lpSecurityAttributes , PH2说明 : 打开指定的键或子键返回其句柄 。
如果指定的键不存在则建立 。 2) RegQueryValueEx ()lpValueName ,实现函数为 OnButtry ( ) 。原 型 : LONG RegQueryValueEx ( HKEY hKey ,LPDWORD4 结束语 共享软件的限制和注册功能实现之后 , 作者 通过网络等方式来发布自己的产品 , 就不怕别人 侵害到软件的版权问题 。 只要软件功能实用强大 , 界面美观 、 交互方便 , 就可能得到源源不断的回 报 。 然而 , 对普通用户来说虽然实现了共享的功 能 ,但是仍然存在一些问题需要改进 : 1) 加密方式中存在的问题 。 采用了磁盘序列 号和用户名的加密方式 , 虽然安全性较高 , 但由于 磁盘序列号是在硬盘分区时系统产生的 8 字节随 机数字 ,如果硬盘重新进行了分区 , 序列号会发生 改变 ,系统就会要求重新注册 。 解决方法 : 用户提 供旧的注册文件和注册信息 , 利用算号器验证 , 如 果符合则根据新的注册文件免费提供新的注册号 码。2) 使用限制中存在的问题 。 为了便于理解 ,本LPCTSTR Data ) ;pReserved ,LPDWORD lpType , LPBYTE lpData , LPDWORD lpcb2说明 : 查询某一个键值 , 根据要查询的键的句柄 ,返回查询数据 。
3) RegSetValueEx ()STR lpValueName , LPDWORD lpReserved , DWORD dwType , const BYTE 3 lpData , DWORD cbData) ;说明 : 设置注册表中的一个键值 。 4) RegCloseKey () 原型 :RegCloseKey ( HKEY hKey)一个或多个键或值操作完成以后 , 需要关闭其键 来进行保存操作结果 , 关闭一个键后 , 句柄变为非 法 ,此时应释放句柄 。SubKey 指向以零结尾的字符串的指针 , 其中包含将要创建或打开的子键的名称 ; lpClass 为一个指 向包含键类型的字符串 , 如果该键已经存在 , 则忽 略该参数 ; dwOptions 为新创建的键设置一定的属性 ;samDesired 用来设置对键访问的权限 ; pSecu2原型 :LONG RegSetValueEx ( HKEY hKey , LPCT2 说明 : 关闭指定的主册表键 , 释放句柄 。 当对函数中关键参数说明如下 :hKey 为主键值 ;lp2文将使用限制次数直接存储于注册表中 , 对一般 用户来说难于破解 , 但计算机水平较高的用户可 以通过修改键值来破解限制 。
解决方法 : 将使用限 制次数按一定规则进行加密后保存 , 在程序中在 进行解密查询 ,同时进行规则验证 , 判断注册表是 否被修改以及是否使用受限 。( 下转第 159 页)? 1994-2009 China Academic Journal Electronic Publishing House。 All rights reserved。翁民玲 : 组态技术在电缆气压监控系统中的应用1598 结束语 本研究从实际应用角度出发 , 阐述了电缆气压 监控系统在我国电信行业中的应用现状及系统存 在的问题和不足 。 针对该系统存在的维护效率低 、 自动化程度低 、 缺乏科学管理与监督等问题 , 在保 证充分利用企业现有资源的基础上 , 应用现今工业 控制领域较为成熟的组态软件技术 , 开发了电缆气 压监控系统 。 通过监控系统对一些重要的运行参数 进行在线预测 。 当预测值异常时 , 可调用专家系统 进行故障诊断 。 利用诊断的结果 , 及时给运行人员 一些必要的提示和操作指导 , 这对于防止设备在运 行过程中由参数异常变为事故 , 或者避免事故进一 步扩大是很有必要的 。参考文献 :[1 ] Peyraque L , Boisdon C , Beroual A ,et al。
Static Electrifica2 tion and Partial Discharges Induced by Oil Flow in Power Transformers [ J ] 。 IEEE Transacations on Power System , 1995 ,2 (1) :40 - 45。 [2] Stalling W。 Data and Computer Communications[M] 。 6 版 。王海 ,译 。 北京 : 电子工业出版社 ,2001。 [3 ] 田学锋 , 周予滨 。 计算机通信 RS - 232 接口实用技术 [M] 。 北京 : 电子工业出版社 ,2001。 [4 ] 马国华 。 监控组态软件及其应用 [ M] 。 北京 : 清华大学 出版社 , 2005。 [5 ] 谭王丽 。 海洋平台安全自动化组态软件的设计与实现 [D ] 。 大连 : 大连理工大学 ,2004。 [6 ] 冯雪飞 。 基于企业网的高炉电除尘计算机监控系统研 究与开发 [D ] 。 武汉 : 武汉理工大学 ,2002。( 责任编辑 ) 刘 舸( 上接第 147 页)[4 ] 李言 , 李伟明 , 李贺 。
Visual C ++ 项目开发全程实录 [M] 。 北京 : 清华大学出版社 ,2008。 [5 ] 魏亮 ,李春葆 。 Visual C ++ 程序设计例学与实践 [M] 。参考文献 :[1 ] 百 度 百 科 。 共 享 软 件 [ EB/ OL ] 。 [ 2008 - 05 - 20 ] 。 http :/ / bk。 baidu。 com/ view/ 36775。 htm。 [2 ] 朱泉峰 。 共享软件四大脸谱 [N/ OL ] 。 [2006 - 10 - 09 ] 。 http :/ / www2。 ccw。 com。 cn。 [3 ] 邹筝 ,康晓林 ,袁建洲 , 等 。 Visual C ++ 6。 0 实用教程 [M] 。 北京 : 电子工业出版社 ,2008。北京 : 清华大学出版社 ,2007。 出版社 ,2006。[6 ] 王岩 。 注册表终极解析 2100 例 [M] 。 北京 : 中国林业 [7 ] 林晨 。 谈谈共享软件 [N/ OL ] 。 [2008 - 06 - 28 ] 。 http :/ / www2。 ccw。 com。 cn/ 1995/ 2/ 132646。 shtml。( 责任编辑 ) 刘 舸? 1994-2009 China Academic Journal Electronic Publishing House。 All rights reserved。
手机浏览,点击图片保存二维码到相册,然后打开微信扫一扫选择本二维码图片就可以进入,电脑端微信“扫一扫”二维码,进入找聊天搭子平台,里面有找饭搭子、找对象、找陪伴服务等等