文档章节

回忆去年用Java破解unity.exe的过程

BlackJoker
 BlackJoker
发布于 2015/10/13 13:24
字数 1153
阅读 37
收藏 0

去年我一同学要我破解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)。

 

另:刚刚找到了一个链接,有证书链生成的几行代码...

 

 

© 著作权归作者所有

共有 人打赏支持
BlackJoker
粉丝 1
博文 17
码字总数 9270
作品 0
深圳
高级程序员
私信 提问
Ubuntu 18.04.1 搭建Java环境和HelloWorld

一、搭建Java环境 系统环境 Ubuntu 18.04.1 JDK 8 IDEA 2018.2 1.下载JDK 官网地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 选择相应的版本,点击jdk,进入下...

王磊的博客
08/24
0
0
写给软件开发者---Binnary Security.

本文目标: 大致了解Java byte code以及Assembly. 简单概述如何反编译Java Class 二进制文件的反编译 回答“难道真的不能保护程序源码吗?” Java Byte Code: 使用命令javap -c <ClassName...

hysjw
2013/01/12
0
5
MyEclipse9.1之Jad插件安装全过程

前言:昨天破解完MyEclipse9.1,今天安装了几个开发必备的插件,在之前8.5的版本装过jad,可时间一长就忘记了,今天搜索了一下jad的安装过程,发现很多老版本的安装方法对于9.1就行不通了,看...

凯撒大弚
2012/06/14
0
0
Microsoft 开源用于 VS Code 的 Java Debugger

Microsoft 开源用于 VS Code 的 Java Debugger 微软推出的免费的跨平台代码编辑器Visual Studio Code(称为VS Code) 为9月份发布的 Java Debugger 开源代码。VS Code 在推出时就支持原生的 ...

周其
2017/11/21
3K
6
IntelliJ IDEA 2018.1.3 + jdk1.8 安装教程

1.写在前面 由于同学的项目缺人手,欲拉我参与其中,该项目由java编写,所以开始了我的java学习。当然首先是安装java环境啦。 2.安装IDEA 由于这个是收费的,我等穷逼哪搞得起。只能破解使用...

我只是一只小小鸟
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

easyui tree

<tr> <th><spring:message code="wf.borrow.examiner"/></th> <td> <input id="inp-examiner1" type="text" name="examiner1" style="width:197px;height:20px;" data-options="required:tru......

小兵胖胖
9分钟前
0
0
内存性能的正确解读

一台服务器,不管是物理机还是虚拟机,必不可少的就是内存,内存的性能又是如何来衡量呢。 1. 内存与缓存 现在比较新的CPU一般都有三级缓存,L1 Cache(32KB-256KB),L2 Cache(128KB-2MB)...

阿里云云栖社区
12分钟前
0
0
微服务架构:Zuul 1.0 和 2.0 我们该如何选择?

在今年5月中,Netflix终于开源了它的支持异步调用模式的Zuul网关2.0版本,真可谓千呼万唤始出来。从Netflix的官方博文[附录1]中,我们获得的信息也比较令人振奋: The Cloud Gateway team a...

大木老师故事的小黄花
12分钟前
0
0
基础掌握

哪些是基础功呢?我觉得包括: 数据结构和算法:链表、队列、栈、堆、树(RBT, B/B+)、跳表、哈希、图;查找(二分、bst)、排序(冒泡、插入、快排、归并、堆排、希尔)、递归、归并、回溯、...

边鹏_尛爺鑫
14分钟前
0
0
Android APP的安装路径

一. Android应用安装路径有两种情况: system/app 系统自带的应用程序,无法删除。root后可以删除,注意可能造成系统崩溃,不过有的垃圾捆绑软件只能这么删除了 data/app 用户程序安装的目录,...

天王盖地虎626
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部