读取硬盘号对应用程序进行加密? 读取硬盘号对应用程序进行加密?1.它初始化目标有什么作用2.将exe文件名改为play完全实现了加密功能,但用户未必安装完不更改exe文件名呀,改了就完全失效了,要怎么解决呀 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我在别的网站上看到的两篇文章,也许对你有用:一种简单注册码加密的例子分析作者信息:广东南海昭信公司 king_koo ([email protected])前言:为了保护软件开发者的权益我们经常需要对软件进行加密限制,以防止未经许可的随意拷贝。另一方面我们也可能需要在自己的共享软件中提供注册码的功能。近期笔者因为要对一软件进行加密限制,故对简单加密的方法做了一翻"研究"(找资料).下面我把我的方法写出来,希望对初学者有一定的帮助。本文源代码一: 注册机源代码 大小:10K本文源代码二: 解密机源代码 大小:10K 1.目标:做到一部机器只能装一个目标软件.程序拷给用户后,要求先注册,否则出现未注册消息.(注册方法见后面)2.分析:为每部机器分配一注册号,需要读机器的硬件信息.硬件信息可采用:a.读bios信息.用指针对bios操作,比较复杂.b.读cpu系列号.简单api,仅2000适用.c.读网卡id.用几个api.d.读硬盘系列号.一个api,简单.我采用了读硬盘系列号的方法,简单(能骗老板就行了).注册后解密匙放哪里呢?ini文件?二进制文件?不行,不小心删掉就没了.注册表?太麻烦,不够绿色.把他放在可执行文件本身最方便了.可惜可执行文件只能读本身,不能写自身(谁知道如何写请告诉我),故需另外做一个来写,写入解密匙后,每次可执行文件运行就读自身里的解密匙,由此判断有没有注册.3.示例代码分析3.1 解密机部分 ( 作者用于初始化目标,生成解密匙)新建一对话框工程,加入两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,然后把生成的顾客号返回给作者. 作者认同的话,就可运行私藏的解密机exe,输入他的顾客号,按"解密匙"按钮,把解密匙返回用户.用户把"解密匙"输入注册机exe,按"解密"按钮.就完成注册了!(注:注册机与play.exe要同一目录下)5.注:很多容错处理已省略或简化,应用时,请读者自行加上. 急!!!!帮忙看看这段sql怎么写? sql数据库查询结果如何在ListCtrl显示 急用!!! ACCESS数据库占空间大的头疼问题 ShellExecuteEx设置隐藏有的电脑有效有的无效 ODBC读Excel 怎样处理mscomm的错误? 受不了啦!! VC向EXCEL中用SQL插入数据的问题! 一个点子10~100分! 为什么老是报错说缺分号在这个宏之后DECLARE_PARSE_MAP() 关于mpeg2视频压缩以及解压文件 对话框中的回车问题:真对组合框
作者信息:广东南海昭信公司 king_koo ([email protected])前言:
为了保护软件开发者的权益我们经常需要对软件进行加密限制,以防止未经许可的随意拷贝。另一方面我们也可能需要在自己的共享软件中提供注册码的功能。近期笔者因为要对一软件进行加密限制,故对简单加密的方法做了一翻"研究"(找资料).下面我把我的方法写出来,希望对初学者有一定的帮助。本文源代码一: 注册机源代码 大小:10K
本文源代码二: 解密机源代码 大小:10K
1.目标:做到一部机器只能装一个目标软件.程序拷给用户后,要求先注册,否则出现未注册消息.(注册方法见后面)2.分析:为每部机器分配一注册号,需要读机器的硬件信息.硬件信息可采用:a.读bios信息.用指针对bios操作,比较复杂.
b.读cpu系列号.简单api,仅2000适用.
c.读网卡id.用几个api.
d.读硬盘系列号.一个api,简单.我采用了读硬盘系列号的方法,简单(能骗老板就行了).注册后解密匙放哪里呢?ini文件?二进制文件?不行,不小心删掉就没了.注册表?太麻烦,不够绿色.把他放在可执行文件本身最方便了.可惜可执行文件
只能读本身,不能写自身(谁知道如何写请告诉我),故需另外做一个来写,写入解密匙后,每次可执行文件运行就读自身里的解密匙,由此判断有没有注册.3.示例代码分析3.1 解密机部分 ( 作者用于初始化目标,生成解密匙)新建一对话框工程,加入两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,然后把生成的顾客号返回给作者.
作者认同的话,就可运行私藏的解密机exe,输入他的顾客号,按"解密匙"按钮,把解密匙返回用户.用户把"解密匙"输入注册机exe,按"解密"按钮.就完成注册了!(注:注册机与play.exe要同一目录下)5.注:很多容错处理已省略或简化,应用时,请读者自行加上.