【VB开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了VB开源代码-给VB程序加密 - 编程语言的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
VB的好处我就不多说了。
VB初学者模仿能力很强总希望自己的程序看起来专业一点如用密码登录、制作限次版、限时版、强行启动等等其实这些东西并不神秘在
VB里只要用少量
代码就可实现。
1.最简单的可执行文件密码登录 在程序启动时加入以下
代码 Private Sub Form_Load Dim a as Variant aInputBox请输入密码 If a Then MsgBox 密码错误您不能使用本软件: End 注释为预先设定的字符 End Sub 怎么样能唬人吧。
什么太烂 2.在硬盘上建立一个文件用于存放密码这样就可以读写修改了 On Error GoTo sss 注释若文件不存在则捕获该错误建立密码 Open c:abc.abc For Input As 1 注释文件存在则打开文件 Input 1b 注释将密码读入变量b Close 1 aInputBox请输入密码 If ab Then MsgBox 密码错误您不能使用本软件:End Exit Sub sss: aInputBox请建立密码 Openc:abc.abc For Output As 2 注释在硬盘上建立存放密码的文件 Print 2a Close 2 MsgBox 建立密码成功 使用InputBox输入密码的缺点是密码被显示出来大家可以另建一个窗体代替输入对话框加入一TextBox并将其PasswordChar属性设为就行了。
文件abc.abc可用任何文本文件打开编辑因此在你未学会加密算法之前可将文件命名为.sys或.dll并放在windows或system目录下甚至将其属性设为隐藏哈哈系统文件谁敢乱改不过要小心不要覆盖真正的系统文件。
用启动登录的方法加密会令用户反感最好只用在软件中较重要的修改数据部分或用于多用户登录。
如果你想制作共享软件那就先试试限次版吧。
3.软件限定使用次数说白了也是在硬盘中的某个地方作个标记每启动一次就记数一次当次数加到一定值时就不允许使用软件。
以上
代码稍加改动也能实现 Private Sub Form_Load On Error GoTo sss 注释若文件不存在则建立文件 Openc:abc.abc For Input As 1 注释文件存在则打开文件 Input 1b 注释将数值读入变量b Close 1 If b100 Then MsgBox 对不起您只能使用本软件100次:End 注释提示用户使用次数并退出程序 cb1 注释计数器加1 Openc:abc.abc For Output As 3 Print 3c 注释将加1后的数值写入文件 Close 3 Exit Sub sss: Openc:abc.abc For Output As 2 Print 21 注释建立文件并写入数值1 Close 2 End Sub 4.大家一定对win.ini和system.ini文件很熟悉吧它是一种专门用来保存应用程序初始化信息和运行环境信息的文本文件Windows软件的初始化参数的获取与保存是通过读取扩展名为.ini的文本文件来实现的。
目前很多软件干脆就把
软件密码保存在自己的ini文件中。
VB只要利用API的GetPrivateProfileString和WritePrivateProfileString两个函数就可以很方便地读写ini文件从而可以保存、读出和验证密码。
首先认识一下ini文件。
ini文件的形式为 section1 keyword1value1 keyword2value2 ???? section2 keyword1value1 keyword2value2 ???? section是段名keyword是关键字名value为关键字对应的设定值 首先用WritePrivateProfileSection创建新的段名和关键字名 Declare Function WritePrivateProfileSection Lib kernel32 Alias WritePrivateProfileSectionA ByVal lpAppName As StringByVal lpString As String ByVal lpFileName As String As Long Declare Function WritePrivateProfileString Lib kernel32 Alias WritePrivateProfileStringA ByVal lpApplicationName As StringByVal lpKeyName As Any ByVal lpString As Any ByVal lpFileName As String As Long AWritePrivateProfileSection userpasswordc:windowsuser.ini 在windows目录下的user.ini文件中创建新段名user及该段名下的关键字pass
word如果目录下没有user.ini文件则创建该文件 BWritePrivateProfileString userpassword1234c:windowsuser.ini设定关键字user的值为1234。
这样在你的user.ini文件就会多出一段 user password1234 利用GetPrivateProfileString函数可以读出password的值 Declare Function GetPrivateProfileString Lib kernel32 Alias GetPrivateProfileStringA ByVal lpApplicationName As StringByVal lpKeyName As AnyByVal lpDefault As StringByVal lpReturnedString As StringByVal nSize As LongByVal lpFileName As String As Long Dim key as String255 cGetPrivateProfileStringuserpasswordfalsekey255c:windowsuser.ini If keyfalse then MsgBox文件不存在或没有该字段 Else: Form1.PrintThe 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年就不能执行程序 aYearDate if a2001 then MsgBox对不起该软件已过期:End 你还可以用前面的方法使条件满足时在硬盘上作个标记而用户通过修改
系统时间、重新安装也不能再使用软件。
怎么样学会了对硬盘的简单读写操作这些东东一点也不神秘了吧虽然不是很高明但很多软件都确实使用这种方法进行简单加密随着解密手段越来越高明单一加密方法已成为过去一些软件同时在ini文件和注册表等地方做标记当然不是简单的把你输入的保存起来win9x拨号上网时如果选择保存密码也会在硬盘上生成user.pwl文件不过该文件加了密强行用文本编辑器打开时只会看到些乱码。
哈哈又心痒痒想学其他招数了吧 让软件只能在软盘上运行 利用App对象的Path属性返回可执行文件的路径进行判断。
Private Sub Form_Load Dim a As String Dim b as String aApp.Path 获得可执行文件的路径 bLefta1 取出第一个字符If bA Then MsgBox 本软件只能在软盘运行:End End Sub 这种加密的原理是程序运行时在预定的路径下寻找特定的文件如果没找到让程序中止运行。
这种加密一般要配合安装程序进行在软件的安装过程中埋设这一特定文件特定文件内容随意这样没有软件安装程序的用户直接用拷贝的方法得到你的软件将不能运行。
这里给出的示例用到的特定文件为 winu.ocx 埋设在 windows 的系统目录下。
本示例在
VB60中调试通过。
首先在启动窗体加入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 GetSystemDirectorySysDIR 100 SysDIR LeftSysDIR a a LenSysDIR b 1 Do While b