碎碎念
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后成功激活。