当前位置:编程学习 > C#/ASP.NET >>

如何为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! --------------------编程问答--------------------
引用 6 楼 liujiayu10 的回复:
我以前做法是读取硬盘号,然后进行加密,得到一个新的字符串,每次判断这个字符串是否与保存在机器某一位置的字符串相匹配,是,则是注册产品,否则是试用版,然后写入每次登录的次数,超30次,退出,无法使用


代码能看看否? --------------------编程问答-------------------- 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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,