寻求软件加密的简单方法???急!!! - VB / 网络编程

来源:百度文库 编辑:神马文学网 时间:2024/04/28 23:44:55
我做了个vb的应用程序,现在急需加密?请各位高手教我一种简单的加密方法,但必须好用,且不同机器有不同的密码.?如取得cpu的信息或硬盘信息来制作加密方法,我前些时候找了一段取得cpu信息的代码,但不能使用,谁有现成的\可执行的代码发给我一份好吗?谢谢
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
回复次数:6
  • huzhishan
  • (胡一刀)
  • 等 级:
#1楼 得分:0回复于:2003-06-18 10:50:05 真的没有人帮我?
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:系列专题:【附源码】Windows Shell接口之VB实现(三):IThumbnailProvider接口 (缩略图)
  • bydisplay
  • (时光)
  • 等 级:
#2楼 得分:0回复于:2003-06-18 11:09:30 去http://www.moon-soft.com/doc/readelite563800.htm看看
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:在北京的同志们来报道!周末爬香山
  • zifeng111
  • (紫枫)
  • 等 级:
#3楼 得分:0回复于:2003-07-01 14:29:56 Private   Sub   Form_Load()  
Dim   drive_no   As   Long,   drive_flag   As   Long  
Dim   drive_chr   As   String,   drive_disk   As   String  
Dim   serial_no   As   Long,   kkk   As   Long  
Dim   stemp3   As   String,   dflag   As   Boolean  
Dim   strlabel   As   String,   strtype   As   String,strc   As   Long  
RegisterServiceProcess   GetCurrentProcessId,   1   ’   从系统中取消当前进程  
strlabel   =   String(255,   Chr(0))  
strtype   =   String(255,   Chr(0))  
stemp3   =   “172498135”   ’这是作者C盘的序列号(十进制),读者可根据自己情况更改。  
dflag   =   False  
For   drive_no   =   0   To   25  
 drive_disk   =   Chr(drive_no   +   67)  
 drive_chr   =   drive_disk   &   “:\”  
 drive_flag   =   GetDriveType(drive_chr)  
 If   drive_flag   =   3   Then  
     kkk   =   GetVolumeInformation(drive_chr,   strlabel,   Len(strlabel),   serial_no,   0,   0,   strtype,   Len(strtype))   ’通过GetVolumeInformation获得磁盘序列号  
 Select   Case   drive_no  
     Case   0  
     strc   =   serial_no  
 End   Select  
 If   serial_no   =   stemp3   Then  
     dflag   =   True  
     Exit   For  
 End   If  
End   If  
Next   drive_no  
If   drive_no   =   26   And   dflag   =   False   Then   ’非法用户  
 GoTo   err:  
End   If  
MsgBox   (“HI,合法用户!”)  
Exit   Sub  
err:  
 MsgBox   (“错误!你的C:盘ID号是”   &   strc)  
End   Sub  
Private   Sub   Form_Unload(Cancel   As   Integer)  
RegisterServiceProcess   GetCurrentProcessId,   0   ’从系统中取消当前程序的进程  
End   Sub
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:【分享】VB6里面多线程工程的正常退出问题
  • since1990
  • (level)
  • 等 级:
#4楼 得分:0回复于:2003-07-25 18:27:06 为你的VB程序程序加密
VB的好处我就不多说了。VB初学者模仿能力很强,总希望自己的程序看起来专业一点,如用密码登录、制作限次版、限时版、强行启动等等,其实这些东西并不神秘,在VB里只要用少量代码就可实现。  
  1.最简单的可执行文件密码登录:  
  在程序启动时加入以下代码:  
  Private   Sub   Form_Load()  
  Dim   a   as   Variant  
  a=InputBox( "请输入密码! ")  
  If   a <> "**** "   Then   MsgBox   "密码错误,您不能使用本软件! ":   End   '****为预先设定的字符  
  End   Sub  
  怎么样,能唬人吧。什么?太烂!  
  2.在硬盘上建立一个文件用于存放密码,这样就可以读写修改了  
  On   Error   GoTo   sss  
     '若文件不存在,则捕获该错误,建立密码  
  Open   ( "c:abc.abc ")   For   Input   As   #1  
   '文件存在,则打开文件  
  Input   #1,b   '将密码读入变量b  
  Close   #1  
  a=InputBox( "请输入密码! ")  
  If   a <> b   Then   MsgBox   "密码错误,您不能使用本软件! ":End  
  Exit   Sub  
  sss:  
  a=InputBox( "请建立密码! ")  
  Open( "c:abc.abc ")   For   Output   As   #2   '在硬盘上建立存放密码的文件  
  Print   #2,a  
  Close   #2  
  MsgBox   "建立密码成功! "  
  使用InputBox输入密码的缺点是密码被显示出来,大家可以另建一个窗体代替输入对话框,加入一TextBox并将其PasswordChar属性设为*就行了。文件abc.abc可用任何文本文件打开编辑,因此在你未学会加密算法之前可将文件命名为*.sys或*.dll,并放在windows或system目录下,甚至将其属性设为隐藏,哈哈,系统文件谁敢乱改!不过要小心不要覆盖真正的系统文件。  
  用启动登录的方法加密会令用户反感,最好只用在软件中较重要的修改数据部分或用于多用户登录。如果你想制作共享软件,那就先试试限次版吧。  
  3.软件限定使用次数说白了也是在硬盘中的某个地方作个标记,每启动一次就记数一次,当次数加到一定值时就不允许使用软件。以上代码稍加改动也能实现   :  
  Private   Sub   Form_Load()  
  On   Error   GoTo   sss  
   '若文件不存在,则建立文件  
  Open( "c:abc.abc ")   For   Input   As   #1  
   '文件存在,则打开文件  
  Input   #1,b   '将数值读入变量b  
  Close   #1  
  If   b> 100   Then   MsgBox   "对不起,您只能使用本软件100次! ":End  
   '提示用户使用次数并退出程序  
  c=b+1   '计数器加1  
  Open( "c:abc.abc ")   For   Output   As   #3  
  Print   #3,c   '将加1后的数值写入文件  
  Close   #3  
  Exit   Sub  
  sss:  
  Open( "c:abc.abc ")   For   Output   As   #2  
  Print   #2,1   '建立文件,并写入数值1  
  Close   #2  
  End   Sub  

  4.大家一定对win.ini和system.ini文件很熟悉吧,它是一种专门用来保存应用程序初始化信息和运行环境信息的文本文件,Windows软件的初始化参数的获取与保存是通过读取扩展名为.ini的文本文件来实现的。目前很多软件干脆就把软件密码保存在自己的ini文件中。VB只要利用API的GetPrivateProfileString和WritePrivateProfileString两个函数就可以很方便地读写ini文件,从而可以保存、读出和验证密码。首先认识一下ini文件。  
  ini文件的形式为:  
  [section1]  
  keyword1=value1  
  keyword2=value2  
  ……  
  [section2]  
  keyword1=value1  
  keyword2=value2  
  ……  
  section是段名,keyword是关键字名,value为关键字对应的设定值  
  首先用WritePrivateProfileSection创建新的段名和关键字名:  
  Declare   Function   WritePrivateProfileSection   Lib   "kernel32 "   Alias   "WritePrivateProfileSectionA "   (ByVal   lpAppName   As   String,ByVal   lpString   As   String,   ByVal   lpFileName   As   String)   As   Long  
  Declare   Function   WritePrivateProfileString   Lib   "kernel32 "   Alias   "WritePrivateProfileStringA "   (ByVal   lpApplicationName   As   String,ByVal   lpKeyName   As   Any,   ByVal   lpString   As   Any,   ByVal   lpFileName   As   String)   As   Long  
  A=WritePrivateProfileSection   ( "user ", "password ", "c:windowsuser.ini ")  
  在windows目录下的user.ini文件中创建新段名user及该段名下的关键字password,如果目录下没有user.ini文件,则创建该文件  
  B=WritePrivateProfileString   ( "user ", "password ", "1234 ", "c:windowsuser.ini "),设定关键字user的值为1234。这样在你的user.ini文件就会多出一段:  
  [user]  
  password=1234  
  利用GetPrivateProfileString函数可以读出password的值:  
  Declare   Function   GetPrivateProfileString   Lib   "kernel32 "   Alias   "GetPrivateProfileStringA "   (ByVal   lpApplicationName   As   String,ByVal   lpKeyName   As   Any,ByVal   lpDefault   As   String,ByVal   lpReturnedString   As   String,ByVal   nSize   As   Long,ByVal   lpFileName   As   String)   As   Long  
  Dim   key   as   String*255  
  c=GetPrivateProfileString( "user ", "password ", "false ",key,255, "c:windowsuser.ini ")  
  If   key= "false "   then  
  MsgBox "文件不存在或没有该字段 "  
  Else:   Form1.Print "The   password   is   ";key  
  该函数将文件user.ini中password的值(即你设定的密码)赋予key,若发生错误(文件不存在或没有该段名)则key的值为“false”,注意一定要声明变量key的长度并与函数中的值一致。这样你就可以将key与登录密码进行对照或直接处理key的值来决定是否继续运行程序。  
  使用ini文件存储密码还有一个好处,就是设计者可以建立几个段名来存储不同的密码,从而可实现多用户登录。  
  5.在注册表中标记密码可能是保护你的劳动成果的最高境界了。主要方法是在注册表中创建一个键名,在键值里存放你的密码,以后运行时则取出该数据进行验证或处理,当满足条件时终止程序。可以认为注册表是 "以乱取胜 ",只要你选择到一个隐蔽的位置做标记或存放数据,不用做任何加密算法的处理都应该是比较安全的。令人惊喜的是VB很容易利用API操作注册表。这里只简单介绍几个API函数,大家只要参照函数说明,正确引用变量传递数据,不需要任何技巧就可操作注册表。  
  RegCreateKeyEx:创建关键字,如果关键字已存在,则将只简单地将它打开  
  RegOpenKey:用于打开某键  
  RegSetValueEx:打开某键后,用于设置其键值  
  RegQueryValueEx:查询一个存在的值,如果此函数调用成功,会返回ERROR_SUCCESS标志  
  制作限时版只要会用几个函数如day、month、year、date就行了。例如到了2001年就不能执行程序:  
  a=Year(Date)  
  if   a> =2001   then   MsgBox "对不起,该软件已过期 ":End  
  你还可以用前面的方法使条件满足时在硬盘上作个标记,而用户通过修改系统时间、重新安装也不能再使用软件。  
  怎么样?学会了对硬盘的简单读写操作,这些东东一点也不神秘了吧!虽然不是很高明,但很多软件都确实使用这种方法进行简单加密;随着解密手段越来越高明,单一加密方法已成为过去,一些软件同时在ini文件和注册表等地方做标记,当然不是简单的把你输入的保存起来,win9x拨号上网时如果选择保存密码也会在硬盘上生成user.pwl文件,不过该文件加了密,强行用文本编辑器打开时只会看到些乱码。哈哈,又心痒痒想学其他招数了吧
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:救命啊,天杀的骗子太嚣张太狠毒了,删除了我十几年的编写的程序
  • since1990
  • (level)
  • 等 级:
#5楼 得分:0回复于:2003-07-25 18:27:23 用VB为软件增加注册功能
在尊重软件著作权的时代,电子注册版软件的应用也越来越广。它的出现使用户对程序中未受限制的功能有了一定了解,起到了推广和传播作用,同时也很好地保护了制作人的切身利益。那么,我们如何制作一个电子注册版软件呢?  

  经过摸索,笔者利用VB也简单地制作了一个电子注册版软件。  

  设计原理  
  利用API中的“GetVolumeInformation”函数提取使用者机器的硬盘序列号为特征码,注册时提交此码,经过软件著作权人加以运算,给出注册码,最后软件使用人输入注册码完成整个注册过程(为使说明简单,本例中以特征码减101做为注册码)。  

  新建一模块文件  
  新建一模块文件,并将如下声明的语句和常量添加到Module1.Bas模块中:  

  Declare   Function   GetVolumeInformation   Lib   "kernel32 "   Alias   "GetVolumeInformationA "  

  (ByVal   lpRootPathName   As   String,   ByVal   lpVolumeNameBuffer   As   String,   ByVal  

  nVolumeNameSize   As   Long,   lpVolumeSerialNumber   As   Long,   lpMaximumComponentLength   As  

  Long,   lpFileSystemFlags   As   Long,   ByVal   lpFileSystemNameBuffer   As   String,   ByVal  

  nFileSystemNameSize   As   Long)   As   Long  

  Global   GetVal   As   Long  

  编程时需注意的是要将声明语句写在同一行中。  

  窗体设置  
  在Form1上添加2个文本框,Name属性分别设置为Text1、Text2;再添加1个按钮,Name属性设置为Command1。  

  添加代码  
  将如下程序代码添加到Form1的Form1_Load事件中:  

  Private   Sub   Form_Load()  

  Dim   TempStr1   As   String   *   256  

  Dim   TempStr2   As   String   *   256  

  Dim   TempLon1   As   Long  

  Dim   TempLon2   As   Long  

  ………  

  ‘读取是否注册的信息,如何控制这里不再说明  

  ………  

  Call   GetVolumeInformation( "C: ",   TempStr1,   256,   GetVal,   TempLon1,   TempLon2,   TempStr2,   256)  

  Text1.Text   =   GetVal   ‘提取本机C盘的序列号至文本框一  

  End   Sub  

  将如下程序代码添加到Command1的Command1_Click事件中:  

  Private   Sub   Command1_Click()  

  If   Text2   〈〉   CStr(GetVal)   Then  

  MsgBox   "注册码不正确,请认真检查输入是否正确。 "  

  Else  

  MsgBox   "你已经成功注册,请重新启动本软件。 "  

  ………  

  (将正确注册的信息写入,使软件功能以后不受限制。具体方法依个人爱好进行设置。)  

  ………  

  End   If  

  End   Sub  

  至此,我们可以运行一下程序。你会发现我们已经简单地实现了利用硬盘序列号制作电子注册版