标签:
状态不好跑到服务器上update了一下,竟然没有写条件,结果发现这个库没有备份。。。然后悲剧发生了!!
因为是SQL2008,好多软件都不支持,最后找到 ApexSql Log ,非常好用,但是试用版除了14天限制外还限制了脚本导出,只能一条条导出么。。。汗,虽然几百条数据,但也够折腾的。。
就研究了下,取除了这个试用版导出条数的限制,看了下算法写注册机也比较简单,但是懒的写了,反正这东西基本上就用一次,几百刀买个正版当然不可能,我想着还有别人也可能用得到,就放上来。
版本是 2014.04.1133 目前官网最新版本。
http://pan.baidu.com/s/1c0BHafQ
注册程序的部分代码:
public static bool Manually(ActivationManager manager, string productKey, string activationCode) { bool flag; manager.WriteActivationInformation(new ActivationResponse(FileHelper.Unzip(activationCode.FromBase64String())).Serialize()); if (!(flag = manager.ActivationCodeIsValid || (manager.State == ActivationState.ExtendedEvaluation))) { string_1 = string.Format("Invalid activation code [{0}]", activationCode); return flag; } string_1 = "OK"; return flag; }
private void AnalyzeServerResponse(string serverResponse) { XmlDocument document = new XmlDocument(); document.LoadXml(serverResponse); XmlElement documentElement = document.DocumentElement; if ((documentElement != null) && ("ResponseInfo" == documentElement.Name)) { foreach (XmlNode node in documentElement.ChildNodes) { if ("ProductId" == node.Name) { this.ProductId = node.InnerText; } else if ("UnlockCode" == node.Name) { this.UnlockCode = node.InnerText; } else if ("HardwareId" == node.Name) { this.HardwareId = node.InnerText; } else if ("ActivationCode" == node.Name) { this.ActivationCode = node.InnerXml; if (node.FirstChild != null) { foreach (XmlNode node2 in node.FirstChild.ChildNodes) { if ("version" == node2.Name) { this.Version = node2.InnerText; } else if ("reginfo" == node2.Name) { this.RegistrationInfo = node2.InnerText; } else if ("licenseNum" == node2.Name) { this.LicenceNumber = node2.InnerText; } else if ("trialExpiry" == node2.Name) { this.TrialExpire = node2.InnerText; } else if ("licenseExpiry" == node2.Name) { this.LicenceExpire = node2.InnerText; } else if ("signature" == node2.Name) { this.Signature = node2.InnerText; } else if ("activationKey" == node2.Name) { this.ProductKey = node2.InnerText; } } } } else if ("ReasonCode" == node.Name) { this.ReasonCode = node.InnerText; } else if ("Reason" == node.Name) { this.Reason = node.InnerText; } else if ("Reactivation" == node.Name) { this.Reactivation = node.InnerText; } else if ("Explanation" == node.Name) { this.Explanation = node.InnerText; } else if ("Resolution" == node.Name) { this.Resolution = node.InnerText; } } } }
public virtual void WriteActivationInformation(string activationData) { LicenceManager manager = new LicenceManager(this.apexSQLProducts_0, this.string_1); ActivationResponse response = ActivationResponse.Deserialize(activationData); this.activationInfo_0.HardwareID = response.HardwareId; this.activationInfo_0.Version = int.Parse(response.Version); this.activationInfo_0.NumberOfLicenses = int.Parse(response.LicenceNumber); this.activationInfo_0.RegistrationInformation = response.RegistrationInfo; this.activationInfo_0.ProductKey = response.ProductKey; this.activationInfo_0.TrialExpiryDate = DateTime.ParseExact(response.TrialExpire, "MM-dd-yyyy", CultureInfo.InvariantCulture); this.activationInfo_0.LicenseSubscriptionExpiryDate = DateTime.ParseExact(response.LicenceExpire, "MM-dd-yyyy", CultureInfo.InvariantCulture); this.activationInfo_0.Signature = response.Signature; if (!manager.SaveLicenceFile(this.activationInfo_0)) { throw new Exception("Unable to save license file."); } this.Refresh(); }
看起来还是蛮简单的,只要对XML字符串进行ZIP算法压缩(程序中有)再进行base64,然后在验证方法直接返回TRUE基本上就OK了。
当然这样比较暴力,不符合俺一向认真负责的态度~~~但是不暴力的话就得更改下publickey……
然后。。就没有然后了,如果以后有时间,还可以再研究一下。
ApexSql Log试用版取消导出脚本每10行导出一行的限制。
标签:
原文地址:http://www.cnblogs.com/gsyifan/p/ApexSql_Log_unpack.html