Revit二次開發(fā) 插件加密、打包、發(fā)布、授權(quán)全套教程
本網(wǎng)站(www.mxbim.com)為開發(fā)者提供的功能主要有:有償?shù)能浖圪u服務(wù),軟件授權(quán)服務(wù),軟件推廣服務(wù),軟件信息發(fā)布服務(wù),軟件使用量統(tǒng)計(jì)服務(wù)。使用流程為:軟件開發(fā)完成->代碼加密及授權(quán)->在網(wǎng)站上發(fā)布產(chǎn)品->獲取收益。
代碼加密及授權(quán)
添加授權(quán)工具引用
在本文附件中找到MXBIM.Author.dll,VMProtect.SDK.dll,并添加這些dll為項(xiàng)目引用,注意,在開發(fā)時(shí)添加應(yīng)用為 未加密 文件夾下16k的MXBIM.Author.dll文件。
添加授權(quán)驗(yàn)證代碼段
#region 授權(quán)驗(yàn)證
#if !DEBUG
string guid = Properties.Resources.Softguid;//Guid可由任意軟件生成。為該軟件的唯一標(biāo)識(shí),務(wù)必牢記
string hwid = VMProtect.SDK.GetCurrentHWID();//軟件必須使用Vmprotect進(jìn)行加密,否則此函數(shù)無法正常執(zhí)行
if (MXBIM.Author.Verification.Verify(guid, "tt", hwid))
{
? string sn = MXBIM.Author.RegistryOperate.GetKeyValue(guid, MXBIM.Author.RegistryOperate.OperateKeys.SN);
VMProtect.SerialState sd = VMProtect.SDK.SetSerialNumber(sn);
if (sd != VMProtect.SerialState.Success)
??? {
?? ??System.Windows.Forms.MessageBox.Show("獲取授權(quán)失敗,請(qǐng)聯(lián)系開發(fā)商!");
???? ?? ?return Result.Succeeded;
??? ?}
? }
else
{
??? return Result.Succeeded;
}
#endif
#endregion
授權(quán)信息對(duì)話框代碼
?? [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
??? internal class author : IExternalCommand
??? {
??????? public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
??????? {
??????????? LicenseForm licF = new MXBIM.Author.LicenseForm(Properties.Resources.Softguid);
??????????? licF.SetSerialNumber += VMProtect.SDK.SetSerialNumber;???????
??????????? licF.Show();
??????????? return Result.Succeeded;
??????? }
??? }
使用VMProtect進(jìn)行代碼保護(hù)
代碼加密標(biāo)記
添加授權(quán)驗(yàn)證代碼完成后,需要VMProtect相關(guān)的屬性標(biāo)簽對(duì)相關(guān)方法進(jìn)行標(biāo)記。
注意務(wù)必在Release模式下編譯。
代碼標(biāo)記有:
[VMProtect.BeginUltra]標(biāo)記是VMProtect中用來開啟“超級(jí)保護(hù)模式”的標(biāo)記,通常在需要對(duì)非常重要的代碼進(jìn)行密集保護(hù)的情況下使用。在超級(jí)保護(hù)模式下,VMProtect會(huì)對(duì)代碼執(zhí)行流程進(jìn)行徹底混淆和加密,使得代碼難以被理解和破解。超級(jí)保護(hù)模式的加密性能會(huì)相對(duì)較低,因?yàn)樗鼘?duì)代碼進(jìn)行了大量的混淆和加密,但是由于其極高的安全性,對(duì)于需要極高安全性保護(hù)的程序代碼來說,使用超級(jí)保護(hù)模式是非常有效的。
[VMProtect.BeginMutation]標(biāo)記是用來開啟VMProtect的代碼變異功能的,它能夠?qū)Υa進(jìn)行多維度的變異和混淆。通過變異,VMProtect能夠使代碼的執(zhí)行流程變得更加難以理解,從而有效地增強(qiáng)程序代碼的保護(hù)性能。而且,由于VMProtect的變異算法是動(dòng)態(tài)的,每次變異的結(jié)果都不同,這也使得攻擊者難以對(duì)程序進(jìn)行攻擊和破解。
[VMProtect.BeginVirtualization]標(biāo)記是VMProtect采用的一種虛擬化技術(shù)。在虛擬化技術(shù)下,VMProtect會(huì)對(duì)C#代碼進(jìn)行轉(zhuǎn)換,將其轉(zhuǎn)為VMProtect的虛擬機(jī)指令,然后執(zhí)行加密后的指令。通過這種方式,VMProtect能夠達(dá)到非常高的安全性,即使攻擊者拿到加密后的代碼,在不獲得VMProtect的運(yùn)行環(huán)境的情況下,也難以理解和破解代碼的執(zhí)行邏輯。虛擬化是VMProtect中比較常用的一種技術(shù),在對(duì)重要代碼進(jìn)行保護(hù)時(shí),可以使用[VMProtect.BeginVirtualization]來開啟虛擬化模式。
簡單來說,[VMProtect.BeginUltra]是開啟超級(jí)保護(hù)模式,[VMProtect.BeginMutation]是開啟代碼變異功能,[VMProtect.BeginVirtualization]是開啟虛擬化功能。使用這些標(biāo)記可以在不同的情況下對(duì)C#程序的代碼進(jìn)行保護(hù),提高程序的安全性。
?
代碼加密
使用VMProtect軟件對(duì)軟件進(jìn)行加密,使用VMProtect打開前述編譯完成的dll文件,進(jìn)行如下設(shè)置:
對(duì)于第一次加密該軟件,在授權(quán)下點(diǎn)擊【通用】【添加授權(quán)】;
?
得到上述界面后,加密設(shè)置即完成,需要執(zhí)行【文件】菜單下【保存授權(quán)為】命令,并且保存該文件,軟件更新時(shí)在加密需要使用此文件。
執(zhí)行【項(xiàng)目】【導(dǎo)出密鑰對(duì)】命令,選擇導(dǎo)出格式為“用于KeyGen.Net/Pro Global的參數(shù)”選項(xiàng),復(fù)制該參數(shù)并保存至合適位置,在發(fā)布產(chǎn)品時(shí)需要該參數(shù)!
對(duì)于更新插件時(shí),在授權(quán)下點(diǎn)擊【通用】【使用其他項(xiàng)目文件】,在彈出的對(duì)話框中選擇第一次加密插件是導(dǎo)出的授權(quán)文件的位置,其余同;
發(fā)布產(chǎn)品
軟件打包
解壓Advanced.rar文件,注意路徑名稱中不要含有中文,點(diǎn)擊:AdvancedInstallerPortable.exe,
點(diǎn)擊添加文件夾后選擇需要打包的文件夾所在的位置,確保安裝包文件夾中已經(jīng)包含了 ?Revit插件必須添加文件 ?中包含的三個(gè)文件,
注意:開發(fā)添加引用的文件【MXBIM.Author.dll】需要使用【需要添加引用的庫】目錄下的【MXBIM.Author.dll】進(jìn)行替換
并且installParameter.json文件按照如下要求進(jìn)行了修改:
?
?
?
添加卸載時(shí)自定義操作
軟件發(fā)布
在www.mxbim.com 網(wǎng)站完成注冊(cè)并登錄后,在【我的】菜單下先完成申請(qǐng)成為開發(fā)者,并聯(lián)系網(wǎng)站管理員獲取 開發(fā)者權(quán)限,在網(wǎng)站中發(fā)布軟件并通過審核后,用戶可通過該授權(quán)平臺(tái)購買產(chǎn)品,開發(fā)者可獲取收益,該收益可在【我的】-【我的收益】中查看。
發(fā)布產(chǎn)品界面如下:
?
點(diǎn)擊【提交審核】,在審核完成后,該產(chǎn)品既可在【產(chǎn)品中心】頁面發(fā)布!
?
?
相關(guān)文件的獲取地址
百度網(wǎng)盤:鏈接:https://pan.baidu.com/s/1OVRGzbSRjoPKcLnSJOGmnA?pwd=mxmx
?
QQ交流群:649037449