1. 先贴效果图
2. 原理与功能
2.1 原理非常简单,从http://www.nod321.com/抓取最新的用户名和密码,然后更新到注册表中。
2.2 启动进入界面,直接点击"立即更新"按钮就行了,本版没有加入判断是否已经联网,所以需要你先确定自己是否能够上网!如果连续点击立即更新的话,会按上面网页中出现的升级ID从上到下依次设置为当前升级ID。
3. 部分代码
3.1 异步分析下载
/// 异步更新
/// </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>
/// <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 安装程序
NodFixSetup.rar 解压安装即可。
4.2 可直接运行的EXE文件,需要Framework 2.0
4.3 源代码
5. 注意
由于http://www.nod321.com/更新升级ID稍慢导致ID无效,需要你重复点击"立即更新"来尝试其他的升级ID,如果本程序更新的ID都无法使用,也代表上面这个网站的升级ID无法使用!比如2009-5-15更新的升级ID中只有最后一组可以使用!
后期维护
1. 2009-7-20
修正两个BUG,分别是密码为空是更新出错和匹配用户名密码没考虑Username和Password这种情况,更新exe下载,替换NodFix.exe就行:
NodFix2009-7-20.rar
2. 2009-8-3
紧急修正分析结果未加Tirm()的BUG,同上,替换NodFix.exe就行:
NodFix2009-8-3.rar
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年,能承受得起这个费用了,支持正版!本文源代码要是觉得有价值可以下载学习一下,主要是操作注册表。