Ext.NET 4.1 最新版本破解

来源:http://www.cnblogs.com/zhangtingzu/archive/2016/12/06/6137612.html
-Advertisement-
Play Games

Ext.NET 4.1 最新版本破解 今天在將Ext.NET 4.1版本的程式發佈到公網時居然要license(localhost和127.0.0.1不收費),而且一年$4999,突然間覺得這是什麼鬼,居然還收費!如圖: 大大的一個UNLICENSED! 網上搜索破解方法,好像都沒什麼用,唯一有啟發 ...


Ext.NET 4.1 最新版本破解

今天在將Ext.NET 4.1版本的程式發佈到公網時居然要license(localhost和127.0.0.1不收費),而且一年$4999,突然間覺得這是什麼鬼,居然還收費!如圖:

大大的一個UNLICENSED!

網上搜索破解方法,好像都沒什麼用,唯一有啟發的是這篇文章(雖然不能解決我的問題):

http://blog.csdn.net/xyun52/article/details/24011507

下麵就具體說下我是如何破解該問題的:

右鍵查看了一下源碼,license多了以下兩個:

<link type="text/css" rel="stylesheet" href="/ExtTest/extnet/unlicensed/css/un-embedded-css/ext.axd?v=4.1.0" />
<script type="text/javascript" src="/ExtTest/extnet/unlicensed/un-js/ext.axd?v=4.1.0"></script>

一個樣式文件,一個js文件。

為了一探究竟我打算用Reflector反編譯看看究竟Ext.Net.dll里對License封裝了什麼,

由於內容較多,我直接搜索”License”,結果還是挺滿意的:

看Resouces,正好一個樣式文件,一個js文件。

先看看Resources部分:

1.先看中間圖片:Ext.Net.Build.Ext.Net.extnet.unlicensed.images.attention.png

 

這就是圖1里顯示警告的圖。

2.再來看js方法:Ext.Net.Build.Ext.Net.extnet.unlicensed.un.js
Ext.onReady(function () {
            Ext.Function.defer(function () {
                var el = Ext.DomHelper.append(document.body, {
                    tag: "div",
                    id: "unlicensed",
                    children: [{
                        tag: "div",
                        class: "ul-title-icon",
                        children: [{
                            tag: "img",
                            width: 48,
                            height: 48,
                            src: Ext.net.ResourceMgr.resolveUrl("~/extnet/unlicensed/images/attention-png/ext.axd")
                        }]
                    }, {
                        tag: "div",
                        class: "ul-title",
                        html: "UNLICENSED!"
                    }, {
                        tag: "hr",
                        class: "ul-hr"
                    }, {
                        tag: "div",
                        class: "ul-body",
                        html: "Your copy of Ext.NET is unlicensed!<br />Ext.NET can be used without a license only on a local development environment."
                    }, {
                        tag: "a",
                        class: "ul-btn",
                        href: "http://ext.net/store/",
                        target: "_blank",
                        html: "PURCHASE LICENSE"
                    }, {
                        tag: "div",
                        class: "ul-footer",
                        html: "Free Minor Version Upgrades Included!"
                    }]
                }, true);

                el.alignTo(document, "br-br", [-20, -20]);
                el.slideIn("b", {
                    listeners: {
                        afteranimate: function () {
                            Ext.Function.defer(function () {
                                el.slideOut("b", {
                                    listeners: {
                                        afteranimate: function () {
                                            Ext.Function.defer(el.destroy, 100, el);
                                        }
                                    }
                                });
                            }, 20000);
                        }
                    }
                });
            }, 500, window);
        });

圖1里的警告信息就是來自於這裡。

 

再來看看ResourceManager部分:

下麵來分析LicenseKey和IsValidLicenseKey:

 LicenseKey反編譯代碼:

[DefaultValue(""), Description("")]
public virtual string LicenseKey
{
    get
    {
        if (this.licenseKey != null)
        {
            return this.licenseKey;
        }
        if (base.DesignMode)
        {
            return "";
        }
        if (Globals.Context != null)
        {
            string name = "Ext.Net.LicenseKey";
            object obj2 = Globals.Application[name];
            if (obj2 == null)
            {
                obj2 = Session(name);
            }
            if ((obj2 != null) && (obj2 is string))
            {
                return (string) obj2;
            }
        }
        return GlobalConfig.Settings.LicenseKey;
    }
    set
    {
        this.licenseKey = value;
    }
}
 

 

這段代碼的功能就是獲取LicenseKey的值:從某個地方讀取(比如session)名稱為” Ext.Net.LicenseKey”的值。

IsValidLicenseKey反編譯代碼:

public bool IsValidLicenseKey
{
    get
    {
        if (!this.isValidLicenseKey.HasValue)
        {
            this.isValidLicenseKey = false;
            string licenseKey = this.LicenseKey;
            if (licenseKey.IsNotEmpty())
            {
                try
                {
                    licenseKey = licenseKey.Base64Decode();
                }
                catch (FormatException)
                {
                }
                if (licenseKey.IsNotEmpty())
                {
                    int num;
                    DateTime time;
                    string[] strArray = licenseKey.Split(new char[] { ',' });
                    if ((((strArray.Length == 3) && int.TryParse(strArray[1], out num)) && ((num >= 4) && DateTime.TryParseExact(strArray[2], "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out time))) && (time >= DateTime.Now))
                    {
                        this.isValidLicenseKey = true;
                    }
                }
            }
        }
        return this.isValidLicenseKey.Value;
    }
}
 

 

這段代碼的作用就是對LicenseKey的值進行校驗,可以獲取到LicenseKey值的信息為:

1. LicenseKey值是以逗號分隔的;

2.逗號分隔後,長度為3;

3.逗號分隔後,第2個值為數字,且大於等於4;

4. 逗號分隔後,第3個值為日期,且要大於當前時間,格式為"yyyy-MM-dd",可以猜測為這個值為有效期。

根據這些信息,LicenseKey的值很快可以構建出來,比如:“net,5,2018-11-11”

 

再註意到這行代碼:

licenseKey = licenseKey.Base64Decode();

這就是LicenseKey的編碼格式,也就是說傳入的LicenseKey不能直接是“net,5,2018-11-11”這樣的值,必須是經過轉換後的,

跟進去看一下代碼:

public static string Base64Decode(this string text)
{
    Decoder decoder = new UTF8Encoding().GetDecoder();
    byte[] bytes = Convert.FromBase64String(text);
    char[] chars = new char[decoder.GetCharCount(bytes, 0, bytes.Length)];
    decoder.GetChars(bytes, 0, bytes.Length, chars, 0);
    return new string(chars);
}

 

 

使用的方法是:Convert.FromBase64String(text),很顯然,編碼方式給的很徹底,這裡直接給出轉換代碼:

string LicenseKey = "net,5,2018-11-11";
byte[] b = Encoding.Default.GetBytes(LicenseKey);
LicenseKey = Convert.ToBase64String(b);
Session["Ext.Net.LicenseKey"] = LicenseKey;

最後以Session傳值(只需要上面4行代碼即可),搞定。

看,沒有警告了,而且是真正通過驗證了。

好了,破解就研究到這裡吧。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 關於英文對程式員的重要性,就不多說了!英語的學習,有很多,今天也不聊多,只聊英語單詞!關於單詞的記憶,找過很多方法,下載過很多軟體,後來...... ...
  • DateTime.Now.AddDays(10).ToShortDateString().ToString() addDays(整數) 一天前DateTime.Now.AddDays(-1).ToShortDateString().ToString() 一天後DateTime.Now.AddDays ...
  • 簡介 此樣式基於bootstrap-3.3.0,樣式文件里的源碼行數都是指的這個版本.CSS源文件放到了Content文件夾下的bootstrap.css WPF樣式和CSS還是不太相同,所以有些內容實現上稍有出入,有些內容用法不太一樣,有些內容並沒有實現 但至少,一些概念,尺寸和取色,還是很好的借 ...
  • 上一篇我們將 "XAML" 大概做了個瞭解 ,這篇將繼續學習WPF數據綁定的相關內容 數據源與控制項的Binding 作為數據傳送UI的通道,通過 介面的 事件通知 數據屬性發生改變 通過Binding關聯UI控制項元素 控制項之間的Binding 我們也可以通過後臺C 代碼實現 統計文本字元長度 Bin ...
  • @echo offInstallutil.exe 程式目錄 F:\test\TestWindows.exe 服務程式目錄@sc start "服務名稱"@sc config "服務名稱" start= 啟動方式:AUTO@echo off@echo 服務安裝並啟動完成pause 示例: @echo ...
  • ...
  • 1.開發人員在火狐瀏覽器里經常使用的工具有Firebug,httprequester,restclient......火狐瀏覽器有一些強大的插件供開發人員使用!需要的可以在附加組件中擴展。 2.httprequester,也是可以在附加組件中獲得的,你只要輸入這個名詞,搜索安裝。 web開發人員一般 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...