天天看點

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,如需轉載請自行聯系原作者