最近需要用到DAEMON Tools Ultra,找不到破解。发现主程序是.NET后且无混淆就想试试自己破解(我是小白,啥壳都不会)
但是很快发现主要验证逻辑都在engine.dll中
这种调用方式没见过,而且我也不大懂汇编。于是我想着搜索这个方法的所有调用修改返回值
但是有部分代码保存时报Error calculating max stack value
我看了好久没明白哪里有问题,ILSpy和dnSpy都能反编译这段IL,但是就是保存报错,使用KeepOldMaxStack保存运行闪退
现在求助哪里有问题,或者对engine.dll破解给点思路或教程
以下是一段问题IL:
[IL] 纯文本查看 复制代码 .method public hidebysig specialname rtspecialname
instance void .ctor () cil managed
{
.maxstack 3
.locals init (
[0] valuetype EngineLib.TCheckingResultInfo,
[1] class DotNetCommon.License.LicenseInfo
)
IL_0000: ldarg.0
IL_0001: call instance void [DiscSoft.NET.Common]DiscSoft.NET.Common.View.SecondaryWindows.Base.BaseSecondaryWindow::.ctor()
IL_0006: ldarg.0
IL_0007: call class [PresentationFramework]System.Windows.Application [PresentationFramework]System.Windows.Application::get_Current()
IL_000C: callvirt instance class [PresentationFramework]System.Windows.Window [PresentationFramework]System.Windows.Application::get_MainWindow()
IL_0011: call instance void [PresentationFramework]System.Windows.Window::set_Owner(class [PresentationFramework]System.Windows.Window)
IL_0016: ldarg.0
IL_0017: call instance void DotNetCommon.View.SecondaryWindows.AboutWindow::InitializeComponent()
IL_001C: call class EngineLib.IDaemonProEngine DotNetCommon.Utils.EngineHelper::get_DaemonEngine()
IL_0021: ldc.i4.2
IL_0022: ldloca.s V_0
IL_0024: callvirt instance void EngineLib.IDaemonProEngine::CheckActivation(valuetype EngineLib.TCheckType, valuetype EngineLib.TCheckingResultInfo&)
IL_0029: ldloca.s V_0
IL_002B: ldc.i4.1
IL_002C: stfld int32 EngineLib.TCheckingResultInfo::IsSuccessResult
IL_0031: ldloca.s V_0
IL_0033: ldc.i4.0
IL_0034: stfld valuetype EngineLib.TLicenseCheckingResult EngineLib.TCheckingResultInfo::Result
IL_0039: ldloca.s V_0
IL_003B: ldc.i4.3
IL_003C: stfld valuetype EngineLib.TLicenseType EngineLib.TCheckingResultInfo::LicenseType
IL_0041: ldloca.s V_0
IL_0043: ldc.i4.1
IL_0044: stfld valuetype EngineLib.TSubscriptionType EngineLib.TCheckingResultInfo::Subscription
IL_0049: ldloca.s V_0
IL_004B: ldc.i4 2147483647
IL_0050: stfld int32 EngineLib.TCheckingResultInfo::TrialDaysLeft
IL_0055: ldloca.s V_0
IL_0057: ldc.i4.1
IL_0058: stfld int32 EngineLib.TCheckingResultInfo::IsInstanceActivated
IL_005D: ldloca.s V_0
IL_005F: ldc.i4.1
IL_0060: stfld int32 EngineLib.TCheckingResultInfo::IsEmailConfirmed
IL_0065: newobj instance void DotNetCommon.License.LicenseInfo::.ctor()
IL_006A: stloc.1
IL_006B: ldloc.1
IL_006C: ldloc.0
IL_006D: callvirt instance void DotNetCommon.License.LicenseInfo::GetLicenseInfo(valuetype EngineLib.TCheckingResultInfo)
IL_0072: ldarg.0
IL_0073: ldloc.1
IL_0074: newobj instance void DotNetCommon.License.LicensePage::.ctor(class DotNetCommon.License.LicenseInfo)
IL_0079: call instance void [PresentationFramework]System.Windows.FrameworkElement::set_DataContext(object)
IL_007E: ret
|