正当我郁闷的时候,忽然想起如果连不上网呢?不可能不能激活吧。赶紧断网再试,果然出了网上激活还提供了一个本地激活的方法,看起来像是要通过序列号去官网申请一个License文件,我当然不可能去申请一个,不过既然可以用文件激活就代表破解还是有希望的…
把提示中的<activationrequest>放到Reflector里面继续找,顺着引用可以找到
internal static string a(string text1, string text2, Product product1)
{ //此处省略... string str = a(text1, Guid.NewGuid().ToString(), text2, product1); if (!o.a(IntPtr.Zero, activation, str, out str3, out str2))
//此处省略... }
从o.a开始一直往里找可以找到
public bool ActivateLicence(string activationRequest, out string activationResponse, out string errorMessage)
{ object[] objArray = base.Invoke("ActivateLicence", new object[] { activationRequest });
activationResponse = (string) objArray[1]; errorMessage = (string) objArray[2]; return (bool) objArray[0];
}
由于之前用minisniffer抓了几个包,所以这里很容易知道activationResponse里面的XML片断就是关键了。接着继续在dll文件里面翻,在
private static bool a(XmlNode node1, ref a aRef1)
这个函数里面发现了整个激活过程最重要的部分,分析之后可以得到如下信息:
- 1.activationResponse的结构
- 2.加密方法(1024位的RSA加密,这是不可能像ReSharper那样破解了)
- 3.可以用一个License激活一系列Red Gate的软件,也就是以一个软件包的形式激活
- 既然RSA无法破解当然只能绕过去了,不过还好,只需要改一个License.dll文件,然后一次性激活所有软件就行了。
if (!provider.VerifyData(bytes, new SHA1Managed(), buffer))
{aRef1.c = ClientResources.ba();
return false;
}
这个函数就是验证RSA签名的,用IL Disassembler把dll文件解开然后把VerifyData前面的!去掉,再伪造一个activationResponse的片断,呵呵,大功告成咯…
后记,搞完才发现,原来有些License.dll并没有混淆,我靠…