注:寫文檔目的主要用於技術學習,了解技術帆軟公司技術大牛是怎么設計系統,請勿用於商用。
一、 工具准備
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