513 字
3 分鐘
💉 Listary Pro逆向教程
Cover image for 💉 Listary Pro逆向教程

#工具準備

  • Listary v6.3.2.88
    官網下載地址
    下載後正常安裝,例如安裝到 D:\Program Files\Listary

  • dnSpy v6.1.8
    下載地址
    下載 dnSpy-net-win64.zip,解壓到任意目錄

  • de4dot v3.2.0.0
    下載地址
    下載 de4dot-net8.0-winx64.zip,解壓到任意目錄


#反混淆

  1. 將安裝目錄下的 D:\Program Files\Listary\Listary.exe 拖到 de4dot.exe
  2. 安裝目錄下會生成 Listary-cleaned.exe
  3. 重命名文件:
    • Listary.exeListary0.exe
    • Listary-cleaned.exeListary.exe

#修改代碼

  1. 打開 dnSpy.exe,將新的 Listary.exe 拖入程式集資源管理器

  2. 修改 Listary.Core.Pro/LicenseChecker

    • 右鍵 CheckLicense 方法,選擇“編輯方法”
    • 替換方法內容,點擊右下角“編譯” 修改代碼
    public static bool CheckLicense(string email, string license)
    {
    // 替換掉原有的,直接返回true
    return true;
    }
  3. 修改 Listary.Core.Pro/LicenseProPageViewModel

    • 右鍵 CheckLicense() 方法,選擇“編輯方法”
    • 刪除第15行,點擊右下角“編譯”
    private void CheckLicense()
    {
    // 刪除下面這行
    this.dt();
    }
  4. 修改 Listary.Core.Pro/ProService(共五處)

    • 右鍵 ProService,選擇“編輯類”
    • 修改1:刪除指定的兩行
    public bool IsPro
    {
    [CompilerGenerated]
    get
    {
    return this.bool_0;
    }
    [CompilerGenerated]
    private set
    {
    if (this.bool_0 == value)
    {
    return;
    }
    this.bool_0 = value;
    this.<>OnPropertyChanged(Class373.LicenseEmail);
    this.<>OnPropertyChanged(Class373.IsPro);
    }
    }
  • 修改2:跳到210行附近,刪除指定內容,如圖刪除211-221行內容

    圖片

  • 修改3:將 ActivateNewLicensemethod_2 函數內容改為return Task.FromResult(new ProService.ActivationResult());

    以下為單個示例:

    // Token: 0x06001177 RID: 4471 RVA: 0x0003A6D0 File Offset: 0x000388D0
    public Task<ProService.ActivationResult> ActivateNewLicense(string email, string licenseKey)
    {
    ProService.Struct84 @struct;
    @struct.asyncTaskMethodBuilder_0 = AsyncTaskMethodBuilder<ProService.-
    ActivationResult>.Create();
    @struct.proService_0 = this;
    @struct.string_0 = email;
    @struct.string_1 = licenseKey;
    @struct.int_0 = -1;
    @struct.asyncTaskMethodBuilder_0.Start<ProService.Struct84>(ref @struct);
    return @struct.asyncTaskMethodBuilder_0.Task;
    return Task.FromResult(new ProService.ActivationResult());
    }
  • 修改4:將 DeactivateLicenseScheduleAutoCheckDebugTestActivateLicensemethod_3 函數內容改為 return Task.CompletedTask;

    // Token: 0x06001178 RID: 4472 RVA: 0x0003A724 File Offset: 0x00038924
    public Task DeactivateLicense()
    {
    ProService.Struct85 @struct;
    @struct.asyncTaskMethodBuilder_0 = AsyncTaskMethodBuilder.Create();
    @struct.proService_0 = this;
    @struct.int_0 = -1;
    @struct.asyncTaskMethodBuilder_0.Start<ProService.Struct85>(ref @struct);
    return @struct.asyncTaskMethodBuilder_0.Task;
    return Task.CompletedTask;
    }
  • 修改5:修改完上述函數後,可能會遇到編譯報錯的情況。這時候請刪除13行和224行:

    //第13行
    using NLog;
    //第224行
    // Token: 0x04000951 RID: 2385
    private static readonly ILogger ilogger_0 = LogManager.GetCurrentClassLogger();
  1. 點擊右下角“編譯”

  2. 點擊左上角“文件”,選擇“保存模塊”,確定


#運行

將修改的Listary.exe覆蓋原有的安裝目錄下的 Listary.exe

雙擊 Listary.exe,完成所有步驟,Enjoy 🎉

💉 Listary Pro逆向教程
https://illumi.love/posts/資安向/listary-pro逆向教程/
作者
𝑰𝒍𝒍𝒖𝒎𝒊糖糖
發布於
2025-08-26
許可協議
🔒CC BY-NC-ND 4.0
💬 參與討論
使用 GitHub 帳號登入參與討論