碎碎念

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 的数据即可激活

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
var newSpadl = new LicenseModel()
{
    ActivationDate = DateTime.Now,
    ActivationEmail = $"your@email.com",
    ActivationId = licenseCode,
    LicenseCode = licenseCode,
    LicenseCodeHash = HashLicense(licenseCode),
    LicenseExpiryDate = DateTime.Now.AddYears(5),
    ProductId = xxxxx,
    LicenseUuid = Guid.NewGuid().ToString()
};

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

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

验证激活

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

重开Fork后成功激活。