如何为winfrom 程序加密
我编好了一个winform程序,想使该软件的注册使用。也就是做个客户端绑定,每个客户端绑定一台机器,读取的是CPU或者磁盘信息,不是同一个机器不允许使用。不知道如何把信息写入注册表或者文件--------------------编程问答-------------------- 使用 Microsoft.Win32.RegistryKey
--------------------编程问答-------------------- using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.Win32;
public partial class Register : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("这里是读取到的信息"+"<br/>");
ReadRegedit();
Response.Write("<br/>");
Response.Write("这里将要写入信息swort/swort-test" + "<br/>");
WriteRegedit();
Response.Write("写入结束" + "<br/>");
Response.Write("查看存在与否" + "<br/>");
ExistsRegedit();
Response.Write("查看结束" + "<br/>");
Response.Write("删除" + "<br/>");
DeleteRegedit();
Response.Write("删除结束" + "<br/>");
Response.Write("查看存在与否" + "<br/>");
ExistsRegedit();
Response.Write("查看结束" + "<br/>");
}
/// <summary>
/// 注册表的读取
/// </summary>
/// <returns></returns>
public void ReadRegedit()
{
RegistryKey rk = Registry.CurrentUser;
RegistryKey softWare = rk.OpenSubKey("Software");
RegistryKey microsoft = softWare.OpenSubKey("Microsoft");
RegistryKey windows = microsoft.OpenSubKey("Windows");
RegistryKey current = windows.OpenSubKey("CurrentVersion");
RegistryKey explorer = current.OpenSubKey("Explorer");
RegistryKey shell = explorer.OpenSubKey(@"Shell Folders");
foreach (string b in shell.GetValueNames())//这里用shell.GetValueNames()不是shell.GetSubKeyNames()
{
Response.Write( b+" "+ shell.GetValue(b).ToString());
Response.Write("<br/>");
}
}
/// <summary>
/// 注册表的写入
/// </summary>
/// <returns></returns>
public bool WriteRegedit()
{
try
{
RegistryKey rk = Registry.CurrentUser;
RegistryKey softWare = rk.OpenSubKey("Software");
RegistryKey microsoft = softWare.OpenSubKey("Microsoft");
RegistryKey windows = microsoft.OpenSubKey("Windows");
RegistryKey current = windows.OpenSubKey("CurrentVersion");
RegistryKey explorer = current.OpenSubKey("Explorer");
RegistryKey shell = explorer.OpenSubKey(@"Shell Folders", true);//这里必须加true就是得到写入权限
RegistryKey key = shell.CreateSubKey("swort");//创建swort目录
key.SetValue("swort", "test");
//在swort目录下建立写入swort test
Response.Write("写入成功!!!!!!!!!");
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 注册表的删除
/// </summary>
/// <returns></returns>
public bool DeleteRegedit()
{
try
{
RegistryKey rk = Registry.CurrentUser;
RegistryKey softWare = rk.OpenSubKey("Software");
RegistryKey microsoft = softWare.OpenSubKey("Microsoft");
RegistryKey windows = microsoft.OpenSubKey("Windows");
RegistryKey current = windows.OpenSubKey("CurrentVersion");
RegistryKey explorer = current.OpenSubKey("Explorer");
RegistryKey shell = explorer.OpenSubKey(@"Shell Folders",true);
RegistryKey swort = shell.OpenSubKey("swort",true);//这里必须加true就是得到写入权限
swort.DeleteValue("swort");//删除swort的值 这个连键值一起删除了 剩下一个
shell.DeleteSubKey("swort",false);//删除swort这个目录 要删除这个目录 必须具有权限
Response.Write("删除成功!!!!!!!!!");
return true;
}
catch
{
return false;
}
return true;
}
/// <summary>
/// 查询某个键值是否存在
/// </summary>
/// <returns></returns>
public bool ExistsRegedit()
{
RegistryKey rk = Registry.CurrentUser;
RegistryKey softWare = rk.OpenSubKey("Software");
RegistryKey microsoft = softWare.OpenSubKey("Microsoft");
RegistryKey windows = microsoft.OpenSubKey("Windows");
RegistryKey current = windows.OpenSubKey("CurrentVersion");
RegistryKey explorer = current.OpenSubKey("Explorer");
RegistryKey shell = explorer.OpenSubKey(@"Shell Folders");
if (shell.SubKeyCount != 0)
{
RegistryKey swort = shell.OpenSubKey("swort");
foreach (string b in swort.GetValueNames())
{
if (b == "swort")
{
Response.Write("存在这个键!");
return true;
}
}
Response.Write("不存在这个键!");
return false;
}
else
{ Response.Write("不存在这个键!");
return false;
}
}
}
-
资料引用:http://www.knowsky.com/441136.html --------------------编程问答-------------------- study --------------------编程问答-------------------- 终于知道有这个东西了 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 我以前做法是读取硬盘号,然后进行加密,得到一个新的字符串,每次判断这个字符串是否与保存在机器某一位置的字符串相匹配,是,则是注册产品,否则是试用版,然后写入每次登录的次数,超30次,退出,无法使用 --------------------编程问答-------------------- 学习了一会试试 --------------------编程问答-------------------- 可以用setting! --------------------编程问答--------------------
代码能看看否? --------------------编程问答-------------------- mark --------------------编程问答-------------------- 6楼所指的保存在机器某一位置的字符串是什么意思哦???? --------------------编程问答-------------------- 我觉得写哪里不重要,重要的是:
CPU或者磁盘信息
有可能不固定,有可能有的机器无法读取,有可能有的会重复。
http://topic.csdn.net/u/20120724/09/0902d09a-0092-46a4-b957-7e8d570afb8f.html --------------------编程问答-------------------- 可以试试读取电脑的MAC地址,因为每台电脑的MAC地址是不一样的~http://wenwen.soso.com/z/q73282304.htm?w=%BB%F1%C8%A1mac%B5%D8%D6%B7&spi=1&sr=6&w8=%E8%8E%B7%E5%8F%96mac%E5%9C%B0%E5%9D%80&qf=20&rn=92926&qs=4 仅供参考 --------------------编程问答-------------------- 代码 好长啊 !新手求指教 --------------------编程问答-------------------- 学习了,谢各位! --------------------编程问答-------------------- --------------------编程问答-------------------- 建议使用加密狗,网卡MAC地址和硬盘ID可以修改。如果是多核CPU,每次运行程序都会导致取得的CPUID不一样,具体看哪个核心处理。USB接口的加密狗估计10元左右。成本算可以接受的。 --------------------编程问答-------------------- 读取硬盘的物理序列号,不是逻辑的,逻辑的重装系统后就会改变的,最好是C盘的。 --------------------编程问答-------------------- cpuid macid 硬盘id md5算法 然后弄一个字符串 在用一些算法弄注册码
存神马地方不是问题 问题是算法
不过c#写的东西 没神马加密可言 都可以破解的 --------------------编程问答-------------------- 网上有很多加壳的软件啊 --------------------编程问答-------------------- 要么用加密狗,要么绑定硬件的识别ID... --------------------编程问答-------------------- winform一般离不开服务器,把服务器端管好就行了。因为主要的逻辑都在服务端。客户端代码加密没什么意义。你就把它当成网页上的js脚本好了,人家要破解要看让他看去。
客户端登录的时候,发送自己唯一的key给服务端比对。如果是第一次登录,服务端保存这个key.如果不是,则将第一次保存的key和客户端发来的key比较相等。不等则T出去。流程很简单。 --------------------编程问答-------------------- 楼主不要把加密想的太复杂,首先了解你机密的目的是什么?是为了收尾款?是为了防止复制?还是为了防止同行的破解?
如果是为了收尾款,就可以使用简单的加密方式,读取mac地址或硬盘序列号来进行加密.
如果防止复制,你可以前期写些bug,如果真有人愿意反编译之后重写你的文件,那证明你的软件价值很大,就好比微软,本来打击盗版很容易,可他总是那么矜持.
如果为了防止同行破解,他有能力破解你的软件,那他也有能力做好一个软件,那么多大型游戏都遭破解,意思意思就行了,走走过场,你要知道一个安全工程师比普通软件工程师要贵多了.
最后给一点建议:自己的软件有更多人使用,对程序员来说是骄傲的. --------------------编程问答-------------------- 网上下个壳 可以加密也可以不让人反编你的代码。
是不是太棒了。
这样的工具很。看雪里有。
补充:.NET技术 , C#