直接修改.NET程序集 LLBL Gen 2.x-4.x 許可授權方法研究


做數據庫開發,如果要用ORM,LLBL Gen是一款優秀的框架和工具,目前最新版本是4.0。同時也推出了Lite免費版本,與Visual Studio的Express版本一樣,

免費,但是它僅僅只支持10個實體,可滿足學習的需要,做項目用則不行。

借助於MSIL知識和工具.NET Reflector,我可以直接對.NET程序集進行編輯,去掉許可證授權驗證窗口,轉化為可用的軟件。

請參考下面的.NET代碼,它是LLBL Gen應用Xml簽名驗證許可的關鍵程序片段:

public static LicenseInfo Verify(string signedXml, Action<string, string> messageReporterFunc, Action<string, string> errorDisplayFunc,
 DateTime nullDate)
{
    SignedXml xml = new SignedXml();
    RSACryptoServiceProvider key = new RSACryptoServiceProvider();
    key.FromXmlString("<RSAKeyValue><Modulus>la+31RHN9+rLO3AWuQYtOZeAdN+YzdNUqFi5gZ0DYHXLUkhptBxvVrtFc3Obv
eiMpdslmFtffBD6fIiYXDQc6xAO4d/9VvYIMK8We9tvZrydXYSakf3GDICd09TkUXk3SLX6aNITsnb4xxPKWHPsv4+PFptRwn99Kh2bN8U
HNBs=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>");
    XmlDocument document = new XmlDocument {
        PreserveWhitespace = true
    };
    document.LoadXml(signedXml);
    XmlNodeList elementsByTagName = document.GetElementsByTagName("Signature");
    xml.LoadXml((XmlElement) elementsByTagName[0]);
    if (!xml.CheckSignature(key))
    {
        if (errorDisplayFunc != null)
        {
            errorDisplayFunc("The license file signature is invalid", "Invalid license file");
        }
        return null;
    }
    LicenseInfo info = LicenseInfo.CreateLicenseInfo(document.SelectSingleNode(".//LLBLGenProLicense"));
    if (!info.Expires || (((info.UtcLicenseCreationDateTime <= DateTime.UtcNow) && (info.ExpirationDate >= DateTime.Today)) && (nullDate <= DateTime.Now.ToUniversalTime())))
    {
        return info;
    }
    if (messageReporterFunc != null)
    {
        messageReporterFunc(string.Format("The {0} period has ended as your license has expired.", info.TypeOfLicense.ToString().ToLowerInvariant()), "License expired");
    }
    return null;
}

關於Xml Signature,目前流傳的方法是替換Xml密匙對,重新簽名,這種方法是可行的。但還有別的途徑可以做到。

既然可以申請到官方的試用版,如何判斷試用過期,將過期后的處理(拋出異常,或是直接退出)這一段代碼處理掉即可。參考上面的代碼,過期后,這個方法會返回null,

如果可以將最后一句return null改成 return info,返回許可文件信息,再結合其它的判斷,便可以繞開許可證限制,繼續使用該軟件。

image

在圖中,將我標識的部分刪除,再另存為.NET 程序集,替換原來的程序集,即可繞開驗證機制,繼續使用過期的軟件。

因為可以直接修改代碼,所以方法千變萬化,也可以這樣改代碼,把上面的相同行的代碼改成

if (info.Expires.....

這表示,即使過期了,也繼續返回該許可文件信息,不拋出異常。

涉及到代碼中要改的地方是brfalse.s改成brtrue.s ,把條件跳轉的false改成true,改變流程跳轉。

 

通過學習MSIL語言,可以了解.NET底層的一些處理機制,僅僅是了解層面,大部分時間都在做數據庫領域相關的工作,

在程序設計領域,通過MSIL的學習,我體會到的一點是,代碼中要盡量避免box/unbox,另外一項好處,就是這里給大家介紹的,

做一些額外的工作,不以獲取利益為目標,打發平時的業余時間。

如果想對MSIL語言有多一些的了解,請參考我的文章 代碼大全 MSIL語言程序設計


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM