天天看点

NOD32升级账号更新器 [ C# | NOD32 | Eset ]

正文

  1.  先贴效果图

                

      2.      原理与功能

      3.  部分代码

            3.1      异步分析下载

        /// <summary>

        /// 异步更新

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnUpdating_Click(object sender, EventArgs e)

        {

            AppendMessage("开始连接

NOD32升级账号更新器 [ C# | NOD32 | Eset ]
NOD32升级账号更新器 [ C# | NOD32 | Eset ]

\r\n", Color.Blue);

            using (WebClient wClient = new WebClient())

            {

                AutoResetEvent waiter = new AutoResetEvent(false);

                wClient.Credentials = CredentialCache.DefaultCredentials;

                wClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(AsyncURIAnalyze);

                wClient.DownloadDataAsync(new Uri(URL_USER), waiter);

                //waiter.WaitOne();     //阻止当前线程,直到收到信号

            }

        }

        /// 异步分析

        protected void AsyncURIAnalyze(Object sender, DownloadDataCompletedEventArgs e)

            //消息

            AppendMessage("已连接,正在分析

NOD32升级账号更新器 [ C# | NOD32 | Eset ]
NOD32升级账号更新器 [ C# | NOD32 | Eset ]

            //获取数据

            string pageData = Encoding.UTF8.GetString(e.Result);

            MatchCollection matchs = Regex.Matches(pageData, REGULAR_USER, RegexOptions.IgnoreCase);

            foreach (Match match in matchs)

                string[] values = match.Value.Replace("<br/>", "@").Split('@');

                string username = values[0].Replace("UserName:", string.Empty).Trim();

                string password = values[1].Replace("PassWord:", string.Empty).Trim();

                if (!users.Contains(username))

                {

                    users.Add(username);

                    Regedit(username,password);

                    break;

                }

              3.2      Nod32的密码加密与解密

        /// 解密

        /// <param name="buf"></param>

        /// <returns></returns>

        private string byte2str(byte[] buf)

            StringBuilder pwd = new StringBuilder();

            if (buf != null)

                for (int i = 0, j = mask.Length; i < j; i += 2)

                    pwd.Append((char)(buf[i] ^ mask[i]));

            return pwd.ToString();

        /// 加密

        /// <param name="str"></param>

        private byte[] str2byte(string str)

            byte[] buf = Encoding.ASCII.GetBytes(str);

            byte[] result = new byte[buf.Length * 2];

                for (int i = 0, j = 0; i < mask.Length; i++, j++)

                    result[i] = (byte)(buf[j] ^ mask[i]);

                    result[++i] = mask[i];

            return result;

      4.  下载

            4.1  安装程序

            4.2  可直接运行的EXE文件,需要Framework 2.0

            4.3  源代码

      5.      注意

后期维护

      1.      2009-7-20

            修正两个BUG,分别是密码为空是更新出错和匹配用户名密码没考虑Username和Password这种情况,更新exe下载,替换NodFix.exe就行:

      2.      2009-8-3

            紧急修正分析结果未加Tirm()的BUG,同上,替换NodFix.exe就行:

  3.  2009-9-4

    由于nod321.com网站被关闭,在本软件失效之际找到另外一个提供免费升级ID的网站:nod320.org,小有改动代码,请下载替换NodFix.exe:

  4.  2009-9-20

    nod320.org改了匹配的用户名 - -#,请替换NodFix.exe,也附加本次的源代码,自己用闲工夫的人把这个程序改成一个字典形式的吧,我懒 - - #。

  5.  2011-3-25

已经购买正版360版ESET NOD32,40元一年。上班已经4年,能承受得起这个费用了,支持正版!本文源代码要是觉得有价值可以下载学习一下,主要是操作注册表。

本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/584869,如需转载请自行联系原作者