首页新闻找找看学习计划

求解,如何生成我自己的软件注册码?

0
悬赏园豆:20 [待解决问题]

在研究程序的软件保护及解密,看到这个加密过程半天没搞懂。问一下各位高手,此程序的加密过程已知,然自己写的时候,要如何提供注册吗呢(也就是写注册机)?

程序的用户ID加密,自定义加密代码如下。

namespace Soft_Security
{
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;
using System;
using System.Management;
using System.Web.Security;

[StandardModule]
internal sealed class Security
{
public static string _code;

public static string GetCode()
{
string expression = "";
ManagementClass class2 = new ManagementClass("Win32_PhysicalMedia");
foreach (ManagementObject obj2 in class2.GetInstances())
{
if (obj2.Properties["SerialNumber"].Value != null)
{
expression = obj2.Properties["SerialNumber"].Value.ToString();
}
if (Strings.Len(expression) > 1)
{
break;
}
}
if (Strings.Len(expression) == 0)
{
try
{
ManagementObject obj3 = new ManagementObject("Win32_LogicalDisk.DeviceID=\"C:\"");
expression = obj3.GetPropertyValue("VolumeSerialNumber").ToString();
}
catch (Exception exception1)
{
ProjectData.SetProjectError(exception1);
Exception exception = exception1;
Interaction.MsgBox(exception.Message, MsgBoxStyle.ApplicationModal, null);
ProjectData.ClearProjectError();
}
}
if (Strings.Len(expression) == 0)
{
expression = "HD_ID_NOT_FOUND";
}
expression = FormsAuthentication.HashPasswordForStoringInConfigFile(expression, "SHA1").Substring(0, 0x20);
_code = expression;
return expression;
}

//验证过程

public static bool IsValid(string key)
{
_code = GetCode(); 

key = key.ToUpper().Replace("-", "");

if (Strings.Len(key) != 0x10) 
{
return false; 
}

string password = _code;

for (int i = 0; i < 0x4c; i++) 
{
password = FormsAuthentication.HashPasswordForStoringInConfigFile(password, "SHA1");
}

password = password.ToUpper(); 

while (password.Length < 0x10) 
{
password = password + "ABC"; 
}

return password.StartsWith(key);

}
}
}

 以上是程序加密函数。

注册界面自动生成一个用户字符串,生成的用户ID为获取上面Security的GetCode;

代码如下:this.jiami.Text = Security.GetCode();

点击注册按钮的代码如下:

  Button1_Click 代码

 
try
{
if (Security.IsValid(Strings.Trim(this.TextBox2.Text)))
{
string name = @"Software\SoftKey";
RegistryKey key = Registry.LocalMachine.OpenSubKey(name, true);
if (key == null)
{
key = Registry.LocalMachine.CreateSubKey(name);
}
key.SetValue("Key", Strings.Trim(this.TextBox2.Text));
key.Close();
this.DialogResult = DialogResult.OK;
this.Close();
}
else
{
MessageBox.Show("请确认您输入了正确的注册码", "验证注册码失败");
}
}
catch (Exception exception1)
{
ProjectData.SetProjectError(exception1);
Exception exception = exception1;
Interaction.MsgBox(exception.Message, MsgBoxStyle.ApplicationModal, null);
ProjectData.ClearProjectError();

这个的注册原理是什么?如何生成我的注册码呢?

scolate的主页 scolate | 初学一级 | 园豆:182
提问于:2013-04-23 20:32
< >
分享
所有回答(1)
1

微软有个开源的框架 http://www.cnblogs.com/2018/archive/2010/10/22/1858482.html 可以直接用

2012 | 园豆:19142 (专家六级) | 2013-04-24 08:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册