保护你的程序(转)


我们知道windowsXP现在使用了在线激活的功能来实现保护正版的功能,它是通过你的硬件的一些标识生成一个原始数据(通常是一个字符串),然后把这个原始字符串通过inernet发送到ms网站的一个程序里,而这个程序接受到这个原始字符串后经过一些不为人知的算法处理后再发送给你的机器,我想或多或少是在你的机器上做了一些手脚,我们假设在你的硬盘生成一段密文。然后你的机器启动的时候就读取你的硬件标识并还生成那个原始数据,在本地还是经过那个不为人知的算法后得到一段密文,然后用刚刚生成的密文和在线激活的时候生成到你硬盘上的那段密文比较,如果相同,那你就能进入桌面,如果不同,那你就进不了桌面,而如果你机器更改了硬件配置,生成密文的原始数据就变了,所以密文就不同了,你就需要重新算号了。
当然了,我是把问题描述简单化了,winxp是把激活文件放在一个特殊文件里了,要不我们破解winxp和window 2003的时候也不替换那几个文件了,另外我还有意忽略了一些在线激活的细节。
我们可以把这个激活技术推广到我们自己的软件中去,毕竟我们程序员最不愿意看到的就是我们费了很久的时间,投入了很大的精力开发出的软件在被人们疯狂的拷贝使用,并且没有给你一点好处,尽管这是事实,我们还是要做一些措施的。
微软的用以确定硬件杂凑编码的10项硬件设备特征分别是:显示适配器、SCSI适配器、IDE适配器、网络适配器MAC地址、RAM容量范围(例如0至64兆或64至128兆)、处理器类型、处理器序列号、硬盘驱动器设备、硬盘驱动器卷序列号、CD-ROM/CD-RW/DVD-ROM。我们就不要这么复杂了,我们只要其中3个就行了。

一.获取硬件杂凑编码
把下面的代码复制到剪贴版里,并保存成一个.vbs文件,这个脚本文件用来获取你的机器的CPUID,硬盘的PNP DeviceID,和网卡MAC号,得到的这3个字符串都能代表你的机器特征,而3个字符串组合起来几乎是就是表示你的机器的一个全球唯一标识。按理说,无论你重装系统,还是格式化硬盘,得到的这个组合字符串是唯一不变的,我们可以用它作为我们生成软件安装序列号的原始数据,当然这个组合字符串是很长的,你可以把这个字符串进行摘要算法处理后作为原始数据,比说把把这个字符串进行MD5加密。
On Error Resume Next

strComputer = "."
strOut = ""
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!//" & strComputer & "/root/cimv2")

'获取网卡的MAC地址,因为一个机器可能有多个网络适配器,所以我们只获取AdapterType值为"Ethernet 802.3"的适配器MAC号,也就是AdapterTypeID=0的网络适配器,网卡号其实不是很保险,有的小网卡厂商生产的网卡可能会有重复的.
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter")
For Each objItem in colItems
    If objItem.AdapterTypeID = 0 Then strOut = strOut & "MAC Address: " & objItem.MACAddress &vbcrlf
Next
'获取CPU的序列号,这个号可不是全球唯一哦,有可能一批CPU使用一个序列号
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objItem in colItems
   strOut = strOut & "Processor ID: " & objItem.ProcessorId&vbcrlf
Next
'获取硬盘的PNP DeviceID,这个号和传说中的磁盘序列号差不多,应该是也是唯一的,大家都把这个值给偶发上来偶看看.
Set colDiskDrives = objWMIService.ExecQuery _   
    ("Select * from Win32_DiskDrive")
For each objDiskDrive in colDiskDrives
    strOut = strOut & "DiskDrives PNP DeviceID: " & vbTab &  objDiskDrive.PNPDeviceID&vbcrlf
Next
'建立一个IE对象,并利用它的功能巧妙的把输出字符串复制到剪贴版里.
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.document.parentwindow.clipboardData.SetData "text", strOut
objIE.Quit
Wscript.Echo strOut
以上是通过WSH脚本来获取硬件字符串的,我们让用户复制这个字符串,并通过你提供的在线算号的web程序里算号,当然你可以在算号前要求对方做一些事,比如说点击一下广告啦,照顾你一些money啦什么的。

阅读更多
个人分类: 开发笔记
上一篇用脚本获取网卡MAC,CPUID,硬盘序列号(转)
下一篇ASP.NET 2.0中的登陆控件简介
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭