1. 程式人生 > >解決AspNet Zero Core 5.0.1無法運行的問題

解決AspNet Zero Core 5.0.1無法運行的問題

add ted tor principal 了吧 resharper 實現 stat 方便

  

  最近在研究AspNet Zero Core 5.0.1時發現VS點擊調試後就自動退出了,從ABP QQ群裏得知作者加入了licensecode校驗。經過一個周左右斷斷續續的折騰,算是破解了吧。原本想把加密類完全反編譯出來,後來發現有些方法反編譯不過來,所以有些方法就直接註釋掉實現了(關鍵方法未能反編譯,比較遺憾)。

  一、說明

  二、運行效果

  三、工具軟件

  四、反編譯過程

    • 找到他們
    • 使用dotPeek反編譯並導出工程
    • 反編譯Abp.AspNetZeroCore.Web.dll
    • 反編譯Abp.AspNetZeroCore.dll

  五、源碼Github地址

、說明

  如果對反編譯不感興趣的話,可以直接從github下載下來源碼之後,把ABP文件下的兩個工程Abp.AspNetZeroCore、Abp.AspNetZeroCore.Web編譯一下拿到dll直接將AspNet Zero Core 5.0.1工程裏的對應引用替換掉就可以了。

  拿到AspNet Zero Core 5.0.1源碼後會發現有兩個應用的dll在ABP github上是沒有源碼的,一個是在工程MyCompanyName.AbpZeroTemplate.Core裏引用的Abp.AspNetZeroCore,另一個是在工程MyCompanyName.AbpZeroTemplate.Web.Core裏引用的Abp.AspNetZeroCore.Web。分析之後做校驗的代碼在Abp.AspNetZeroCore這個dll中,具體方法為AbpAspNetZeroCoreModule類的PostInitialize方法中調用了另一個類AspNetZeroLicenseChecker的Check方法,破解的話直接將PostInitialize註釋掉或去掉Check方法中的代碼實現即可。如下圖:

技術分享圖片

二、運行效果

  破解後的軟件運行截圖,

  服務端:

  技術分享圖片

 前端界面:

  技術分享圖片

三、工具軟件

  反編譯過程中,我使用了兩個軟件:

  1.Resharper套件之一,JetBrains dotPeek 2017.3.2。

2.ILSpy version 3.0.1.3459。

四、反編譯過程

  4.1.找到他們

  取得源碼用VS還原nuget包之後,會在系統盤目錄(C:\Users\Administrator\.nuget\packages)中找到這兩個dll(Abp.AspNetZeroCore.dll,Abp.AspNetZeroCore.Web.dll)。

技術分享圖片

  4.2 使用dotPeek反編譯並導出工程

  將兩個dll使用dotPeek反編譯,然後在dotPeek的程序集管理其中,選中工程在右鍵菜單中選擇Export to Project

  技術分享圖片

  反編譯完成之後比較尷尬的是生成工程的.net版本為.net framework 2.0,我們自己創建個.Net Standard工程然後把反編譯出來的文件拷貝到創建的解決方案裏就可以了。兩個dll的處理方法類似。

  工程建立完之後引入到源代碼裏,引入之後我的工程目錄結構如下所示,為了調試方便我把對ABP類庫的引用都替換成了源代碼工程引用:

  技術分享圖片

4.3 反編譯Abp.AspNetZeroCore.Web.dll

  這個dll比較簡單,先從簡單的入手吧,這個dll中主要就反編譯一個類就可以了,如下圖   

  技術分享圖片

  這個類中4,5兩處沒看明白有什麽用途,直接刪掉了;2,3兩處其實就是對應類實例的屬性所以ctx.set_User(authenticateResult.get_Principal())直接改為ctx.User=val.Principal,

  authenticateResult.get_Succeeded() && authenticateResult.get_Principal() != null直接改為val.Succeeded && val.Principal != null。return 語句UseExtensions.Use這塊兒實際

  上是方法參數app的擴展方法。所以整段代碼整理之後如下:

  技術分享圖片

  這個dll主要反編譯這一個類就可以了,其他反編譯的類不需要做額外處理。

4.4 反編譯Abp.AspNetZeroCore.dll

  這個就比較費勁了,一是代碼量大,二是有些代碼沒看懂怎麽反編譯,這個dll主要反編譯下面兩個類

  技術分享圖片

先看AspNetZeroBaseLicenseChecker這個類,這個類是AspNetZeroLicenseChecker類的基類,拿類的構造函數當 典型說一下一些個人的經驗吧,未調整的反編譯代碼如下:

技術分享圖片

  對照上圖標記:

  1.這個特性暫未發現有什麽用處,直接去掉;

  2.這個方法有對應的代碼如下:

   [MethodImpl(MethodImplOptions.NoInlining)]
    internal static object iZ5hxHC38E0NlGy6Ai([In] object obj0)
    {
      return (object) ((AspNetZeroConfiguration) obj0).LicenseCode;
    }

  實際上就是獲取了調用參數的一個特性,所以可以直接修改為 this.LicenseCode = configuration.LicenseCode;

  3.這個循環稍微麻煩一點,按照執行步驟一步一步走就行了,名字混淆的方法直接用方法實現替換,這種代碼少的好一些,理不亂,有些很長就有點兒頭疼了,這整段代碼搞來搞去其實就是兩句,整理後的代碼如下:

        protected AspNetZeroBaseLicenseChecker(AspNetZeroConfiguration configuration, IAbpZeroConfig abpZeroConfig, string configFilePath = "")
        {
            this.LicenseCode = configuration.LicenseCode;
            this._abpZeroConfig = abpZeroConfig;
        }

  其他的方法都可以按類似方式處理。

  AspNetZeroLicenseChecker這個類反編譯方法類似,但是這個類中的Check方法就搞不定了,dotPeek反編譯後的代碼如下:

技術分享圖片

  紅色方框中圈住的部分實在搞不懂是怎麽回事兒。各位園友如果有思路的話,可以提供一下。

五、源碼Github地址

  反編譯後的代碼放到github上了,有興趣的朋友可以下載下來研究一下,有問題歡迎留言討論

  https://github.com/YSmileX/AspNetZeroCore

解決AspNet Zero Core 5.0.1無法運行的問題