Aspose 24 .NET版本破解

3,512 阅读3分钟

本教程以Aspose.CAD 24.11.0版本为例进行破解,其它版本如Word,Cells和这个原理应该是一样的,按照教程来基本上是有手就行

破解工具

  • dnspy.exe
  • Aspose的dll
  • 一个Aspose过期的激活码
  • Visual Studio/Rider/VSCode等IDE

破解流程

新建一个项目,带有一个控制台程序,我这里用的dotnet 9 sdk,项目配置如下

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net9.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>

    <ItemGroup>
      <Reference Include="Aspose.CAD">
        <HintPath>....\Aspose.CAD.dll</HintPath>
      </Reference>
    </ItemGroup>

    <ItemGroup>
      <PackageReference Include="MessagePack" Version="2.5.192" />
    </ItemGroup>

</Project>

其中,Aspose.CAD.dll是从nuget上下载的,目录应该在C:\Users{计算机用户名}.nuget\packages\aspose.cad文件夹下面,MessagePack是Aspose.CAD的依赖项。Program.cs中写入如下代码:

new Aspose.CAD.License().SetLicense(
    new MemoryStream(
        Convert.FromBase64String(
            "PExpY2Vuc2U+CiAgPERhdGE+CiAgICA8TGljZW5zZWRUbz5TdXpob3UgQXVuYm94IFNvZnR3YXJlIENvLiwgTHRkLjwvTGljZW5zZWRUbz4KICAgIDxFbWFpbFRvPnNhbGVzQGF1bnRlYy5jb208L0VtYWlsVG8+CiAgICA8TGljZW5zZVR5cGU+RGV2ZWxvcGVyIE9FTTwvTGljZW5zZVR5cGU+CiAgICA8TGljZW5zZU5vdGU+TGltaXRlZCB0byAxIGRldmVsb3BlciwgdW5saW1pdGVkIHBoeXNpY2FsIGxvY2F0aW9uczwvTGljZW5zZU5vdGU+CiAgICA8T3JkZXJJRD4yMDA2MDIwMTI2MzM8L09yZGVySUQ+CiAgICA8VXNlcklEPjEzNDk3NjAwNjwvVXNlcklEPgogICAgPE9FTT5UaGlzIGlzIGEgcmVkaXN0cmlidXRhYmxlIGxpY2Vuc2U8L09FTT4KICAgIDxQcm9kdWN0cz4KICAgICAgPFByb2R1Y3Q+QXNwb3NlLlRvdGFsIGZvciAuTkVUPC9Qcm9kdWN0PgogICAgPC9Qcm9kdWN0cz4KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT4KICAgIDxTZXJpYWxOdW1iZXI+OTM2ZTVmZDEtODY2Mi00YWJmLTk1YmQtYzhkYzBmNTNhZmE2PC9TZXJpYWxOdW1iZXI+CiAgICA8U3Vic2NyaXB0aW9uRXhwaXJ5PjIwMjEwODI3PC9TdWJzY3JpcHRpb25FeHBpcnk+CiAgICA8TGljZW5zZVZlcnNpb24+My4wPC9MaWNlbnNlVmVyc2lvbj4KICAgIDxMaWNlbnNlSW5zdHJ1Y3Rpb25zPmh0dHBzOi8vcHVyY2hhc2UuYXNwb3NlLmNvbS9wb2xpY2llcy91c2UtbGljZW5zZTwvTGljZW5zZUluc3RydWN0aW9ucz4KICA8L0RhdGE+CiAgPFNpZ25hdHVyZT5wSkpjQndRdnYxV1NxZ1kyOHFJYUFKSysvTFFVWWRrQ2x5THE2RUNLU0xDQ3dMNkEwMkJFTnh5L3JzQ1V3UExXbjV2bTl0TDRQRXE1aFAzY2s0WnhEejFiK1JIWTBuQkh1SEhBY01TL1BSeEJES0NGbWg1QVFZRTlrT0FxSzM5NVBSWmJRSGowOUNGTElVUzBMdnRmVkp5cUhjblJvU3dPQnVqT1oyeDc4WFE9PC9TaWduYXR1cmU+CjwvTGljZW5zZT4="
        )
    )
);
Console.WriteLine("Hello, World!");

上面的激活码是网上随便找的,已经过期了,编译项目后用dnspy.exe 64位的打开项目目录的bin\Debug\net9.0\{你的exe}以及Aspose.CAD.dll,然后在SetLincense这一行打上断点,开始调试:

image.png

在SetLincense函数中我们单步往下调试,直到发现一个关键的代码:

string text12 = ((xmlElement17 != null) ? xmlElement17.InnerText : string.Empty);  
DateTime dateTime3 = (text12.Equals(string.Empty) ? DateTime.MaxValue : DateTime.ParseExact(text12, #=zXGEHtrWJyLraARphkd2RogSdcXbS.#=zwsV_nXw=(-1769771424), CultureInfo.InvariantCulture));

image.png

这两行代码很明显就是从激活码中读取过期时间的,所以很简单,我们直接把过期时间改成2099年就可以了,这里由于dateTime3是从text12读取出来的,所以直接修改text12的值,我们先看一下对应的il代码

image.png

解释一下:

ldloc.s V_79(79)

加载局部变量V_79的值到计算堆栈上,这个变量可能是xmlElement17的引用

brtrue.s 430(0418)

如果堆栈顶部的值不为null/0,则跳转到430行,这是实现条件判断(xmlElement17 != null)的部分,如果V_79为null,执行:

ldsfld string[System.Runtime]String.String::Empty  // 加载String.Empty
br.s 432(041F)                                    // 跳转到存储结果的指令

如果V_79不为null,执行:

ldloc.s V_79(79)                                  // 重新加载V_79
callvirt instance string [...] get_InnerText()    // 调用InnerText属性

最后将结果存储到局部变量V_76中

stloc.s V_76(76)

上面这一大段看不懂也无所谓,我们只需要用il指令生成一个常量字符串"20990101",然后赋值给V_76(这个就是text12)

修改起来很简单,只需要把426-431行il指令删了,然后插入一条ldstr "20990101" 就可以了

image.png

修改完成后,这个text12就变成常量了:

image.png

保存模块,然后我们写个测试代码看看能不能正常运行:


using Aspose.CAD.FileFormats.Stp;
using Aspose.CAD.ImageOptions;

// 激活代码省略了

string source = "D:/3D-stp格式.stp";
string output = "D:/3D-stp格式.stl";
using (var cadImage = StpImage.Load(source))
{
    cadImage.Save(output,new StlOptions());
}

Console.WriteLine("Hello, World!");

image.png image.png

可以看到模型文件正常转换了,并且没有报错,非常的nice