Red Gate的系列產品真是相當出色,從ANTS Profiler到現在正在用得不易樂乎的SQL Toolbelt工具集都是開發者手中不可多得的利器,但近日工作繁忙,都沒有什麼時間研究它,但眼看試用期即將過去,一時間又提不出不能讓公司購買的理由,所以只好先延長它的試用期吧,只是暫時延長作研究,大家不要做非法用途哦 ^_^
到網上查了一些大大的文章,很多早期的方法是修改RedGate.Licensing.Client.dll中的get_Activated()方法來達到,但經過部分大大的試驗有些組件用這個方法會導致某些功能缺損,所以只可以用比較迂迴的方法,直接改試用期的期限。
方法是修改兩個屬性,DaysLeftInTrial和TrialStatus,主要是讓DaysLeftInTrial的返回值永遠大於0。
1.DaysLeftInTrial
修改後的代碼:
對應的IL:
.method public hidebysig specialname instance int32 get_DaysLeftInTrial() cil managed { // 代碼大小 95 (0x5f) .maxstack 12 .locals init (int32 V_0, valuetype [mscorlib]System.TimeSpan V_1, valuetype [mscorlib]System.DateTime V_2, valuetype [mscorlib]System.TimeSpan V_3) IL_0000: ldarg.0 IL_0001: call instance valuetype RedGate.Licensing.Client.TrialStatus RedGate.Licensing.Client.Licence::get_TrialStatus() IL_0006: ldc.i4.1 IL_0007: beq.s IL_000b IL_0009: ldc.i4.0 IL_000a: ret IL_000b: ldarg.0 IL_000c: ldfld valuetype [mscorlib]System.DateTime RedGate.Licensing.Client.Licence::d IL_0011: ldsfld valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::MinValue IL_0016: call bool [mscorlib]System.DateTime::op_Equality(valuetype [mscorlib]System.DateTime, valuetype [mscorlib]System.DateTime) IL_001b: brfalse.s IL_003e IL_001d: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_UtcNow() IL_0022: stloc.2 IL_0023: ldloca.s V_2 IL_0025: ldarg.0 IL_0026: ldfld valuetype [mscorlib]System.DateTime RedGate.Licensing.Client.Licence::b IL_002b: call instance valuetype [mscorlib]System.TimeSpan [mscorlib]System.DateTime::Subtract(valuetype [mscorlib]System.DateTime) IL_0030: stloc.1 IL_0031: ldc.i4.s 14 IL_0033: ldloca.s V_1 IL_0035: call instance int32 [mscorlib]System.TimeSpan::get_Days() IL_003a: sub IL_003b: stloc.0 IL_003c: br.s IL_0057 IL_003e: ldarg.0 IL_003f: ldflda valuetype [mscorlib]System.DateTime RedGate.Licensing.Client.Licence::d IL_0044: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_UtcNow() IL_0049: call instance valuetype [mscorlib]System.TimeSpan [mscorlib]System.DateTime::Subtract(valuetype [mscorlib]System.DateTime) IL_004e: stloc.3 IL_004f: ldloca.s V_3 IL_0051: call instance int32 [mscorlib]System.TimeSpan::get_Days() IL_0056: stloc.0 IL_0057: ldloc.0 IL_0058: ldc.i4 0x457 IL_0059: bge.s IL_005d IL_005b: ldc.i4.8 IL_005c: stloc.0 IL_005d: ldloc.0 IL_005e: ret } // end of method Licence::get_DaysLeftInTrial
2.TrialStatus
修改後的代碼:
對應的IL:
.method public hidebysig specialname instance valuetype RedGate.Licensing.Client.TrialStatus get_TrialStatus() cil managed { // 代碼大小 6 (0x6) .maxstack 1 .locals (valuetype RedGate.Licensing.Client.TrialStatus V_0) IL_0000: ldc.i4.1 IL_0001: stloc.0 IL_0002: br.s IL_0004 IL_0004: ldloc.0 IL_0005: ret } // end of method Licence::get_TrialStat
修改完成後記得去掉強命名哦 ^_^
運行腳本如:
path C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin
sn -Vr RedGate.Licensing.Client.dll
看,這樣就可以延長使用時間來做研究了,再次申明不要用於非法用途哦 o(∩_∩)o