// Fields
private long _clientCount;
private bool _foundMac;
private string _mac;
private ArrayList _macArray;
private long _startTicks;
private long _ticks;
private long _userIndex;
private string _username;
}
继续,刚才找了CreateLicense,现在开始找ValidateLicenseData。
protected virtual bool ValidateLicenseData(Type type, string licenseData)
{
bool flag1 = false;
char[] chArray1 = new char[1] { ':' } ;
string[] textArray1 = licenseData.Split(chArray1);
if (textArray1.Length == 7)
{
return (string.Compare("URTracker1Licensed", textArray1[0], true, CultureInfo.InvariantCulture) == 0);
}
return flag1;
}
哈哈,就是说刚才分析那个数组中textArray1[0],必须是URTracker1Licensed!哈哈,这也进一步证实了我们要把注册信息字符串用":"分开的设想。
Come on!离成功越来越近了!接着分析ValidateLicense。
protected virtual bool ValidateLicense(ServerLicense license, out string errorMessage)
{
errorMessage = null;
URTrackerLicense license1 = (URTrackerLicense) license;
if (license1.IsExpired)
{
errorMessage = "The License has expired.";
return false;
}
return true;
}
哦,知道了!原来是判断URTrackerLicense的属性IsExpired的真假!好,咱们看看属性IsExpired。
public bool IsExpired
{
get
{
if ((DateTime.Today.Ticks <= this._ticks) && (DateTime.Now.Ticks >= this._startTicks))
{
return !this._foundMac;
}
return true;
}
}
知道了吧!就是判断当前时间要在ticks和startTicks之间!然后再判断Mac的值。
现在查找Mac的相关类或者方法。找到了GetMacArray
public static ArrayList GetMacArray()
{
ManagementClass class1 = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection collection1 = class1.GetInstances();
ArrayList list1 = new ArrayList();
using (ManagementObjectCollection.ManagementObjectEnumerator enumerator1 = collection1.GetEnumerator())
{
while (enumerator1.MoveNext())
{
ManagementObject obj1 = enumerator1.get_Current();
if ((bool) obj1.get_Item("IPEnabled"))
{
list1.Add(obj1.get_Item("MacAddress").ToString().Replace(":", "").ToUpper());
}
obj1.Dispose();
}
}
return list1;
}
咱们从这里可以猜测的出,获得的Mac应该是去掉":" 如:01:AB:9E:6T:AB:9E:6T (注意了,是要大写的!)