注:写文档目的主要用于技术学习,了解技术帆软公司技术大牛是怎么设计系统,请勿用于商用。
一、 工具准备
1、 javassist:class代码修改工具
2、 luyten-0.5.3:class代码反编译工具,主要用于了解系统结构
3、 winrar解压软件
二、 技术难点
1、 授权文件采用RSA加密,理论上是无法破解,要想破解只能替换密钥,
2、 fineReport为了保证安全,软件自定义了类加载器,设计了100个类加载器,只有反编译所有的加载器才能知道授权内容,过程大致如下:通过com.fr.plugin.bridge. Start推出com.fr.plugin.bridge._7c269529_9bce_43a5_95db_b44008bf984f,然后通过com.fr.plugin.bridge._7c269529_9bce_43a5_95db_b44008bf984f推出下一个加载器,一直往下推,总共有100个。
3、 授权核心代码采用全部存储在com.fr.plugin.bridge.A目录下,后缀名为classx,这些文件实际上通过RSA进行了加密的class文件,密钥在最后一个类加载器中,这些文件解密出来class文件不是授权类,是一个描述授权核心类的内文件,这些字符通过javassist工具动态生成类的。
4、 在破解过程中,需要经常把byte数组写入到文件,然后通过反编译工具查看核心 代码。
5、 了解rsa原理,私钥加密,公钥解密。
三、 步骤
1、 通过luyten反编译com.fr.plugin.bridge. Start,然后通过获取的解密A文件密钥及 A的文件名。
2、 通过获取的解密及文件名A生成文件A对应的class文件,反编译A对应的class文件,然后通过获取的解密B文件密钥及B的文件名,直到最后一个文件,必须要获取最后一个文件才可破解。
3、 通过最后文件对应的密钥解密,解密com.fr.plugin.bridge.A目录下的所以classx文件,解密出来的文件如下的图3.3.1:
图3.3.1
4、 通过反编译软件查看代码,代码如下图3.4.1:,然后根据代码获取实际实现代码,说明如表3.4.1
图3.3.1
方法名 |
说明 |
String D() |
实际类名 |
byte[] E() |
获取实际类的byte |
A() |
Md5核验码 |
表3.3.1
5、 使用javassis修改com.fr.license.selector.EncryptedLicenseSelector这个类中是解密。
6、 把com.fr.license.selector.EncryptedLicenseSelector生成对应的classx文件,通过winrar工具把这个文件放到jar对应的位置。
7、 修改最后一个加载类,然后生成对应classx放入jar文件。
8、 修改com.fr.plugin.bridge. Start文件,通过这个文件直接解密最后一个classx文件,否则需要替换100多个classx文件。
9、 了解代码,编写lic文件生成类,生成相关许可。
四、 结语
破解是一个艰难的过程,艰难程序不亚于编写一个程序,需要了解技术原理、编写相关工具代替重复劳动、也需要修改相关代码,通过这次破解,总体上还是收获很大的,对个人技术提升有很大的帮助,也由衷佩服写授权模块的技术大牛,真的很利害。
最后强调,本人偿试破解只是为了了解技术,学习技术,写这个文章与各网友分享也是为了提升技术,请勿用于商业用途,尊重他人的劳动成果。
QQ:279505686