當前位置:
首頁 > 最新 > StarUML破解筆記

StarUML破解筆記

1.前言

這個學期開了uml的課程,老師讓下載了一個staruml,結果不是個免費軟體,看了一價格竟然要70美元,於是就看看能不能試著破解一下。雖然過程中查到網上有許多教程,不過都是直接改文件的那種,但是本著學習的態度,我決定從頭到尾開始弄,最後做個激活碼生成的工具來,雖然並不是很難,但是卻也學到不少東西。

2.過程

首先進入StarUML的安裝目錄,發現是nodejs寫的,然後打開軟體,在輸入激活碼的地方隨意輸入下試試,返回錯誤信息:,進入其根目錄下的www目錄,裡面有個main.js,體積挺大,打開試著查詢了下剛才返回的錯誤提示,還真有,而且,還意外的看到其上方有一個RSA的私鑰,然後我猜著估計就是RSA加密的密鑰,可惜不知道數據格式,接著分析。

在www目錄里有個license目錄,進入裡面發現有個node,再進入node目錄發現有一個叫的文件,打開後可以清楚的看到其驗證激活碼的函數,代碼如下:

varNodeRSA=require("node-rsa");

functionvalidate(PK,name,product,licenseKey){

varpk,decrypted;

try{

pk=newNodeRSA(PK);

decrypted=pk.decrypt(licenseKey,"utf8");

}catch(err){

returnfalse;

}

varterms=decrypted.trim().split("
");

if(terms[]===name&&terms[1]===product){

return{

name:name,

product:product,

licenseType:terms[2],

quantity:terms[3],

licenseKey:licenseKey

};

}else{

returnfalse;

}

}

通過代碼可以知道,激活碼里可能主要有以下幾個屬性:

name

product

licenseType

quantity

屬性之間使用來分隔,各部分都是幹嘛還是挺明了的,不過具體值是什麼還是要接著分析,但是這下我們已經知道了其數據的主要格式了,又因為目前我們現在只知道私鑰,並不知道公鑰,無法加密,於是我們通過私鑰來生成公鑰,首先將私鑰保存到文件,將裡面的
給替換成換行符,然後使用openssl來求公鑰,命令如下:

運行後,我們便可以得到公鑰。

然後回到mian.js這個文件接著分析,在錯誤提示的附近可以找到這樣一段代碼:

這個是調用剛才的那個激活碼驗證的函數,可以看到傳入的參數,由傳入的參數可以知道,product的值是的值,那麼這個屬性是什麼呢,在www目錄中有個文件,打開可以看到有個的屬性,這個就是product的值。然後應該是用戶名,這樣只剩下licensetype和quantity沒有解決了,繼續分析main.js,在向下分析的時候,看到這樣一段代碼:

varlicenseStatus=LicenseManager.getStatus();

if(licenseStatus===LicenseManager.STAT_REGISTERED){

varinfo=LicenseManager.getLicenseInfo(),

licenseTypeName;

switch(info.licenseType){

case"PS":

licenseTypeName="Personal";

break;

case"CO":

licenseTypeName="Commercial";

break;

case"ED":

licenseTypeName="Educational";

break;

case"CR":

licenseTypeName="Classroom";

break;

}

$license.html("Licensed to "+info.name);

$licenseType.html(licenseTypeName+" License");

$quantity.html(info.quantity+" User(s)");

這是個關於裡面顯示的,如果我們註冊成功就會顯示相應的註冊信息,裡面有個switch,可以看到所擁有的幾個licesetype值,以及下面的quantity可以知道是類似於註冊給誰或哪個組織的那種東西,於是,至此,這樣東西就全明白了,可以開始生成註冊碼了。

在一開始我是用php寫的,但是一直不對,後來查詢了一下,因為staruml使用的是node-rsa這個模塊,而這個模塊默認使用的是pskc#1 oaep填充的方式,而php的openssl相關函數默認使用的pskc#1的填充方式,但是我把填充方式改成oaep的時候,卻無法返回任何值,也沒有查到相關資料,困擾了好久最後還是決定使用nodejs來寫了,畢竟可以直接用他的node-rsa模塊,最終生成的密文使用base64加密。代碼沒有什麼難度,主要代碼如下:

varNodeRSA=require("node-rsa");//引入模塊

varkey=newNodeRSA(pk);//載入公鑰

res.write(key.encrypt(data,"base64"));//加密數據

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 信安之殤 的精彩文章:

TAG:信安之殤 |