[原创]VB注册机独辟蹊径-----注册机也可以这样写
近段时间接了个项目,是关于一个称重传感器的上位机系统,需要一机一码针对不同的客户机分别注册,第一次注册完后,下次打开后不必注册。
刚开始想用正规的注册机办法去完成,搜罗了半天,发现现在大部分的硬盘注册机 其实并不是读取硬盘的物理序列号来进行加密的,而是采用读取磁盘分区卷标号来作为加密的基值。先按照读取磁盘卷标号开发了注册机程序,在自己的三台电脑上测试都没问题,也就是说没出现过读取卷标号重复的情况。结果第二天发给客户测试,客户反应用了几台电脑的注册码全部一样,瞬间石化。
后来自己分析过,可能是由于现在的操作系统都是用的Ghost方式,如果采用相同的Ghost相同可能造成磁盘分区都一样的情况出现。算了后来还是不用这种方式了,苦于时间紧急没有时间去移植读取磁盘物理序号来加密的程序。百般无奈之下想到了一个很低级的办法,但是别人也不好破解,下面进入正题介绍如何用自己的方式写出比较可靠地注册机,暂且给这种方式取名叫做“BR”法。
第一部分,程序效果展示。
第一次运行会弹出注册界面,提供机器码,要求输入注册码注册。为了调试方便,增加了一个注册码提示功能。效果如下图:
1、输入注册码错误的情况:


2、输入正确的注册码的情况:

第二部分,实现原理:随机数产生+注册表
基本原理是:软件第一次运行的时候,将注册码变量写入系统注册表,赋值为0;同时系统产生一个N位的随机数,经过自己设计的某种算法(加密)得出一个机器码并且显示在注册机界面。如果输入的注册码正确的情况下,将正确的注册码写入注册表,覆盖初次运行赋值的0;那么下次再运行软件的时候,首先会去读取系统注册表的值如果不等于0,则说明已经被正确的注册码覆盖,就可以跳过注册这一步;相反如果输入的注册码错误,就不会去写注册表,那么注册表变量的值一直是0.
贴出程序供大家参考:
1、注册界面代码:
Private Sub Command2_Click()
End
End Sub '窗体加载程序,生成随机数,计算注册码,保存随机数并写入系统注册表 Private Sub Form_Load() Dim m As Integer, n As Integer, r As Integer, x As Integer, y As Integer m =
n =
Randomize '随机数初始化声明 '再用Rnd函数产生随机数
'如果产生一个N到M之间的随机数(n>m,包含n,m)表达式可为;
r = Int(Rnd * (n - m + ) + m) comnum = r '将随机数存储到模块全局变量,防止变化 Text3.Text = r '注册码提示,用于测试 x = r - * '由机器码计算注册码的简单算法 Text1.Text = x '显示机器码 Dim num_reg '如果注册表存在,则读取;不存在的话,创建注册表项 num_reg = GetSetting("Internet Explorer", "Startup", "regedit", ) '条目取名为了混淆概念 If num_reg > Then '如果num_reg>0 说明该项目已经被修改为注册码,即:已经注册过,所以直接跳到主窗体
Unload Me
Form_main.Show End If End Sub Private Sub Command1_Click() y = Text2.Text '获取输入的注册码信息 'Text4.Text = comnum '将模块中存储的随机数赋值给text4,测试用 If y = comnum Then '如果输入的注册码与产生的随机数完全一致,则进入主程序;否则弹出对话框 SaveSetting "Internet Explorer", "Startup", "regedit", comnum '当写入的注册码正确时,将正确的注册码保存到注册表当中,下次启动时先检测注册表项目
'根据注册表值决定是否需要弹出注册窗体
Unload Me
Form_main.Show Else
MsgBox "注册码错误", , "信息提示"
End If End Sub
2、主程序窗口:简单的增加一个Label 显示一句话:恭喜,属于你自己的注册机运行成功了!
第三部分,注册码生成工具。
注册码生成工具比较简单了,直接完成自己设计的算法的逆向就可以了。
[原创]VB注册机独辟蹊径-----注册机也可以这样写的更多相关文章
- ansible 安装 使用 命令 笔记 生成密钥 管控机 被管控机 wget epel源
ansible 与salt对比 相同 都是为了同时在多台机器上执行相同的命令 都是python开发 不同 agent(saltstack需要安装.ansible不需要) 配置(salt配置麻烦,a ...
- ansible Ansible Galaxy ansible-playbook 安装 使用 命令 笔记 生成密钥 管控机 被管控机 wget epel源
笔记 ansible 安装 与salt对比 相同 都是为了同时在多台机器上执行相同的命令 都是python开发 不同 agent(saltstack需要安装.ansible不需要) 配置(salt配置 ...
- 服务注册发现与注册中心对比-Eureka,Consul,Zookeeper,Nacos对比
服务注册发现与注册中心对比-Eureka,Consul,Zookeeper,Nacos对比 注册中心简介 流程和原理 基础流程 核心功能 1.Eureka.Consul.Zookeeper三者异同点 ...
- 如何配置 Oracle VirtualBox 中的客户机与物理机网络
当你在 Oracle VirtualBox 虚拟机软件 中安装了各种操作系统时,你可能需要实现物理机与虚拟机之间的相互访问. 在这篇文章中,我们将会以最简单明了的方式来说明如何配置客户机与 Linux ...
- 如何配置 VirtualBox 中的客户机与宿主机之间的网络连接
如何配置 VirtualBox 中的客户机与宿主机之间的网络连接 作者: Aaron Kili 译者: LCTT rusking | 2017-03-01 13:40 评论: 3 收藏: 3 当你 ...
- Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...
- Oracle监听的静态注册和动态注册
静态注册:通过解析listene.ora文件 动态注册:由PMON进程动态注册至监听中 在没有listener.ora配置文件的情况下,如果启动监听,则监听为动态注册.用图形化netca创建的监听,默 ...
- Android(java)学习笔记173:BroadcastReceiver之 静态注册 和 动态注册
1. 广播接受者>什么是广播.收音机.电台:对外发送信号.收音机:接收电台的信号. >在android系统里面,系统有很多重要的事件: 电池电量低,插入充电器,sd卡被移除,有电话打出去, ...
- Oracle监听静态注册和动态注册
静态注册和动态注册总结 一.什么是注册? 注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库.这个服务名可能与实例名 ...
随机推荐
- 由Unicode编码想到弄懂编码表
test unicode好 007400650073007400200075006E00690063006F00640065597D 这是一个Unicode编码,一共六七万的汉字,可以说Unicode ...
- jQuery 文档操作方法(w3school)
这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 方法 描述 addClass() 向匹配的元素添加指定的类名. after() 在匹配的元素之后插入内容. append( ...
- ALTFP_CONVERT IP使用与仿真
ALTFP_CONVERT IP使用与仿真 近期项目要使用到整型数据转浮点型数据,将16位的整数转换为单精度浮点数(32bit).本打算自己写逻辑实现的,不过考虑到本身项目时间紧,能力也有限,就没 ...
- vim查找/替换字符串
1.:s 命令来替换字符串. :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivia ...
- bin和sbin的区别
bin和sbin的区别: bin:用户命令(所有用户均可使用) sbin:管理命令(通常只有管理员可以使用)
- 完整学习git一git设置
1查看git版本 git --version ➜ php- git:(master) git --version git version 1.8.3.1 2告诉git当前用户的姓名和邮件地址 git ...
- ACM题目————还是畅通工程
Submit Status Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路 ...
- js 数组排序和算法排序
1.算法排序 a.插入排序 var arr = [23,34,3,4,23,44,333,444]; var arrShow = (function insertionSort(array){ if( ...
- reactjs入门到实战(五)---- props详解
1>>>基础的props使用 不可修改父属性 getDefaultProps 对于外界/父组件的属性值,无法直接修改,它是只读的. <script type= ...
- cetos6.5安装Tomcat
一. 下载Tomcat 官网下载Tomcat tar.gz文件 二. 解压tar.gz文件 tar -zxvf tomcat.tar.gz 三. 在catalina.sh最上面添加一下内容 expo ...