给VB程序加密_第1页
给VB程序加密_第2页
给VB程序加密_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、前很多软件干脆就把软件密码保存在自己的ini文件中。VB只要利用API的GetPrivateProfileString和WritePrivateProfileString两个函数就可以很方便地读写ini文件,从而可以保存、读出和验证密码。首先认识一下ini文件。 ini文件的形式为: section1 keyword1=value1 keyword2=value2 section2 keyword1=value1 keyword2=value2 section是段名,keyword是关键字名,value为关键字对应的设定值 首先用WritePrivateProfileSection创建新的段名

2、和关键字名: 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 "WritePriva

3、teProfileStringA" (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.

4、ini文件,则创建该文件 B=WritePrivateProfileString ("user","password","1234","c:windowsuser.ini",设定关键字user的值为1234。这样在你的user.ini文件就会多出一段: user password=1234 利用GetPrivateProfileString函数可以读出password的值: Declare Function GetPrivateProfileString Lib "kernel32" Alias

5、 "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 String255 c=GetPrivateProfileString("user","password","

6、;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的值来决定是否继续运行程序。

7、使用ini文件存储密码还有一个好处,就是设计者可以建立几个段名来存储不同的密码,从而可实现多用户登录。 5.在注册表中标记密码可能是保护你的劳动成果的最高境界了。主要方法是在注册表中创建一个键名,在键值里存放你的密码,以后运行时则取出该数据进行验证或处理,当满足条件时终止程序。可以认为注册表是"以乱取胜",只要你选择到一个隐蔽的位置做标记或存放数据,不用做任何加密算法的处理都应该是比较安 全的。令人惊喜的是VB很容易利用API操作注册表。这里只简单介绍几个API函数,大家只要参照函数说明,正确引用变量传递数据,不需要任何技巧就可操作注册表。 RegCreateKeyEx:创

8、建关键字,如果关键字已存在,则将只简单地将它打开 RegOpenKey:用于打开某键 RegSetValueEx:打开某键后,用于设置其键值 RegQueryValueEx:查询一个存在的值,如果此函数调用成功,会返回ERROR_SUCCESS标志 制作限时版只要会用几个函数如day、month、year、date就行了。例如到了2001年就不能执行程序: a=Year(Date if a>=2001 then MsgBox"对不起,该软件已过期":End 你还可以用前面的方法使条件满足时在硬盘上作个标记,而用户通过修改系统时间、重新安装也不能再使用软件。 怎么样?学

9、会了对硬盘的简单读写操作,这些东东一点也不神秘了吧!虽然不是很高明,但很多软件都确实使用这种方法进行简单加密;随着解密手段越来越高明,单一加密方法已成为过去,一些软件同时在ini文件和注册表等地方做标记,当然不是简单的把你输入的保存起来,win9x拨号上网时如果选择保存密码也会在硬盘上生成user.pwl文件,不过该文件加了密,强行用文本编辑器打开时只会看到些乱码。哈哈,又心痒痒想学其他招数了吧! * 让软件只能在软盘上运行 利用App对象的Path属性返回可执行文件的路径进行判断。 Private Sub Form_Load( Dim a As String Dim b as String

10、a=App.Path 获得可执行文件的路径 b=Left(a,1 取出第一个字符If b<>"A" Then MsgBox "本软件只能在软盘运行!":End End Sub * 这种加密的原理是:程序运行时在预定的路径下寻找特定的文件,如果没找到让程序中止运行。这种加密一般要配合安装程序进行,在软件的安装过程中埋设这一特定文件(特定文件内容随意),这样,没有软件安装程序的用户直接用拷贝的方法得到你的软件将不能运行。这里给出的示例用到的特定文件为 winu.ocx 埋设在 windows 的系统目录下。 本示例在VB60中调试通过。 '

11、;首先在启动窗体加入API私有声明GetSystemDirectory, Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long As Long Private Sub Form_Load( Dim a, b As Integer Dim SysDIR As String * 100 Dim SYSDIR1 As String Form1.Show '得到windows系统目录SYSDIR1 a = GetSystemDirectory(SysDIR, 100 SysDIR = Left(SysDIR, a a = Len(SysDIR b = 1 Do While b <= a If Mid(SysDIR, b, 1 = " " Then Ex it Do b = b + 1 Loop SYSDIR1 = Mid(SysDIR, 1,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论