- 浏览: 2028319 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
1.目标:做到一部机器只能装一个目标软件.程序拷给用户后,要求先注册,否则出现未注册消息.(注册方法见后面) 2.分析:为每部机器分配一注册号,需要读机器的硬件信息.硬件信息可采用: a.读bios信息.用指针对bios操作,比较复杂. 我采用了读硬盘系列号的方法,简单(能骗老板就行了).注册后解密匙放哪里呢?ini文件?二进制文件?不行,不小心删掉就没了.注册表?太麻烦,不够绿色.把他放在可执行文件本身最方便了.可惜可执行文件 3.示例代码分析 3.1 解密机部分 ( 作者用于初始化目标,生成解密匙) 作者认同的话,就可运行私藏的解密机exe,输入他的顾客号,按"解密匙"按钮,把解密匙返回用户.用户把"解密匙"输入注册机exe,按"解密"按钮.就完成注册了!(注:注册机与play.exe要同一目录下) 5.注:很多容错处理已省略或简化,应用时,请读者自行加上. 作者信息:
前言:
为了保护软件开发者的权益我们经常需要对软件进行加密限制,以防止未经许可的随意拷贝。另一方面我们也可能需要在自己的共享软件中提供注册码的功能。近期笔者因为要对一软件进行加密限制,故对简单加密的方法做了一翻"研究"(找资料).下面我把我的方法写出来,希望对初学者有一定的帮助。
本文源代码一: 注册机源代码 大小:10K
本文源代码二: 解密机源代码 大小:10K
b.读cpu系列号.简单api,仅2000适用.
c.读网卡id.用几个api.
d.读硬盘系列号.一个api,简单.
只能读本身,不能写自身(谁知道如何写请告诉我),故需另外做一个来写,写入解密匙后,每次可执行文件运行就读自身里的解密匙,由此判断有没有注册.
新建一对话框工程,加入两edit框,并为他们添加long型变量 m_gkh,m_jms.再加入按钮"解密匙",按钮"初始化目标",按钮"测试解密".
在OnInitDialog()加入下列代码:DWORD VolumeSerialNumber;
GetVolumeInformation("c:\\",NULL,12,&VolumeSerialNumber,NULL,NULL,NULL,10);
VolumeSerialNumber^=0x12345678;//本机c盘序列号简单运算
m_gkh=VolumeSerialNumber;//本机顾客号.测试用
UpdateData(0);
按钮"初始化目标"里添加代码:
(当然,这里加入的解密匙是你机的解密匙,别人拷去是没效的)//功能:初次使用时,在你要加密的文件play.exe末部加入解密匙.
DWORD num;
UpdateData(1);
num=m_jms;
num^=0x1999aa98;
if(num==m_gkh)
MessageBox("ok"); //提示解密匙正确
CFile ff;
if(!ff.Open("play.exe",CFile::modeWrite))
return;
CString str;
str.Format("%10d",m_jms);
MessageBox(str);
ff.SeekToEnd();
ff.Write(str,10);//添加到play.exe尾部
ff.Close();
按钮"解密匙"里添加代码:
//功能:得到解密匙.
UpdateData(1);
long aa=m_gkh^0x1999aa98;
m_jms=aa;
UpdateData(0);
按钮"测试解密"里添加代码://在你要加密的文件play.exe末部改写解密匙.
DWORD num;
UpdateData(1);
num=m_jms;
num^=0x1999aa98;
if(num==m_gkh)
MessageBox("ok"); //提示解密匙正确
CFile ff;
if(!ff.Open("play.exe",CFile::modeWrite))
return;
CString str;
str.Format("%10d",m_jms);
MessageBox(str);
ff.Seek(-10,CFile::end);//改写解密匙
ff.Write(str,10);
ff.Close();
3.2 注册机部分 ( 这部分供用户使用 )
新建一对话框工程,加入两edit框,并为他们添加long型变量 m_gkh,m_jms.再加入按钮"解密",
在OnInitDialog()加入下列代码:
//生成顾客号
DWORD VolumeSerialNumber;
GetVolumeInformation("c:\\",NULL,12,&VolumeSerialNumber,NULL,NULL,NULL,10);
VolumeSerialNumber^=0x12345678;
m_gkh=VolumeSerialNumber;
UpdateData(0);
按钮"解密"里添加代码:(和上边按钮"测试解密"里代码一样)//在你要加密的文件play.exe末部改写解密匙.
long num;
UpdateData(1);
num=m_jms;
num^=0x1999aa98;
if(num==m_gkh)
MessageBox("ok"); //提示解密匙正确
CFile ff;
if(!ff.Open("play.exe",CFile::modeWrite))
return;
CString str;
str.Format("%10d",m_jms);
MessageBox(str);
ff.Seek(-10,CFile::end);
ff.Write(str,10);//改写解密匙
ff.Close();
3.3 被加密的程序(本例为play.exe)里添加代码:
在OnInitDialog()里加入:
CFile ff;
if(!ff.Open("play.exe",CFile::modeRead|CFile::shareDenyNone))
return 1;
ff.Seek(-10,CFile::end);
char lp[10];
ff.Read(lp,10);//读解密匙
ff.Close();
DWORD num=atol(lp);
num^=0x1999aa98;
num^=0x12345678;//解密演算,还原为c盘序列号
DWORD VolumeSerialNumber;
GetVolumeInformation("c:\\",NULL,12,&VolumeSerialNumber,NULL,NULL,NULL,10);
if(num!=VolumeSerialNumber)MessageBox("未注册:(");
4.使用方法:
你把要加密的可执行文件加入3.3所诉的代码,编译后改为"play.exe",放到解密机exe同一目录下,运行解密机,按"初始化目标"按钮.这样你就可以把play.exe连同注册机exe一同送给客户了.
客户拿到后直接运行play.exe会出现未注册消息(你也可以加代码使产生其他效果).他想注册的话,要与作者联系(留下Email等),运行注册机exe,然后把生成的顾客号返回给作者.
广东南海昭信公司 king_koo
EMail:king_koo@163.net
发表评论
-
__declspec(novtable) 的用法
2010-11-27 14:37 1575__declspec(novtable) 的用法 __d ... -
解决URLDownloadToFile缓存问题的两种方法
2010-09-09 15:18 2897解决URLDownloadToFile缓存问题的两种方法 ... -
修改richedit背景
2010-07-19 22:52 1640RichEditCtrl::SetBackgroundCo ... -
使用ADO封装类的数据库程序开发实例(下)
2010-07-12 15:30 1468使用ADO封装类的数据库 ... -
使用ADO封装类的数据库程序开发实例(上)
2010-07-12 15:28 1209使用ADO封装类的数据库 ... -
VC防止窗口和控件闪烁的方法
2010-07-09 21:16 20151、将Invalidate()替换为Invalidate ... -
防止窗口闪烁地办法
2010-07-09 21:13 1509防止窗口闪烁地办法 也许我们都碰到过这种情况,当你 ... -
使用ADO _ConnectionPtr
2010-07-06 16:04 5262// GetUser.cpp : Defines the ... -
VC用ADO访问数据库全攻略
2010-07-06 15:29 1795VC用ADO访问数据库全 ... -
深入GetMessage和PeekMessage (引自-MSDN技术组)
2010-06-10 16:59 3722深入GetMessage和PeekMessage (引自 ... -
界面编程总结(1)
2010-06-02 13:32 4006原文地址:http://blog.csdn.net/byx ... -
获取信息的有关Windows API
2010-05-27 10:01 3142获取信息的有关Windows API 1.窗口信息 ... -
VC中如何实现窗口的隐藏
2010-05-13 10:08 7851VC中如何实现窗口的隐藏 用MFC做的Dialog ... -
SetConsoleCtrlHandler 处理控制台消息
2010-05-07 17:32 18111SetConsoleCtrlHandler 处理控制台消 ... -
解决决错误: error C2850: 'PCH header file'
2010-04-27 19:45 1946解决决错误: error C2850: 'PCH hea ... -
VC++ GDI+编程的字体和文本绘制
2010-04-13 13:12 7972字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸 ... -
VC利用GDI+显示透明的PNG图片
2010-04-12 16:59 115271.在你将要使用GDI+的工程中,完成初始化 ... -
GDI+编程基础(一)GDI+ Vs GDI
2010-04-12 15:59 2330下载源代码一、GDI GDI是位于应用程序与不同硬件之间 ... -
VC画图
2010-04-12 15:50 1532BOOL DrawPic(HDC hdc, TCHAR* ... -
对话框的数据交换--MFC深入浅出
2010-04-12 10:43 2449对话框数据交换指以下两种动作,或者是把内存数据写入对应的控 ...
相关推荐
本文主要介绍了一种简单的注册码加密方法,适用于保护软件开发者权益,防止未经授权的软件随意拷贝。该方法的核心是利用机器的硬件信息(如硬盘序列号)生成唯一的注册码,并将解密钥匙嵌入到可执行文件本身,使得每...
为了保护软件开发者的权益我们经常需要对软件进行加密限制,以防止未经许可的随意拷贝
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,由计算机科学家Ronald Rivest在1991年设计。它将任意长度的数据转化为一个固定长度的128位(16字节)的摘要,通常用32个十六进制数字表示。这个过程是...
总的来说,通过RSA进行注册码验证是一种常见的软件授权策略,它利用了非对称加密的安全性,确保了软件的正版化,并保护了开发者的利益。在实际应用中,还会结合其他安全措施,如哈希函数、数字签名等,以增强系统...
易语言是一种专为中国人设计的编程语言,它的目标是让编程变得简单、直观。这个压缩包文件中的"易语言简单注册码生成源码"是一个易语言编写的代码示例,用于教学或实践如何生成软件注册码。在软件授权管理中,注册码...
RAS是一种常用的公钥加密算法,广泛应用于数据传输、数字签名等领域。本篇文章将深入探讨C#中如何实现RAS加密和解密,并通过一个WinForm应用实例——RasWinFormDemo来具体阐述。 首先,我们需要理解RAS的基本原理。...
注册码是软件开发商为了验证用户是否已购买了正式版本而提供的一种授权方式。在本例中,“Folder Lock 6”的注册码包含了两部分信息:序列号(Serial Number)和注册号(Register Number)。 #### 序列号 (Serial ...
RSA是一种非对称加密算法,它使用一对密钥,一个用于加密,另一个用于解密,增强了数据的安全性。在数据库场景下,密码通常以明文存储是不安全的,因此采用加密技术对用户密码进行处理,可以防止数据泄露。 描述中...
以下是一个简单的例子: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public String encryptPassword(String password, String salt) { try { MessageDigest ...
1. **授权验证**:软件注册码是软件开发商为了保护知识产权、防止非法复制与使用而采取的一种措施。通过输入正确的注册码,可以激活软件的全部功能,确保用户合法使用。 2. **功能解锁**:对于某些版本的软件,注册...
ASP(Active Server Pages)是一种经典的服务器端脚本语言,常用于构建动态网页。在这个例子中,我们关注的是如何使用MD5加密来处理用户的密码,以提高安全性。MD5(Message-Digest Algorithm 5)是一种广泛使用的...
在IT行业中,软件注册码通常用于验证用户是否拥有合法使用权的一种手段。下面将详细介绍与该文档相关的知识点。 ### 一、PL/SQL Developer简介 PL/SQL Developer是一款专为Oracle数据库设计的强大开发工具,它支持...
数字签名是利用非对称加密技术实现的一种验证机制,可以保证数据的完整性和来源的不可否认性。例如,`Ex16_01`可能是关于如何使用C#创建和验证数字签名的实例。 3. **哈希函数** 哈希函数能够将任意长度的数据...
加密是一种将原始数据(明文)转换为不可读形式(密文)的过程,以保护数据不被未经授权的人员访问。解密则是加密的逆过程,将密文恢复为原始的明文。在PHP中,常用的加密算法有MD5、SHA-1、AES等。 1. **MD5**:...
1. **C#基础**:C#是一种面向对象的编程语言,由微软公司开发,广泛用于Windows应用、Web应用以及游戏开发等。VS2008是其配套的集成开发环境(IDE),提供代码编辑、调试和部署等一站式开发服务。 2. **用户注册...
SQLite ODBC(Open Database Connectivity)驱动程序是一种允许应用程序通过ODBC接口与SQLite数据库进行交互的工具。在IT领域,SQLite是一种轻量级、开源的嵌入式SQL数据库引擎,广泛应用于移动设备、桌面应用和...
ASP.NET是一种广泛使用的开源Web应用程序框架,由微软开发,用于构建功能丰富的动态网站、Web应用程序和服务。在这个"asp.net随机密码产生例子程序"中,我们可以深入探讨如何在.NET环境中生成安全且随机的密码。 ...
一种常见方法是使用UserDefaults,它允许我们将简单的键值对存储在设备上。在用户登录后,可以将他们的登录状态保存在UserDefaults中,下次启动应用时,检查这个状态以决定是否直接登录。 最后,不要忘记处理可能...
注册码通常指软件开发商为了保护其知识产权、防止未经授权的复制和分发而采用的一种加密方式。它包含了软件激活所需的所有必要信息,例如产品代码、序列号以及密码等。用户在安装软件后,需要输入正确的注册码才能...