Skip to content

碎碎念

Windows 平台上的Git软件很多,但是自从用过了Fork后无法自拔。
不过后续软件开始收费了,这么好的软件的确是要盈利。

所以我决定白嫖一下,具体关键点不会透露太多,存粹作为研究。

项目分析

dnSpy打开后可以看见这个程序是使用 .Net 开发的,版本是 .NET Framework 4.6.2
主要代码经过了混淆加密

可以看见混淆工具是 ConfuserEx

ConfuserEx 是一个开源的 .Net 代码混淆器,找到对应的解包工具先将他去混淆。
解包后顺着错误提示找到代码

目前可以看见是调用了激活方法,根据方法的结果来决定授权是否正常。
先跟进 ActivateWithEmail 看看。

代码里可以直接看见请求的几个要素,将这几个要素提交到 Paddle 平台进行授权验证。

向下可见程序并非是全程联网进行授权验证。不过之前也猜测如果离线用户怎么使用这玩意,应该是有离线存储授权的功能在。

跟进存储授权的代码后可以看见授权文件是使用 AES-CBC 加密,存储成两个文件。

查看下文件的内容格式

文件目前是将LicenseData加密后存储为JSON。 根据之前代码,授权文件的加密密钥是 $"{Base64(ProductId)}.spadl"

跟着调用链找到 ProductId

顺藤摸瓜找到授权文件存储位置后打开文件。

构建假冒激活文件

了解了结构后,其实只要构造出 license_data 的数据即可激活

查看代码可见加密前的内容结构

如果是存在本地授权文件,应该是会在程序启动时去读取授权文件。
那只要构建假冒的文件即可完美激活。

var newSpadl = new LicenseModel()
{
    ActivationDate = DateTime.Now,
    ActivationEmail = $"[email protected]",
    ActivationId = licenseCode,
    LicenseCode = licenseCode,
    LicenseCodeHash = HashLicense(licenseCode),
    LicenseExpiryDate = DateTime.Now.AddYears(5),
    ProductId = xxxxx,
    LicenseUuid = Guid.NewGuid().ToString()
};

其他字段都能很方便的在程序内构造出来。
先看下 HashLicense 是做什么功能

逻辑基本是
前缀字符+授权Code本体,通过BlockCopy合并,最后计算出MD5结构。

验证激活

条件都齐活了,接下来写了个自动激活的工具。
工具作用仅仅是生成了文件存放到目录中。

重开Fork后成功激活。