前几天在博客园上发布了第一个破解作品,然后有人要求我再破解一下SQL Prompt3,他其实不知道我在这方面菜得很…呵呵…没办法,既然人家开口了,我也只能硬着头皮看一看咯…首先安装好Red Gate全系列工具,进入SQL Prompt 3文件夹里面找到RedGate.Licensing.Client.dll,用Reflector打开一看,囧…果然没那么简单,被混淆了一下…这么多类,肯定不能一个个看,所以我赶紧打开软件的注册窗口,看看有没有什么切入点。
这是激活窗口,既然invoice特别强调了一下,我就从它开始,嘿嘿。输入Reflector一找,果然找到了一个叫P的类,这个类明显就是上面那个窗口,接着在这里很容易就找到了Activate按钮的方法,代码如下
private void b(object obj1, EventArgs)
{ string str = ((TextBox) obj1).Text.ToUpper().Trim(); bool fEnable = o.b(str); this.a.Visible = fEnable; this.a((V.a) 2, fEnable, true);
if (fEnable) { this.a.a.SerialNumber = str; }
}
这里非常明显o.b(str)这个方法就是验证序列号正确性的,赶紧跟进去找到这么一段代码
internal static bool c(string text1)
{ text1 = text1.ToUpper().Trim();
Regex regex = new Regex(@"^[A-Z]{2}-[0-9A-Z]{1}-[0-9A-Z]{1}-\d{5}-[0-9A-F]{4}$");
Regex regex2 = new Regex(@"^\d{3}-\d{3}-\d{6}-[0-9A-F]{4}$");
if (regex.IsMatch(text1)) { string str = text1.Substring(0, 12); string str2 = string.Format("{0:X4}", W.a(str));
if (!text1.EndsWith(str2)) { return false;
}
}
else if (regex2.IsMatch(text1))
{ string str3 = text1.Substring(0, 14); string str4 = string.Format("{0:X4}", W.a(str3));
if (!text1.EndsWith(str4)) { return false;
}
}
else { return false;
}
return true;
}
真是得来全不费功夫,竟然用正则来验证,这岂不是比ReSharper 4.0更容易破解?我心里暗爽了一把…
赶紧按照正则规则算出了一个合适的激活码,迫不及待地输进去…结果出现…Red Gate…我恨你…
原来一切都是幻觉…没办法…只好另找突破点…从提示来看,似乎每个真正序列号都在服务器有注册…这岂不是跟Windows的激活差不多了?难道要我一个个试?这明显不可能呀…
(To be continued)