保护你的程序(转)

原创 2005年05月19日 19:49:00


我们知道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啦什么的。

(转)保护自己的Flash程序(AS3) -- 基于socket方式传送swf文件

前段时间在flashseer看到有人提到:可以通过socket方式传送swf文件,让用户无法获取到swf文件... 当时还没有出as3的反编译,所以对程序的保护没有在意.随着反编译程序的平民化,不希望...
  • gxj1680
  • gxj1680
  • 2012年03月21日 17:21
  • 723

程序出现异常"尝试读取或写入受保护的内存这通常指示其他内存已损坏"

System.AccessViolationException: Attempted to read or write protected memory. This is often an in...
  • hlmsoft
  • hlmsoft
  • 2014年06月05日 17:13
  • 3378

代码混淆/程序保护(对抗反汇编)原理与实践

所谓对抗反汇编技术,就是在程序中使用特殊构造的代码或数据,让反汇编工具产生不正确的指令。恶意代码使用该技术,可以一定程度上阻碍相似性检测算法和启发式反病毒检测。一、反汇编算法的局限性反汇编软件在拿到一...

程序的加载和执行(六)——《x86汇编语言:从实模式到保护模式》读书笔记26

【通过本文能学到什么?】 1.NASM的条件汇编 2.用NASM编译的时候,通过命令行选项定义宏 3.Makefile的条件语句 4.在make命令行中覆盖Makefile中的变量值 5.第13章习...

内核态下基于动态感染技术的应用程序执行保护(三 获取SSDT)

imageheaderstringdoshookfile       (转载请注明博客地址:http://blog.csdn.net/hitetoshi)     前面我们经常提到SSD...
  • kingswb
  • kingswb
  • 2016年04月11日 19:26
  • 577

网易云加密--Android安卓移动应用程序加密加壳保护方案防破解防逆向分析防游戏外挂

网易云加密--Android安卓移动应用程序加密加壳保护方案防破解防逆向分析防游戏外挂 一、服务简介 网易云加密为网易公司旗下产品,致力于为移动应用程序提供专业保护方案,让...
  • asmcvc
  • asmcvc
  • 2015年11月11日 09:47
  • 3209

双守护进程保护程序运行

涉及到服务通信,使用AIDL。 MyProcess.aidl: package com.study.dn_process.inter; interface MyProcess{ String get...

热带鱼水族箱屏幕保护程序

软件介绍                                         【基本介绍】     SereneScreen Marine Aquarium 是著名的...

Effective C# 原则45:选择强异常来保护程序(译)

Effective C# 原则45:选择强异常来保护程序 Item 45: Prefer the Strong Exception Guarantee 当你抛出异常时,你就在应用程序中引入了一个中...
  • ty_soft
  • ty_soft
  • 2012年02月21日 11:34
  • 483

C# 窗口实现Win7简单屏幕泡泡保护程序 和实现聊天窗口震动

首先看一下运行之后的效果图 接下来就是代码了using System; using System.Collections.Generic; using System.ComponentMode...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:保护你的程序(转)
举报原因:
原因补充:

(最多只允许输入30个字)