最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

DBeaver-EE注冊(cè)分析

2020-02-01 17:35 作者:GCC醬_0ff1c1a1  | 我要投稿

最近拿電腦上另一塊SSD裝了Fedora玩.在尋找數(shù)據(jù)庫(kù)管理軟件Navicat替代品的時(shí)候發(fā)現(xiàn)了DBeaver. 而且EE版太強(qiáng)大,所以我就想要破解看看.

就是這個(gè)玩意

0x00 下手

申請(qǐng)一個(gè)Trial然后看看許可格式.以下是使用許可.


GcEVPtVH+fzyCX3Jw/b2iDGHIYe20IwwGGzvCaSvgN+SOLyeOfmhTgIXkhhuJsCi7Ov/7Sy2Hpk3

VdHjehLS727GlKOKKKkZ6s9C8bt+Aw4WEhDsivOJpQt5eLUjvDLhZC0ols4R9kIXHRo1KcS5AaHy

8EWhdiuxPOJdHTR01waJUvb4RdH8Ldi2m2CNB93sv1OTMvzoDX1oWUnWGN8mL7K0UU+3ksy06a0O

/AU8wueD1yaXHQp9OML5WmBDZapiuSKoQUH/dPhu6C7XRj1EAiTueNibb9rSfbhlUYKgA/1is4nW

42xwiN3+jzQrBYO1NQIYAlGHxlsJ0+IxqVLHCw==

很明顯是Base64編碼的內(nèi)容.根據(jù)我之前破GitLab和ElasticSearch的經(jīng)驗(yàn)來(lái)看,里面肯定有加密.那么接下來(lái)就分析一下如何加解密.

0x01 靜態(tài)分析

一般來(lái)說(shuō)我會(huì)先用Bytecode-Viewer(下簡(jiǎn)稱BV)來(lái)反編譯JAR.首選三大反編譯器是

  • CFR

  • FernFlower

  • JD-GUI

BV的好處就是可以同時(shí)使用多種反編譯器進(jìn)行對(duì)比.

那么先進(jìn)入DBeaver文件夾康康. 找license關(guān)鍵詞找不到任何結(jié)果,但是有幾個(gè)東西引起了我的注意.?

事實(shí)上這些就是跟許可驗(yàn)證相關(guān)的包. 拖入BV

許可驗(yàn)證的包

中了中了. 那隨便拉幾個(gè)類看看?

PublicServiceClient.class
LMEncryption.class
LicenseImportDiaglog.class

為了搞清楚類之間的調(diào)用關(guān)系,我們可以用IDEA的反編譯器,其核心是FernFlower.

關(guān)于如何用IDEA反編譯JAR以及如何進(jìn)行調(diào)試我會(huì)寫另外一篇文章來(lái)介紹.


從 LicenseImportDiaglog可以看到從文本中導(dǎo)入許可的方法(方法名:importLicenseFromText),那么我們就在IDEA中追下去.

導(dǎo)入
轉(zhuǎn)到實(shí)現(xiàn) 用Ctrl+Alt+B

之前說(shuō)過許可一定是經(jīng)過加密的,所以下面這個(gè)方法就顯得非常重要了

導(dǎo)入解密Key

選擇第一個(gè)

選擇

跟下去,發(fā)現(xiàn)是從JAR讀取

這是一個(gè)新的JAR 我們打開看看

找到公鑰

Nice,這應(yīng)該就是解密用的公鑰了

讀取加密的字符串

廬山真面目

讀取加密字符串

其實(shí)就是邏輯很簡(jiǎn)單.如果這一行不是 - 或者 # 開頭,就把它讀入結(jié)果,當(dāng)讀取完成時(shí),將這些內(nèi)容Base64解密送回.

回來(lái)以后就要跟蹤這個(gè)方法了

從讀出來(lái)的數(shù)據(jù)中獲取PublicKey

方法反編譯如下

其實(shí)沒啥好說(shuō)的,標(biāo)準(zhǔn)的Java RSA處理.

Java Security中的Key對(duì)象應(yīng)該是一個(gè)泛型??

因?yàn)檫@個(gè)方法返回的對(duì)象是 PublicKey 但是?getDecryptionKey 要求返回的是 Key.中間沒看到任何強(qiáng)制轉(zhuǎn)換,所以我猜測(cè) Key 對(duì)象可以包含 PrivateKey 和 PublicKey 兩種對(duì)象.

分析完 Key 讀取接下來(lái)分析如何解密許可


new了一個(gè)LMLicense實(shí)例

LMLicense.class反編譯內(nèi)容過長(zhǎng),這里我就只放出類內(nèi)變量

LMLicense類內(nèi)變量

有內(nèi)味了.這里應(yīng)該就是許可的具體數(shù)據(jù)了.

在構(gòu)造方法中看到了解密

解密方法

好 跟下去看解密

哦 標(biāo)準(zhǔn)的?RSA/ECB/PKCS1Padding 加解密啊.

至此,解密流程已經(jīng)清楚了. 用一句話概括就是Base64解密以后再用?RSA/ECB/PKCS1Padding 進(jìn)行解密.

0x02 許可格式分析

下面就是如何讀取許可數(shù)據(jù)了,是一個(gè)字節(jié)數(shù)組. 代碼截圖過長(zhǎng)我就不放了.下面只放結(jié)果

貌似B站這個(gè)編輯器里沒看到表格? 那我只能放截圖了

許可格式

許可格式2
許可格式3

至于然后就是一些對(duì)類內(nèi)變量的Getter和Setter,沒啥好說(shuō)的.

下面還有一些方法是做判定的,沒有細(xì)讀,就不放出來(lái)了.

0x03 聯(lián)網(wǎng)驗(yàn)證分析

從 com.dbeaver.lm.core 包中找到的?com.dbeaver.lm.validate.PublicServiceClient 類記錄了聯(lián)網(wǎng)驗(yàn)證.

這里說(shuō)一下FernFlower的特性(Bug x

如果定義了 public static final String 或者其他什么帶有 P/S/F 三種特性的常量,并且在下面有調(diào)用的話. FernFlower會(huì)用變量?jī)?nèi)容替換掉下面的變量名.

FernFlower
CFR

主要的聯(lián)網(wǎng)驗(yàn)證有三個(gè)方法

  • ping 應(yīng)該是用來(lái)測(cè)試服務(wù)器的. 返回內(nèi)容是"pong".

  • checkCustomerEmail 檢查用戶郵箱和許可是否符合? 正確的話返回用戶id

  • generateTrialLicense 申請(qǐng)?jiān)囉迷S可,下文再談

  • checkLicenseStatus 檢查許可狀態(tài),符合返回 "VALID: Ok".不符合返回示例"INVALID: License 'DB-ZS1MPZK4--FVC' not found"

接下來(lái)說(shuō)一下他是如何申請(qǐng)?jiān)囉迷S可的.

調(diào)用?generateLicenseRequest 方法來(lái)一段XML.


XML生成

生成的XML大概樣子如下

<?xml version="1.0" encoding="UTF-8"?>

<request license="trial" productId="dbeaver-ee" productVersion="6.3">

<customer email="寧の郵箱" firstName="XXX" lastName="XXX" company=""></customer>

</request>

發(fā)送到?https://dbeaver.com/lmp/generateTrialLicense

請(qǐng)求試用許可

這里圖中的utilmate只是自己隨便玩亂寫的,實(shí)際上寫什么獲取到的都是Trial許可.

0x04 動(dòng)態(tài)調(diào)試

嘛,沒什么好說(shuō)的,給DBeaver加上Java的啟動(dòng)參數(shù) 然后IDEA連接到調(diào)試即可.

在已知的幾個(gè)地方下斷點(diǎn),然后導(dǎo)入一份試用許可去看流程.

主要是跟蹤一下他導(dǎo)入密鑰的全過程,梳理一遍而已.

0x05 總結(jié)

DBeaver許可和注冊(cè)就分析到這里.更多內(nèi)容見稍后發(fā)布的視頻.

DBeaver-EE注冊(cè)分析的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
台北县| 金坛市| 贵州省| 哈尔滨市| 昌宁县| 商都县| 南丰县| 资阳市| 泊头市| 白朗县| 张家港市| 吴川市| 巴林右旗| 闵行区| 西畴县| 天祝| 阳原县| 兰西县| 南汇区| 桂东县| 阳谷县| 安化县| 蒲江县| 荔浦县| 长沙市| 三亚市| 日照市| 岳西县| 偏关县| 手机| 陇西县| 黔西县| 崇阳县| 桐庐县| 青冈县| 乌审旗| 米脂县| 京山县| 乳山市| 常熟市| 洪洞县|