1. 先贴效果图
2. 原理与功能
2.1 原理非常简单,从抓取最新的用户名和密码,然后更新到注册表中。
2.2 启动进入界面,直接点击"立即更新"按钮就行了,本版没有加入判断是否已经联网,所以需要你先确定自己是否能够上网!如果连续点击立即更新的话,会按网页中出现的升级ID从上到下依次设置为当前升级ID。
3. 部分代码
3.1 异步分析下载
/// <summary> /// 异步更新 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUpdating_Click( object sender, EventArgs e) { AppendMessage( " 开始连接\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(); // 阻止当前线程,直到收到信号 } } /// <summary> /// 异步分析 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void AsyncURIAnalyze(Object sender, DownloadDataCompletedEventArgs e) { // 消息 AppendMessage( " 已连接,正在分析\r\n " , Color.Blue); // 获取数据 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的密码加密与解密
/// <summary> /// 解密 /// </summary> /// <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(); } /// <summary> /// 加密 /// </summary> /// <param name="str"></param> /// <returns></returns> private byte [] str2byte( string str) { byte [] buf = Encoding.ASCII.GetBytes(str); byte [] result = new byte [buf.Length * 2 ]; if (buf != null ) { 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. 注意
由于更新升级ID稍慢导致ID无效,需要你重复点击"立即更新"来尝试其他的升级ID,如果本程序更新的ID都无法使用,也代表上面这个网站的升级ID无法使用!比如2009-5-15更新的升级ID中只有最后一组可以使用!
后期维护
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,也附加本次的源代码,自己用闲工夫的人把这个程序改成一个字典形式的吧,我懒 - - #。
EXE:
SRC:
5. 2011-3-25
已经购买正版360版ESET NOD32,40元一年。上班已经4年,能承受得起这个费用了,支持正版!本文源代码要是觉得有价值可以下载学习一下,主要是操作注册表。
本文转自博客园农民伯伯的博客,原文链接: ,如需转载请自行联系原博主。