基于SSL的软件序列号网上验证分析与实现
第27卷第1期 2010年1月 计算机应用与软件Computer App licati ons and Soft w are Vol 127No . 1Jan . 2010基于SS L 的软件序

第27卷第1期 2010年1月 计算机应用与软件
Computer App licati ons and Soft w are Vol 127No . 1
Jan . 2010
基于SS L 的软件序列号网上验证分析与实现
刘国良 张智斌 徐迪新 孔 娟
(昆明理工大学信息工程与自动化学院 云南昆明650051)
摘 要 在软件序列号网上验证过程中, 若数据为明文传输的话, 则容易被捕获及分析, 从而令验证失效。为降低软件盗版比例,
介绍序列号验证技术的基本原理, 通过实例详细说明利用SS L 加密验证过程的必要性, 给出获取SS , 利用W indows HTTP 服务(W inHTTP ) 为软件开发人员提供解决方案。、关键词 软件保护 序列号 安全套接字层(SS L ) 数字证书 W ANALY S N F SO FT W ARE SER I AL NU M BER
I VAL I DAT IO N BASED O N SSL
L iu Guoliang Zhang Zhibin Xu D ixin Kong Juan
(Faculty of Infor m ation Engineering and Auto m ation, Kunm ing U niversity of Science and Technology, Kunm ing 650051, Yunnan, China )
Abstract During the s oft w are serial nu mber online validati on p r ocess, data can be cap tured and analysed when they are trans m itted in p lain text, thereby leading t o validati on failure . I n order t o reduce s oft w are p iracy rati o, this article intr oduces the basic p rinci p le of serial nu m 2ber validati on techniques, illustrates the necessity of using SS L encryp ti on validati on p r ocess with a p ractical exa mp le in detail, p r ovides differ 2
ent ways of obtaining SS L server certificates, and offers a s oluti on for s oft w are devel opers by usingW indows HTTP Services (W inHTTP ) . The method p r oposed is effective, p ractical and easy t o be i m p lemented .
Keywords Soft w are p r otecti on Serial nu mber Secure s ockets layer (SS L ) D igital certificate W inHTTP
0 引 言
软件保护是维护软件开发人员利益的主要手段, 是软件开发过程中的重要环节, 以往大多数软件采用序列号(又称注册码) 的验证方式且验证过程在本地进行[1]。随着互联网的应用日渐普及, 已具备联网注册认证的可操作性。目前国内有很多销量大的软件采用了联网注册正版认证的方法以减少盗版。不过, 在联网注册认证过程中, 若信息是明文传输的话, 则容易被软件破解者捕获本地与远程服务器之间通信的内容, 从而分析其认证过程, 找出破解办法, 令联网注册无效。所以, 需要采用有效的办法令破解难度大幅增加, 以达到降低软件盗版的比例的目的。
责验证序列号合法性的代码是在用户机器上运行的, 因此只要有人把用户名和序列号在网上公布, 不管在哪台电脑上, 都可用同一用户名和序列号进行注册。
1. 2 基于硬盘序列号的验证
为了保证每台电脑上的序列号唯一, 软件开发人员后来利用了硬盘序列号。犹如每张网卡MAC 地址各不相同一样, 每个硬盘序列号亦具有唯一性。网卡地址可以很容易地通过操作系统进行逻辑上的修改, 但硬盘序列号却无法修改, 于是软件开发人员把软件序列号计算公式变为:
序列号=F (硬盘序列号) 这样一来, 软件保护的效果就大大提高了。不过, 此种保护方式亦有其不利之处, 就是如果用户更换硬盘的话, 原有的序列号就无法再用, 必须重新向软件作者索取序列号。
1 序列号验证的基本原理
1. 1 基于用户名的验证
基于序列号保护方式的软件随着破解技术的不断提高, 采用的保护措施亦越来越强大。
最初, 此类软件一般以用户名等信息作为自变量, 通过函数F 变换之后得到序列号, 然后将此序列号与用户输入的序列号进行字符串比较或数值比较, 以确定用户是否为合法用户[1]。其公式可简单表示如下:
序列号=F (用户名)
此种保护方式最大的问题是不能防止序列号扩散。由于负
1. 3 本地验证方式的不足
对采用本地验证方式的软件, 用户需用电子邮件等方式向软件作者联系以获取序列号, 故只适用于用户数目较少的场合; 而对于用户数目庞大的软件, 往往是直接把序列号贴在软件包装盒内且序列号不重复。
1. 4 基于互联网的联网验证
随着互联网应用逐步成熟, 不少软件开始把本地验证和网上验证结合起来———即通过本地验证后, 再把序列号发到软件指定的网站的服务器进行分析。如果该序列号已被广泛使用,
收稿日期:2008-07-18。刘国良, 硕士生, 主研领域:网络管理。
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
,
第1期
刘国良等:基于SS L 的软件序列号网上验证分析与实现 281
则可断定用户使用网上得来的序列号进行注册, 从而服务器可
返回验证失败的信息。不过, 现在很多利用网上注册的软件的验证过程都是以明文的形式传送数据, 从而大大降低了软件保护的效果。
们可以考虑较便宜的解决方案, 如WoSign (www . wosign . com ) , 其SS L 服务器证书价格不足千元。颁发WoSign 代码签名证书的根证书已经预置在所有浏览器的受信任根证书中, 支持所有浏览器和服务器, 用户无需安装任何根证书或升级根证书。
WoSign 目前亦提供一个月免费SS L 服务器证书。作为加密网
2 简单网上验证的漏洞分析及对策
2. 1 实例分析
本文以一个背英语单词的软件为例(为尊重版权, 软件名称不标出) , 解析一下序列号以明文形式向服务器发送的安全漏洞。该软件是一个成熟的产品, 经过10年八个版本的发展, 已拥有用户500多万。软件有多个地方都要验证序列号, 并且在启动时对软件里面的一些重要文件进行校验, 改。可以说作者为了防止软件被破解, , 软有加密, , 如W indows 内置的网络监视器, 可以得知该软件是直接把序列号以明文方式通过类似以下的URL 格式发送出去:htt p://www. exa mp le . com /cgi2bin /check. p l? 1234567890, 其中www . examp le . com 是软件的官方网站(真实网址不标出, 以www . exa mp le . com 代替) , “1234567890”是用户输入的序列号。网站服务器返回的信息有“NoPr oble m ”, “Hei3”和“Hei4”。经分析, “NoPr oble m ”说明序列号没问题; “Hei3”是指序列号正确, 但已在网上公开, 多人使用后进入了黑名单; 而“Hei4”说明输入的序列号不正确。软件里面的验证程序根据网站返回的信息决定是否注册成功。这种简单的网上验证很不安全, 破解者只要分析验证过程, 然后在本机安装一个W eb 服务器, 并把域名设置为www . exa mp le . com, 不管软件认证程序发送过来的内容是什么, 服务器都返回“No 2Pr oble m ”, 这样就通过了验证, 达到了破解的目的。
上验证过程的目的, 免费SS L 服务器证书已足够, 因为即使证书过期, 亦不影响验证过程的有效性。
(2) 软件需要增加或修改网上验证模块以支持SS L 连接。最简单、有效的办法是利用M icr os oft 的平台S DK (Platf or m Soft 2
ware Devel opment Kit ) AP I (App licati on Pr o 2gra mm ing ) [3]
(DLL ) 文件供
, C#、Del phi 、V isual Basic , 降低编程难度。
3 网上验证模块的程序实现
3. 1 程序流程
在本地程序发送序列号去服务器前, 先利用W inHTTP 建立起SS L 连接, 考虑到整个验证过程是在后台进行, 且对本文讨论的实现方法而言, 安全证书的关键内容是“使用者(Subject ) ”字段里面的“公用名称CN (Common Na me ) ”, 即网站的名称(如www . google . com ) 。网站的名称必须与安全证书上的站点名称匹配, 而证书的日期是否有效并不影响验证过程的准确性, 所以我们可以在连接时加入忽略证书的有效时间的选项。
要利用W indows HTTP 服务, 除了安装V isual C 6. 0或以上版本外, 还要到M icr os oft 的官方网站下载M icr os oft Platf or m
S DK 。程序必须包含的头文件是W inhtt p. h 。W inhtt p. h 提供了W inHTTP 实现有关的结构体、常量及各函数的定义。为节省篇
幅, 这里所用的函数的具体参数及相关代码不予列出, 请读者参考平台S DK 文档或M S DN 文档。程序流程如下:
(1) W inH tt pOpen () , 为应用程序使用W inHTTP 函数进行初始化并返回一个会话句柄;
(2) W inH tt pConnect () , 指定HTTP 请求的目标服务器的地址及端口(默认SS L 端口为443) 并返回一个连接句柄;
(3) W inH tt pOpenRequest () , 创建一个HTTP 请求句柄。最后一个参数必须指定为W I N HTTP_FLAG_SECURE;
(4) W inH tt pSet O p ti on () , 设定选项。可供选项有40多个, 不过对本程序而言只需加入忽略证书有效日期的选项, 即SE 2C UR I TY_FLAG_I G NORE_CERT_DATE_I N VAL I D ;
(5) W inH tt pSendRequest () , 发送请求。如果成功, 函数返回TRUE, 否则返回F ALSE;
(6) 如果(5) 成功, 说明远程服务器身份已经确认, 程序可以进行正式的序列号验证过程, 即直接把主程序发过来的注册信息发送到服务器, 然后等待服务器的返回信息以判断网上验证成功与否。如成功, 可向主程序返回0。
2. 2 引入SS L 机制增强安全性
为了加强网上验证的可靠性, 本文引入安全套接字层/传输层安全性(SS L /TLS ) 机制。SS L 是一个确保安全HTTP 交易的已确立的标准, SS L 提供一个可支持客户和服务器之间所有交易高达128位加密的机制, 可防止拦截关键信息(如信用卡卡号) [2]。T LS 是最新的也是更为安全的SS L 协议版本。SS L 可以让客户透过使用服务器证书证实服务器属于可信任的实体, 而服务器亦可用客户证书证实客户身份[2]。SS L 同时利用了公钥加密和对称密钥加密技术的长处, 公钥加密用于验证客户和服务器的身份, 而对称密钥加密速度远快于公钥加密, 故用来加密应用程序数据[4]。公钥加密使用了两个数学相关的密钥的加密方法, 一个密钥称为“私钥”, 并一直保持机密; 另一个密钥
[2]
称为“公钥”, 可随意交给所有潜在的通信者。通常, 发送方使用接收方的公钥来加密消息, 只有收件人才有能对消息进行解密的相关私钥。
2. 3 实现网上加密验证方法
为使软件实现加密的序列号网上验证, 软件作者须在网上服务器进行配置并对软件本身作出改动。方法如下:
(1) 向证书颁发机构C A (Certificati on Authority ) 购买一个W eb 服务器的SS L 证书, 证书的作用是确保远程服务器的身份并对客户端和服务器端的通信加密。目前最有名的CA 是Veri 2Sign (www . verisign . com ) , 但VeriSign 提供的证书价格较贵, 我
3. 2 应用示例
为验证本文描述的方法的有效性, 现根据上述流程简述编程实现过程。
(1) 运行V isual C 6. 0, 创建一个MFC App W izard (dll ) 工程, 命名为Verify (可自定义名称) 。
(2) 在Verify . h 头文件的类CVerify App 外部添加代码行
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
,
282
计算机应用与软件2010年
extern " C" int P ASC AL EXP ORT CheckS N (char 3p szSn ) , 其中CheckS N () 为自定义的导出函数, 供主程序调用; 而“char 3szSn ”是入口参数, 用来接收主程序发过来的序列号, 是char 3
类型; int 代表导出函数的返回值是整型, 例如可定义返回0代表服务器证书正常且序列号亦合法, 返回非0则代表出错。
(3) 在Verify . cpp 源文件定义extern " C" int P AS CAL EX 2P ORT CheckS N (char 3p szSn ) 函数, 并在CheckS N () 函数内首行加入AFX_MANAGE_STATE (AfxGetStatic ModuleState () ) 语句后即可按3. 1节所述流程添加代码。
(4) 在Verify . def 文件内的EXP ORTS 段加入CheckS N 标记, 以表明CheckS N 函数是动态链接库的导出函数。
(5) 为使程序可正常编译和链接, 程序需包含平台S DK 提供的W inhtt p. h 头文件以及W inhtt p. lib 库文件。
当动态链接库做好后即可供主程序调用, 链接库的代码很简单, 在此不一一赘述, 于20m 后明显优于未改进的质心算法, 且误差是处于不断下降趋势。
表1是仿真数据和CS A 质心算法误差下降比例。由表1可以看到误差下降最高达40以上, 除个别点外, 平均降低:14. 5当R 大于16时, 误差降低都在10以上且R 越大误差改善越大。而经典质心算法在R 大于25后误差不降反升且增加R 不再能改进误差。
表1 误差统计表
算法
R (m )
610121416182022232425262728
质心(误差)
0. 61570. 53130. 48700. 49400. 44310. 40490. 42090. 39340. 39890. 38980. 43300. 43310. 3179
A (误差) 0. 65190. 58060. 50210. 45290. 44550. 39600. 32620. 34190. 31110. 29980. 28340. 29470. 28310. 2487
误差下降比例
12. 20. 35. 75. 57. 09. 8. 6. 4. 8 . 9$. 8'. 31. 94. 6A. 0
3. 3 结果分析
通过自建网站以模拟远程W eb 服务器的方法对3. 2节所
写的程序进行测试, 运行结果表明实现方法有效, 达到了预期目标:如果远程服务器身份验证不成功(如远程服务器无响应或服务器返回的证书的公用名称无效等各种错误) , 则验证模块返回非零值, 验证失败; 当远程服务器身份被确认且序列号亦为合法的话, 返回0, 验证通过。
如果主程序需要获取特定的出错信息, 如无效公用名称、未知证书颁发机构等, 可以在动态链接库里面加入W inH tt pSetSta 2tus Callback () 函数并指定一个用户自定义的回调函数。当服务器证书出错时, 回调函数会自动被操作系统调用, 并取得出错的代号。不过, 此功能并非必须, 且增加编程的复杂性, 可不增加。
为进一步提高网上验证的有效性, 验证程序可在每次程序启动时进行网上验证, 甚至可以把软件里面的重要文件的哈希值(Hash ) 发往远程服务器, 让服务器判断文件是否与原始文件不同。如有不同, 则可认为文件被破坏, 如程序被破解或感染病毒等。
3 结论语
仿真结果证明CS A 算法能够对经典质心算法的误差进行有效的改进。但算法的计算量较之经典质心算法有较大增加, 这是此算法的缺点。如何更有效地找到位于未知节点周围均匀的有效分布的少数锚节点来实施质心算法, 从而在利用质心定位算法简单、通信量少的特点的同时, 进一步降低定位误差仍需进一步研究。
4 结 论
本文首先介绍基于序列号保护方式的软件的序列号计算的基本原理及发展过程; 随后举例分析采用联网验证软件序列号的软件若验证过程为明文传输的话, 则容易被破解的原因; 接着说明采用SS L 服务器证书增强验证过程安全性的办法, 最后提供编程实现的过程。本文提出的实现方法有效且易于实现, 对打算采用网上验证软件合法性的软件开发者有很大的实用价值。
参考文献
[1]孙利民. 无线传感器网络[M].北京:清华大学出版社, 2005:
1482155.
[2]Bulusu B, Heidemann J, Estrin D. Density adap tive algorithm s f or bea 2
con p lace ment in wireless sens or net w orks [C ]//I EEE I CDCS ’01, Phoenix, AZ, Ap ril 2001.
[3]安恂. 一种用于无线传感器网络的质心定位算法[J ].计算机工程
参考文献
[1]段钢. 加密与解密[M].2版. 北京:电子工业出版社, 2003. [2]M icr os oft TechNet . htt p://technet . m icr os oft . com /.[3]M icr os oft Platf or m S DK 文档. htt p://msdn . m icr os oft . com /.[4]Allen Jones . SS L De mystified . W indo wsWeb S oluti ons,Dece mber 2000.
与应用, 2007, 43(20) :1362138.
[4]陈维克. 基于RSSI 的无线传感器网络加权质心定位算法[J ].武汉
(上接第214页)
理工大学学报:交通科学与工程版, 2006, 30(2) :2652267.
[5]N iculescu D, Nath B. DV based Positi oning in ad hoc net w orks [J ].
Journal of Telecommunicati on Syste m s, 2003, 22(1/4) :2672280.
改进的质心算法CS A 与多跳质心算法坐标估计比较如图2
所示。在整个R 变化过程中都优于未改进的质心算法, 在R 大
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net