近段时间接了个项目,是关于一个称重传感器的上位机系统,需要一机一码针对不同的客户机分别注册,第一次注册完后,下次打开后不必注册。

刚开始想用正规的注册机办法去完成,搜罗了半天,发现现在大部分的硬盘注册机 其实并不是读取硬盘的物理序列号来进行加密的,而是采用读取磁盘分区卷标号来作为加密的基值。先按照读取磁盘卷标号开发了注册机程序,在自己的三台电脑上测试都没问题,也就是说没出现过读取卷标号重复的情况。结果第二天发给客户测试,客户反应用了几台电脑的注册码全部一样,瞬间石化。

后来自己分析过,可能是由于现在的操作系统都是用的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注册机独辟蹊径-----注册机也可以这样写的更多相关文章

  1. ansible 安装 使用 命令 笔记 生成密钥 管控机 被管控机 wget epel源

      ansible 与salt对比 相同 都是为了同时在多台机器上执行相同的命令 都是python开发 不同 agent(saltstack需要安装.ansible不需要) 配置(salt配置麻烦,a ...

  2. ansible Ansible Galaxy ansible-playbook 安装 使用 命令 笔记 生成密钥 管控机 被管控机 wget epel源

    笔记 ansible 安装 与salt对比 相同 都是为了同时在多台机器上执行相同的命令 都是python开发 不同 agent(saltstack需要安装.ansible不需要) 配置(salt配置 ...

  3. 服务注册发现与注册中心对比-Eureka,Consul,Zookeeper,Nacos对比

    服务注册发现与注册中心对比-Eureka,Consul,Zookeeper,Nacos对比 注册中心简介 流程和原理 基础流程 核心功能 1.Eureka.Consul.Zookeeper三者异同点 ...

  4. 如何配置 Oracle VirtualBox 中的客户机与物理机网络

    当你在 Oracle VirtualBox 虚拟机软件 中安装了各种操作系统时,你可能需要实现物理机与虚拟机之间的相互访问. 在这篇文章中,我们将会以最简单明了的方式来说明如何配置客户机与 Linux ...

  5. 如何配置 VirtualBox 中的客户机与宿主机之间的网络连接

    如何配置 VirtualBox 中的客户机与宿主机之间的网络连接 作者: Aaron Kili 译者: LCTT rusking | 2017-03-01 13:40   评论: 3 收藏: 3 当你 ...

  6. Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式

    前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...

  7. Oracle监听的静态注册和动态注册

    静态注册:通过解析listene.ora文件 动态注册:由PMON进程动态注册至监听中 在没有listener.ora配置文件的情况下,如果启动监听,则监听为动态注册.用图形化netca创建的监听,默 ...

  8. Android(java)学习笔记173:BroadcastReceiver之 静态注册 和 动态注册

    1. 广播接受者>什么是广播.收音机.电台:对外发送信号.收音机:接收电台的信号. >在android系统里面,系统有很多重要的事件: 电池电量低,插入充电器,sd卡被移除,有电话打出去, ...

  9. Oracle监听静态注册和动态注册

    静态注册和动态注册总结 一.什么是注册? 注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库.这个服务名可能与实例名 ...

随机推荐

  1. React快速入门

    目录: 简介 Hello React! 虚拟DOM React组件 轮子来了:JSX 使用JSX 简介 React是Facebook开源的一个用于构建用户界面的Javascript库,已经 应用于Fa ...

  2. cvLoadImage函数解析 cvLoadImageM()函数

    1.函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR ); filename :要被读入的 ...

  3. spring的定时任务

    maven中引入quartz的jar包依赖 单纯针对时间的设置规则org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运行 ...

  4. linux设备驱动归纳总结(四):4.单处理器下的竞态和并发【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-67005.html linux设备驱动归纳总结(四):4.单处理器下的竞态和并发 xxxxxxxxxx ...

  5. JSP直接连接sql2008数据库并显示

    <%@ page contentType="text/html; charset=utf-8" language="java" errorPage=&qu ...

  6. Java 基本数据类型 sizeof 功能【转】

    转自:http://blog.csdn.net/sunboy_2050/article/details/7310008 版权声明:本文为博主原创文章,未经博主允许不得转载. Java基本数据类型int ...

  7. Mysql备份与还原实例

    一.备份数据库 ----清空一下日志 mysql> reset master; Query OK, rows affected (0.02 sec) ----查看一下echo表的存储引擎 mys ...

  8. php单链表实现的代码

    <?php/*** 单链表*/ class Demo{private $id;public $name;public $next;public function __construct ($id ...

  9. 6、XML(2)

    1 总结XML基础 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不 ...

  10. JavaEE基础(二十四)/多线程

    1.多线程(多线程的引入) 1.什么是线程 线程是程序执行的一条路径, 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率, 可以同时完成多项工作 2.多线程的应用场景 红蜘蛛同时共享屏幕给 ...