Listary激活~
# Listary激活## 第一阶段:打开软件dnSpy
1.使用dnSpy继续反编译,下载地址自行百度。。。。
## 第二阶段:将 EXE 文件拖入 dnSpy
2. 打开Listary的安装目录,将Listary.EXE 文件直接拖拽到 dnSpy 窗口中。
## 第三阶段:找到 Listary.Core.Pro
3. 在 dnSpy 窗口中,导航到 `Listary.Core.Pro` 类。
## 第四阶段:找到 LicenseChecker 类,定位到 CheckLicense 函数
4. 找到 `LicenseChecker` 类,并且定位到 `CheckLicense` 函数。
`CheckLicense` 函数是验证许可证的核心函数,通常会调用其他函数并最终返回一个 `bool` 值。在这个函数内,我们的目标是将返回值直接设为 `true`,以跳过验证。
## 第五阶段:编辑类,修改返回值
5. 对着右侧的 `LicenseChecker` 类,右键点击并选择“编辑类”。
在弹出的编辑窗口中,将 `CheckLicense` 函数中的返回值改为 `true`,并删除其他无关代码。修改完成后,点击“编译”按钮。
## 第六阶段:保存代码并替换 EXE 文件
6. 修改完成后,保存代码,并将修改后的代码重新打包到原始 EXE 文件中。
## 第七阶段:完成
7. 操作完成,over~
公开一下Hook的函数, 可以参考一下 本帖最后由 Vvvvvoid 于 2025-4-7 14:01 编辑
有一个定时校验的 task 也需要处理
## patch 2
// Listary.Core.Pro.ProService
// Token: 0x06000CB1 RID: 3249 RVA: 0x000307B4 File Offset: 0x0002E9B4
public Task ScheduleAutoCheck()
{
} 本帖最后由 何西烛 于 2025-4-7 20:14 编辑
Vvvvvoid 发表于 2025-4-6 22:26
有一个定时校验的 task 也需要处理
## patch 2
这里要用修改IL指令?
过一会这个玩意就出来了 感谢分享 本帖最后由 Patches 于 2025-4-16 23:26 编辑
我用的6.2.0.42版本,貌似这个旧版本是最后能直接计算注册码的版本了.
补充一下,楼主的教程最好使用IL指令修改,编辑类有的编译时会提示错误.
// Listary.Core.Pro.LicenseChecker
// Token: 0x06000CA4 RID: 3236 RVA: 0x00030610 File Offset: 0x0002E810
public static bool CheckLicense(string email, string license)
{
return true;
}
// Token: 0x06000CB1 RID: 3249 RVA: 0x00030600 File Offset: 0x0002E800
public async Task ScheduleAutoCheck()
{
TaskAwaiter taskAwaiter = Task.Delay(TimeSpan.FromMinutes((double)15f)).GetAwaiter();
if (!taskAwaiter.IsCompleted)
{
await taskAwaiter;
TaskAwaiter taskAwaiter2;
taskAwaiter = taskAwaiter2;
taskAwaiter2 = default(TaskAwaiter);
}
taskAwaiter.GetResult();
if (this.\uE001())
{
TaskAwaiter<ProService.ActivationResult> taskAwaiter3 = this.\uE002(this.\uE001.Listary5LicenseEmail, this.\uE001.Listary5LicenseKey).GetAwaiter();
if (!taskAwaiter3.IsCompleted)
{
await taskAwaiter3;
TaskAwaiter<ProService.ActivationResult> taskAwaiter4;
taskAwaiter3 = taskAwaiter4;
taskAwaiter4 = default(TaskAwaiter<ProService.ActivationResult>);
}
ProService.ActivationResult result = taskAwaiter3.GetResult();
if (result == ProService.ActivationResult.Success)
{
}
if (result == ProService.ActivationResult.InvalidLicense || result == ProService.ActivationResult.NoActivationsLeft)
{
if (this.\uE001.LastProCheckFailDate == DateTime.MinValue)
{
}
if (DateTime.Now - this.\uE001.LastProCheckFailDate > TimeSpan.FromDays(7.0))
{
this.\uE001.Listary5LicenseName = null;
this.\uE001.Listary5LicenseEmail = null;
this.\uE001.Listary5LicenseKey = null;
ProPageType proPageType = ((result == ProService.ActivationResult.InvalidLicense) ? ProPageType.InvalidLicense : ProPageType.DeviceLimitExceeded);
this.\uE002.Show(proPageType, \uE190.\uE070(7732));
}
}
}
} 这个不错,已经搞定了, 感谢分享!学习了! 应该没有这么简单,如此处理了,可能功能仍无法使用。 已成功,非常感谢楼主!学习了! 感谢分享!!! 这个软件暗桩太多了!想剥干净很难! 感谢分享 学习了