为你的VB程序程序加密(VB新手)

2016-02-19 13:15 101 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐为你的VB程序程序加密(VB新手),无聊中的都看过来。

【 tulaoshi.com - 编程语言 】

VB的好处我就不多说了。VB初学者模仿能力很强,总希望自己的程序看起来专业一点,如用密码登录、制作限次版、限时版、强行启动等等,其实这些东西并不神秘,在VB里只要用少量代码就可实现。
  1.最简单的可执行文件密码登录:
  在程序启动时加入以下代码:
  PrivateSubForm_Load()
  DimaasVariant
  a=InputBox("请输入密码!")
  Ifa"****"ThenMsgBox"密码错误,您不能使用本软件!":End注释:****为预先设定的字符
  EndSub
  怎么样,能唬人吧。什么?太烂!
  2.在硬盘上建立一个文件用于存放密码,这样就可以读写修改了
  OnErrorGoTosss
  注释:若文件不存在,则捕获该错误,建立密码
  Open("c:abc.abc")ForInputAs#1
  注释:文件存在,则打开文件
  Input#1,b注释:将密码读入变量b
  Close#1
  a=InputBox("请输入密码!")
  IfabThenMsgBox"密码错误,您不能使用本软件!":End
  ExitSub
  sss:
  a=InputBox("请建立密码!")
  Open("c:abc.abc")ForOutputAs#2注释:在硬盘上建立存放密码的文件
  Print#2,a
  Close#2
  MsgBox"建立密码成功!"
  使用InputBox输入密码的缺点是密码被显示出来,大家可以另建一个窗体代替输入对话框,加入一TextBox并将其PasswordChar属性设为*就行了。文件abc.abc可用任何文本文件打开编辑,因此在你未学会加密算法之前可将文件命名为*.sys或*.dll,并放在windows或system目录下,甚至将其属性设为隐藏,哈哈,系统文件谁敢乱改!不过要小心不要覆盖真正的系统文件。
  用启动登录的方法加密会令用户反感,最好只用在软件中较重要的修改数据部分或用于多用户登录。如果你想制作共享软件,那就先试试限次版吧。
  3.软件限定使用次数说白了也是在硬盘中的某个地方作个标记,每启动一次就记数一次,当次数加到一定值时就不允许使用软件。以上代码稍加改动也能实现:
  PrivateSubForm_Load()
  OnErrorGoTosss
  注释:若文件不存在,则建立文件
  Open("c:abc.abc")ForInputAs#1
  注释:文件存在,则打开文件
  Input#1,b注释:将数值读入变量b
  Close#1
  Ifb100ThenMsgBox"对不起,您只能使用本软件100次!":End
  注释:提示用户使用次数并退出程序
  c=b+1注释:计数器加1
  Open("c:abc.abc")ForOutputAs#3
  Print#3,c注释:将加1后的数值写入文件
  Close#3
  ExitSub
  sss:
  Open("c:abc.abc")ForOutputAs#2
  Print#2,1注释:建立文件,并写入数值1
  Close#2
  EndSub
  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创建新的段名和关键字名:
  DeclareFunctionWritePrivateProfileSectionLib"kernel32"Alias"WritePrivateProfileSectionA"(ByVallpAppNameAsString,ByVallpStringAsString,ByVallpFileNameAsString)AsLong
  DeclareFunctionWritePrivateProfileStringLib"kernel32"Alias"WritePrivateProfileStringA"(ByVallpApplicationNameAsString,ByVallpKeyNameAsAny,ByVallpStringAsAny,ByVallpFileNameAsString)AsLong
  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的值:
  DeclareFunctionGetPrivateProfileStringLib"kernel32"Alias"GetPrivateProfileStringA"(ByVallpApplicationNameAsString,ByVallpKeyNameAsAny,ByVallpDefaultAsString,ByVallpReturnedStringAsString,ByValnSizeAsLong,ByVallpFileNameAsString)AsLong
  DimkeyasString*255
  c=GetPrivateProfileString("user","password","false",key,255,"c:windowsuser.ini")
  Ifkey="false"then
  MsgBox"文件不存在或没有该字段"
  Else:Form1.Print"Thepasswordis";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)
  ifa=2001thenMsgBox"对不起,该软件已过期":End
  你还可以用前面的方法使条件满足时在硬盘上作个标记,而用户通过修改系统时间、重新安装也不能再使用软件。
  怎么样?学会了对硬盘的简单读写操作,这些东东一点也不神秘了吧!虽然不是很高明,但很多软件都确实使用这种方法进行简单加密;随着解密手段越来越高明,单一加密方法已成为过去,一些软件同时在ini文件和注册表等地方做标记,当然不是简单的把你输入的保存起来,win9x拨号上网时如果选择保存密码也会在硬盘上生成user.pwl文件,不过该文件加了密,强行用文本编辑器打开时只会看到些乱码。哈哈,又心痒痒想学其他招数了吧!->

来源:http://www.tulaoshi.com/n/20160219/1603520.html

延伸阅读
只要掌握了原理,你也能写出一个所谓的黑客程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。 一、所用控件 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协 议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工...
下面是Winsock的DataArrival事件中的代码。该代码的绝大部分是注释以向你解释程序所做的每一步。如果你觉得闷的话就跳过不看就是了。 PrivateSubWinsock1_DataArrival(ByValbytesTotalAsLong) DimstrDataAsString StaticintMessagesAsInteger'要下载的消息数(也就是邮件数) StaticintCurrentMessageAsInte...
标签: ASP
  前几天大哥对我说,使用asp真麻烦,编译环境实在是差劲,他总是在vb里面写好调试好代码然后在把代码粘贴到asp程序中,为此,我在这提出一个解决之道。使用VB接替ASP所有的对象,在VB中编写纯粹的ASP程序。 大家应该都知道,其实asp中的好多组件都是使用VB编写出来的,但是让大家感到很不方便的是如何使用asp固有的几个组件,例如Re...
按下表所示设置各控件的属性。 控件名称描述 TextboxtxtHost用于输入邮件服务器的名称或地址 TextboxtxtUserName输入用户名 TextboxtxtPassword输入密码 TextboxtxtBody显示邮件内容 ListviewlvMessages显示邮件清单 CommandButtoncmdCheckMail用于启动接收并显示邮件的子程序 CommandButtoncmdExit退出程...
在程序设计过程中,如何轻松地处理众多的随机事件,往往是制作大型系统首先要考虑的问题之一。用C语言开发Windows程序时,可以方便地使用消息机制(Message),但是,设计VB程序时,就没有这样的方便条件了。例如,多个窗口同时打开同一个表(Table),当在一个窗口中对数据进行了修改,而其他的窗口也能够随之进行数据更新,这时就需要有...

经验教程

682

收藏

78
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部