无法正确解锁神秘紫
检查项
- [X] 我已在 Issues 页面 和 常见&难检反馈及问题列表 中搜索,确认了这一 Bug 未被提交过。
描述
现象
在使用USB蓝牙并连接设备后,重启主程序后设备识别码发生了变化,导致原设备识别码的全部隐藏主题丢失; 我尝试重新解这些隐藏主题,解锁神秘紫的过程中出现了问题: 在将Dev 0.4.4拖入与Snapshot 2.6.13(312.0)相同的文件夹内并正确的点击了帮助—>开源许可—>??????后也正确的弹出提示, 然而返回Snapshot后又弹出“快照版使用说明”且神秘紫未正常解锁。 在log1.txt中(Snapshot 2.6.13),出现了如下报错:(与 #1474 类似)
[21:23:13.156] 解密设置失败:UiLauncherThemeHide:调用的目标发生了异常。
→ 不正确的数据。
在 5FB61DDE.06C01D7B(Exception 410B3905)
在 5FB61DDE.6B9A2F7C(Object[] 023732AD, Int32 5ED63CAC)
在 PCL.ModSecret.SecretDecrypt(String SourceString, String Key)
在 PCL.ModSetup.Read(String Key, SetupEntry& E, McVersion Version)
在 System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
在 System.Security.Cryptography.Utils._DecryptData(SafeKeyHandle hKey, Byte[] data, Int32 ib, Int32 cb, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode PaddingMode, Boolean fDone)
在 System.Security.Cryptography.CryptoAPITransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
在 System.Security.Cryptography.CryptoStream.FlushFinalBlock()
在 System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing)
在 System.IO.Stream.Close()
错误类型:System.Security.Cryptography.CryptographicException
在log.txt中(Dev0.4.4),一样出现了如下报错:
[21:22:29.098] 解密设置失败:UiLauncherThemeHide:
不正确的数据。
在 PCL.ModBase.SerRemove(String SourceString, String Key)
在 PCL.ModSetup.Read(String Key, Entry E)
推测
- 识别码变换前是D200结尾,变换后为25B7结尾
在Dev 0.4.4中,下载—>加解密测试中的“密钥“(类似设备识别码)与变换前的D200结尾相同(查阅内群的.update聊天记录得出);
但是在启动Snapshot 2.6.13后,发现设备识别码数据与自身得出的设备识别码不吻合,因此报错并且沿用自身得出的25B7结尾的识别码,因此神秘紫无法正确解锁。
重现步骤
1、主程序识别码更换后重新使用dev0.4.4解锁神秘紫 2、无法正常解锁,日志中报错
日志与附件
很离谱吗?是的很离谱(
删除PCL2注册表下的UiThemeHide项试试……
删除PCL2注册表下的
UiThemeHide项试试……
只找到了UiLauncherThemeHide和UiLauncherThemeHide2项,就是这些吗
删除PCL2注册表下的
UiThemeHide项试试……只找到了UiLauncherThemeHide和UiLauncherThemeHide2项,就是这些吗
不要删除UiThemeHide2,只要删除UiThemeHide再尝试
删除PCL2注册表下的
UiThemeHide项试试……只找到了UiLauncherThemeHide和UiLauncherThemeHide2项,就是这些吗
不要删除
UiThemeHide2,只要删除UiThemeHide再尝试
问题依旧,生成了一个与之前相同值的UiThemeHide
随便重命名PCL文件夹下的setup.ini,然后执行刚才的操作再试试?
随便重命名PCL文件夹下的setup.ini,然后执行刚才的操作再试试?
问题依旧:D
把注册表的Identify项重命名,尝试重新生成识别码?
把注册表的Identify项重命名,尝试重新生成识别码?
不行,Dev0.4.4的识别码与主程序的识别码不统一
把注册表的Identify项重命名,尝试重新生成识别码?
估计是同一个Identify,不同的识别码造成的
我也有这个问题,但是我没有用USB蓝牙。
@mcwuguodadi 能否说一下你连接了什么USB蓝牙设备,一般电脑连接可移动设备不应该导致识别码重置,试试分别在连接和不连接设备的情况下备份一遍PCL2设置和注册表上传上来,然后再试试解锁?
同样遇到了…… 希望尽快修复吧,因为这个重置不光导致了主题消失,存的游戏路径和账号信息也没了,对于我这种游戏版本东一个西一个的人来说简直灾难( 而且这也导致了识别码重复的这部分人再也无法获取神秘紫主题了 ~~而且说句不好听的,感觉因为软件问题导致用户不能解锁主题有点不太公平(~~ ~~(别骂我QAQ~~
哦对,这个玩意很可能跟ipv4一样,开始不够用了 所以之前画的主题大改~战斗更改~的大饼赶紧先把面发了吧
@mcwuguodadi 能否说一下你连接了什么USB蓝牙设备,一般电脑连接可移动设备不应该导致识别码重置,试试分别在连接和不连接设备的情况下备份一遍PCL2设置和注册表上传上来,然后再试试解锁?
还原之前的备份过,没用()
所以这个问题龙猫还打算修吗 (这个问题是因为热更新部分识别码变了所以主题重置了,和设备没关系
在 2024年3月9日,20:09,mcwuguodadi @.***> 写道:
@mcwuguodadi 能否说一下你连接了什么USB蓝牙设备,一般电脑连接可移动设备不应该导致识别码重置,试试分别在连接和不连接设备的情况下备份一遍PCL2设置和注册表上传上来,然后再试试解锁?
还原之前的备份过,没用()
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.
意思是Dev0.0.4版本有一个BUG导致部分人的识别码相同,但是现在的版本没有这个BUG,导致两个版本生成的识别码不同,所以无法解锁?
并不,这个问题的起因是 lm 在最近一次版本更新之后又追加了一个热更新,这个热更新修复了这个识别码可能重复的 Bug ,导致之前部分识别码重复的机器刷新成了新识别码,然后进而导致了机器的识别码和注册表存的加密数据不同,最终导致注册表数据重置、PCL 启动器重置。
在 2024年3月10日,18:55,根号谈 @.***> 写道:
意思是Dev0.0.4版本有一个BUG导致部分人的识别码相同,但是现在的版本没有这个BUG,导致两个版本生成的识别码不同,所以无法解锁?
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.
意思是Dev0.0.4版本有一个BUG导致部分人的识别码相同,但是现在的版本没有这个BUG,导致两个版本生成的识别码不同,所以无法解锁?
dev识别的是我之前一直都在用的识别码,没有问题
不,是最新版的热更新版本修了这个 bug 之后导致现在有些人识别码和原来的不一样
在 2024年3月16日,19:38,mcwuguodadi @.***> 写道:
意思是Dev0.0.4版本有一个BUG导致部分人的识别码相同,但是现在的版本没有这个BUG,导致两个版本生成的识别码不同,所以无法解锁?
dev识别的是我之前一直都在用的识别码,没有问题
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.
~~根本原因应该是把蓝牙设备识别成系统设备,导致硬件特征值改变。~~ 编辑:看漏了,并不是
错误的 这个问题在之前我回答了好几遍了…… 是龙猫发现有部分设备的识别码会重复,然后发了热更新来修复这一问题,应该是改了识别码的算法
顺便催一下lm快修,这都鸽多久了都(
在 2024年4月13日,11:08,Silverteal @.***> 写道:
根本原因应该是把蓝牙设备识别成系统设备,导致硬件特征值改变。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.
估计可能得等 2.7.2 或者 2.7.3 发布了。。。 EDIT:龙猫如果真的没时间 Fix 怎么催都没用.。。
这个问题应该是识别码变化导致的。
在 5FB61DDE.06C01D7B(Exception 410B3905)
在 5FB61DDE.6B9A2F7C(Object[] 023732AD, Int32 5ED63CAC) => 这里是VMProtect虚拟机的入口,里面是SecretDecrypt的具体实现,第一个是将SecretDecrypt的参数打包成的数组,第二个是函数对应虚拟指令开始地址
在 PCL.ModSecret.SecretDecrypt(String SourceString, String Key) => 字符串解密函数
在 PCL.ModSetup.Read(String Key, SetupEntry& E, McVersion Version) => 这里负责读取键值(参数里面的Key)并解密,应该是这里传给SecretDecrypt的Key参数(跟识别码有关)跟加密时的Key不一样导致的解密错误
在 System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
在 System.Security.Cryptography.Utils._DecryptData(SafeKeyHandle hKey, Byte[] data, Int32 ib, Int32 cb, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode PaddingMode, Boolean fDone)
在 System.Security.Cryptography.CryptoAPITransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
在 System.Security.Cryptography.CryptoStream.FlushFinalBlock()
在 System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing)
在 System.IO.Stream.Close()
错误类型:System.Security.Cryptography.CryptographicException
根本原因应该是PCL2获取识别码的实现改变了,在之前的PCL2版本中从WMI获取硬件信息,现在改为注册表了。 PCL2在注册表中加密的这些项的加解密密钥都跟识别码有关系,所以如果识别码有变化,那之前的信息都会无法读取。 @mcwuguodadi 如果你需要,可以把新版的新注册码发我,我试试看能不能帮你解锁主题。 不用太担心隐私问题,密钥实际上是一些内容计算Hash截取出来的结果,不会透露任何个人设备信息。
另外,龙猫如果要修复的话更可能是弄一个新的Dev版本(吧
ps:吐槽一下龙猫加的壳,特别是公开版保护作用不仅差,还让误报率翻了倍……
原始公开版:
脱壳后:
重新加上别的壳:(仅测试,没有细调保护)
换了壳居然让误报率比不加壳都低……
这个问题确实是由识别码变动引起的 至于怎么修…… 还是等lm吧 就是不知道得等到什么时候了……
至于新识别码 我没在家 没法拿新识别码(
2024年4月13日,13:19,pnpn111 @.***> 写道:
这个问题应该是识别码变化导致的。
在 5FB61DDE.06C01D7B(Exception 410B3905) 在 5FB61DDE.6B9A2F7C(Object[] 023732AD, Int32 5ED63CAC) => 这里是VMProtect虚拟机的入口,里面是SecretDecrypt的具体实现,第一个是将SecretDecrypt的参数打包成的数组,第二个是函数对应虚拟指令开始地址 在 PCL.ModSecret.SecretDecrypt(String SourceString, String Key) => 字符串解密函数 在 PCL.ModSetup.Read(String Key, SetupEntry& E, McVersion Version) => 这里负责读取键值(参数里面的Key)并解密,应该是这里传给SecretDecrypt的Key参数(跟识别码有关)跟加密时的Key不一样导致的解密错误 在 System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) 在 System.Security.Cryptography.Utils._DecryptData(SafeKeyHandle hKey, Byte[] data, Int32 ib, Int32 cb, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode PaddingMode, Boolean fDone) 在 System.Security.Cryptography.CryptoAPITransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) 在 System.Security.Cryptography.CryptoStream.FlushFinalBlock() 在 System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing) 在 System.IO.Stream.Close() 错误类型:System.Security.Cryptography.CryptographicException 根本原因应该是PCL2获取识别码的实现改变了,在之前的PCL2版本中从WMI获取硬件信息,现在改为注册表了。 PCL2在注册表中加密的这些项的加解密密钥都跟识别码有关系,所以如果识别码有变化,那之前的信息都会无法读取。 如果你需要,可以把新版的新注册码发我,我试试看能不能帮你解锁主题。 不用太担心隐私问题,密钥实际上是一些内容计算Hash截取出来的结果,不会透露任何个人设备信息。
另外,龙猫如果要修复的话更可能是弄一个新的Dev版本(吧
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.
这段加密密钥不应该保存吗? 为什么要重新计算,反正密钥是绑定计算机的,拿到密钥也不可能解密
这段加密密钥不应该保存吗? 为什么要重新计算,反正密钥是绑定计算机的,拿到密钥也不可能解密
嗯……你可以理解为绑定的内容变了(仅举个例子不是实际改变:例如以前绑定主板,现在绑定cpu),所以对程序来说以为绑定的计算机变了导致无法解密。 这样解释应该合理?
另外,如果是拿到本机上的密钥,的确可以在本机上解密。
说到将数据绑定本机上,.net的确提供了一个类用于操作:
https://learn.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.protecteddata?redirectedfrom=MSDN&view=netframework-4.6.2
但我个人感觉它和PCL2目前的需求不是很符合。
识别码由两个部分计算得出: 1.硬件详情(PCL每次启动时计算) 2.PCL首次启动时生成的一个值(基本可以认为是随机值,存储在注册表的Identify项中,生成后就不会改变) 两者中的任意一个改变都会导致识别码改变。 由于其中第1项的计算方式从某个版本开始发生了变化,所以可能会出现识别码变化的情况。而PCL的某些设置项目的读取和保存依赖于识别码,因此在此前生成的这部分设置项目(包括隐藏主题解锁情况)就可能无法正常读取了。
详情请见https://github.com/Hex-Dragon/PCL2/issues/3404#issuecomment-1957969786
识别码由两个部分计算得出: 1.硬件详情(PCL每次启动时计算) 2.PCL首次启动时生成的一个值(基本可以认为是随机值,存储在注册表的Identify项中,生成后就不会改变) 两者中的任意一个改变都会导致识别码改变。 由于其中第1项的计算方式从某个版本开始发生了变化,所以可能会出现识别码变化的情况。而PCL的某些设置项目的读取和保存依赖于识别码,因此在此前生成的这部分设置项目(包括秋仪金以外的隐藏主题)就可能无法正常读取了。
准确来说就是如果识别码变动,所有依赖识别码 加密/解密/验证的功能都会出问题 “包括秋仪金以外的隐藏主题” 实际上秋仪金应该也会无法读取,因为秋仪金的签名校验也要用到识别码
识别码由两个部分计算得出: 1.硬件详情(PCL每次启动时计算) 2.PCL首次启动时生成的一个值(基本可以认为是随机值,存储在注册表的Identify项中,生成后就不会改变) 两者中的任意一个改变都会导致识别码改变。 由于其中第1项的计算方式从某个版本开始发生了变化,所以可能会出现识别码变化的情况。而PCL的某些设置项目的读取和保存依赖于识别码,因此在此前生成的这部分设置项目(包括秋仪金以外的隐藏主题)就可能无法正常读取了。
“包括秋仪金以外的隐藏主题” 实际上秋仪金应该也会无法读取,因为秋仪金的签名校验也要用到识别码
确实,能读取不能校验和不能读取也没什么区别 不过这个问题不大,重新获取一下解锁码就好了
