PCL 2 新版本秋仪金逻辑

由于之前版本的秋仪金隐藏主题解锁遭到破解,龙腾猫跃最新的快照版和 Alpha 版本修改了秋仪金隐藏主题的解锁方式。

但为了破解 PCL 2 目前的秋仪金解锁方式,我在某天下午花了大把时间十五分钟研究了一下,并做出了新版本的启动流程图(图示版本:Snapshot 11#)

我们看到,在该版本中中,秋仪金的解锁码更换了新的加密方式 (RSA512),且将解锁码明文存储在注册表的 UiLauncherThemeGold 中。在快照版,每次打开启动器也都会通过 ModMain.SecureVerifyRsa 进行验证。

但是 RSA512 是一种非对称加密算法,我们无法通过这些信息轻而易举的生成新版本的解锁工具。

但是,我们可以换一种方式进行思考。

好戏来了

根据上文的反编译中我们得知,PCL 2的秋仪金解锁码是通过RSA512进行加密,并验证公钥Hash。那么,我们也可以根据这一特点,对其进行破解。

反编译的时候从macOS到Windows报毒了,随手丢到沙箱里跑,啧啧…

首先,我们看到 PageOtherHelp 中的 DonateCodeInput —— 输入解锁码的位置。以下是这一部分的代码(Alpha 1.3.3 反编译得出)

我们发现,它首先会判断输入的是否为极客蓝解锁代码。如果不是,则直接丢到 ModMain.ThemeCheckGold 尝试秋仪金解锁。

而在ModMain.ThemeCheckGold中,我们会看到以下代码。

Public Function ThemeCheckGold(Optional Code As String = Nothing) As Boolean
    Dim sign As String = (If(Code, ModBase.Setup.[Get]("UiLauncherThemeGold", Nothing))).ToString().Replace("#", "")
    Return ModBase.SecureVerifyRsa("Gold|0|" + ModBase.UniqueAddress.Replace("-", ""), sign)
End Function

我们可以看到,这里对传入的 text 进行处理,并将其再次传入到 ModBase.SecureVerifyRsa.

以下是 SecureVerifyRSA 的代码。

Public Function SecureVerifyRsa(SourceString As String, Sign As String) As Boolean
  Dim result As Boolean
  Try
    Dim rsacryptoServiceProvider As RSACryptoServiceProvider = New RSACryptoServiceProvider(512)
    rsacryptoServiceProvider.FromXmlString("<RSAKeyValue><Modulus>0L/cZoJUyBRAIE8OKiG8+qYOytXD+azFCBsmOuQraQGAQ1S/R1Frckd3/Sn+Zsx9aD6U2f84SdWMDlrRY9DfhQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>")
    result = rsacryptoServiceProvider.VerifyData(Encoding.[Default].GetBytes(SourceString), GetType(SHA256), Convert.FromBase64String(Sign))
  Catch ex As Exception
    result = False
  End Try
  Return result
End Function

这一部分的作用就是通过 XML 初始化 RSA ,然后通过 VerifyData 验证公钥哈希值,并返回 result.

但在上文说了,由于RSA512是一种非对称加密算法,因此我们无法通过这些信息轻而易举的生成新版本的解锁工具。

但是我们可以尝试通过其他方式进行破解…这里不再提及。

更新:目前龙腾猫跃已经对此部分进行混淆处理,本人已无兴趣再进行研究。

加入对话

3条评论

留下评论

电子邮件地址不会被公开。 必填项已用*标注