去年我一同学要我破解unity.exe,然后挂在网上卖点钱花。后来我对破解过程涉及的技术问题痴迷了,再后来...
unity.exe是一个windows下的二进制程序,有一个用xml签名的license文件,license文件分几个部分:
1,一个CA认证机构的证书(好像是PACE Anti-Piracy):certCA;
2,unity机构的证书:certU;
3,使用certU签名的关于当前用户的使用期限、能使用的功能等等:UserInfo;
(上述1,2,3都是用标准xml signature保存的)
unity.exe把certU存了一份放在源码里面,我是怎么知道的呢?因为我用二进制工具打开unity.exe时发现了一个片段和certU一模一样,于是我眼前一亮:
我可以使用一个伪造的证书,替换这个二进制片段即可破解了。
下面必须说说unity.exe的认证过程:加载license文件读取certCA、certU、被签名信息UserInfo:
1,比较certU与源码里面的备份是否相同;
2,校验certU是否是certCA颁发的证书;
3,使用certU校验UserInfo;
(by the way,证书都是x.509 v3证书)
破解过程有几个难点必须要攻克:
1,伪造的证书ForgedCertU长度必须和原来的证书长度一致(才不会破坏unity.exe的结构)
我不知道unity.exe有没有校验证书的dname,总之伪造的证书除了公钥私钥的值外,其他的都必须一致,比如密钥长度都是2048、相同的dname、相同的Hash算法、相同的扩展字段等等;
2,同时需要伪造一份CA证书ForgedCertCA,并满足1的约束;
3,要用ForgedCertCA给ForgedCertU签名;
4,测试(包括使用伪造的证书给license.xml签名然后校验;更改UserInfo替换unity.exe玩一玩高级功能)
当时我对PKI体系知识理解不够深刻,花的最多的时间是上面的3:就是生成证书链的过程。
当时视图用openssl命令操作一个CSR文件(certificate sign request)制作这个证书链,一直成功不了,后面釜底抽薪用纯Java结合BC组件来做,一直以为把两个证书放入一个KeyStore文件就相互信任了,其实不是的。
制作好CA以后(存入jks文件),需要用CA的private key构造一个ContentSigner,然后用一个X509v3CertificateBuilder(包含CSR和被签名者的公钥以及dname、日期等等)去build这个ContentSigner,然后就产生ForgedCertU了(也是存到jks里面)。
注意ForgedCertU不是独立生成的而是用下面的方式生产的:
(caPrivateKey+PublicKey+DName+date+CSR)=>ForgedCertU,其中PublicKey是证书ForgedCertU的密钥对中的公钥。
从上面的公式可以得出下面的结论:
1,签名必须用私钥,即别人是签不了的,这个ForgedCertU可以用ca的证书校验看是不是对应caPrivateKey签发的;
2,签名时ca只需要你的公钥和需要写入证书的信息、日期等,不需要你的私钥,所以他帮你签完后你是安全的;
3,ca的证书和被签名的证书都有独立的RSA密钥对(这个结论是给初学者看的,免得误解)
简单的讲,创建证书链的过程就是用CA的私钥作用于你的公钥和个人信息,然后输出你的证书。
花的时间第二多、最痛苦的是调整证书的大量extensions,如果有一个extensions不一致,证书的长度就不一致,unity.exe用的是c的库xmlsec lib,有些extensions莫名其妙,苦了我这个可怜的Java程序员...
一个周末(2天3晚)才终于搞定上面的东西,最终我生成的ForgedCertCA和ForgedCertU与原证书长度一致,然后用相应的私钥签名了这个license.xml,把这个license.xml上传到这个在线xml签名校验网站进行校验:成功了!!!
当然,现在已经是凌晨几点了,本来想马上把最新制作的license.xml发给同学,要他测试玩一下unity.exe,但是他不在线,那算了....
几个星期后我的opensuse 12.1出了很多问题,果断换rhel6试试,结果一个不小心把主分区格了----每个linux初学者都有一段心酸的往事....
源码虽然丢了,但从此我彻底理解了PKI体系的原理(外加一本书 Java security 2nd Edition)。
另:刚刚找到了一个链接,有证书链生成的几行代码...
相关推荐
可破解unity3D变正版,无需注册码!
微软Hololens2 MRTK插件 Unity开发必备插件包 可下载以下插件联合使用: Microsoft.MixedReality.Toolkit.Unity.Foundation.2.4.0.unitypackage Microsoft.MixedReality.Toolkit.Unity.Extensions.2.4.0. Microsoft...
MRTK.HoloLens2.Unity.Tutorials.Assets.GettingStarted.2.3.0.2
微软Hololens2 MRTK插件 Unity开发必备插件包 可下载以下插件联合使用: Microsoft.MixedReality.Toolkit.Unity.Foundation.2.4.0.unitypackage Microsoft.MixedReality.Toolkit.Unity.Extensions.2.4.0. Microsoft...
Microsoft.Practices.Unity.Configuration.dll 使用Unity配置文件映射方式需要的dll,因为unity实现的 是自定义节点里边实现了自定义节点需要的接口
Unity2017.4.3f1安装包下载程序,官方渠道,希望对大家有所帮助
Zxing开源项目的zxing.unity.dll
vmware-unity-helper.exe
尽管如此,在某些旧项目或者特定场景下,我们仍可能需要使用UnityWebPlayer.exe。 集成UnityWebPlayer到Winform应用中的步骤如下: 1. **安装UnityWebPlayer**: 首先,你需要下载并安装UnityWebPlayer_vincent.exe...
TASKKILL /F /IM Unity.exe set UNITY_PATH="C:\\Program Files\\Unity\\Hub\\Editor\\2019.2.15f1\\Editor\\Unity.exe" echo "finish
Unity-2022.3.14f1.pkg 适用于macOS-Arm,文件使用WinRAR分割成四个压缩包,必须一起下载使用: Unity-2022.3.14f1.part1.rarhttps://download.csdn.net/download/weixin_43800734/88594097Unity-2022.3.14f1.part2....
微软Hololens2 MRTK插件 Unity开发必备插件包 可下载以下插件联合使用: Microsoft.MixedReality.Toolkit.Unity.Foundation.2.4.0.unitypackage Microsoft.MixedReality.Toolkit.Unity.Extensions.2.4.0. Microsoft...
Microsoft.MixedReality.Toolkit.Unity.Foundation.2.3.0
Unity-2022.3.14f1.pkg 适用于macOS-Arm,文件使用WinRAR分割成四个压缩包,必须一起下载使用: Unity-2022.3.14f1.part1.rarhttps://download.csdn.net/download/weixin_43800734/88594097Unity-2022.3.14f1.part2....
Unity Patch工具,支持4.x/5.x。。。。。。。。。。。。。。。
作者之前说不再更新,自己打脸了,还是更新了,最新支持到和谐2017.2, 快快收藏吧,Unity官方说2017.2是最后一个支持DX9的版本。
Unity-2022.3.14f1.pkg 适用于macOS-Arm,文件使用WinRAR分割成四个压缩包,必须一起下载使用: Unity-2022.3.14f1.part1.rarhttps://download.csdn.net/download/weixin_43800734/88594097Unity-2022.3.14f1.part2....
Unity.5.x.Game.Devel.Blueprints pdf 英文 Unity.5.x.Game.Devel.Blueprints pdf 英文 Unity.5.x.Game.Devel.Blueprints pdf 英文
UnityWebPlayer.exe