1. 程式人生 > >自己動手破解Z.EntityFramework.Extensions 4.0.11.0的方法

自己動手破解Z.EntityFramework.Extensions 4.0.11.0的方法

因為專案中使用到Z.EntityFramework.Extensions 和 Z.EntityFramework.Plus(免費開源)兩個類庫,但是Z.EntityFramework.Extensions是收費的,只能免費使用一個月,以前的版本可以用序列號生成器註冊,但是現在新版本修改了序列號驗證的規則所以已經沒辦法使用了,網上可以找到一篇破解文章,但也是很老的版本,寫的也不是很詳細,在破解的過程中遇到一些問題,作者也沒有明確說明。最後通過Google解決了。雖然不是很完美,但也能用了。後面我會把問題寫清楚,希望後面會有好的建議。

簡單介紹一下Z.EntityFramework.Extensions,Z.EntityFramework.Plus這兩個專案的功能:主要是提升效能,對於一次提交大批量資料比如Excel批量匯入,使用EF6自帶的SaveChanges要等待很久(EF Core版本已經明顯改善),但使用BulkSaveChanges速度就非常的快,改善非常明細,另外Z.EntityFramework.Plus,提供的Query Filter,Batch Update,Batch Delete方法也非常有用,能省不少工時。

下面說一下破解過程

準備條件&工具

de4dot   https://github.com/0xd4d/de4dot  脫殼工具,反混淆用的

dnSpy  https://github.com/0xd4d/dnSpy 反編譯工具,修改後程式碼重新編譯新的dll

Strong.Name.Helper.v1.7 https://forum.tuts4you.com/files/file/1145-strongnamehelperv17-whoknows-pass-bs7z/  移除簽名驗證

de4dot好像也有移除簽名(strong name)的功能,但沒有測試,還是Strong.Name.Helper方便

具體步驟

  1. 從nuget下載最新的Z.EntityFramework.Extensions.dll,為了方便直接把最新版本Z.EntityFramework.Extensions.dll(4.0.11.0) copy到 de4dot 執行目錄下
    •  1 //執行脫殼命令
       2 //掃描使用的是什麼加殼演算法 引數-d 
       3 de4dot -d Z.EntityFramework.Extensions.dll
       4 
       5 >>de4dot v3.1.41592.3405 Copyright (C) 2011-2015 [email protected]
       6 >>Latest version and source code: https://github.com/0xd4d/de4dot
       7 //提示無法識別
       8 >>Detected Unknown Obfuscator (Z.EntityFramework.Extensions.dll)
       9 
      10 //注意:如果不加引數直接脫殼,在ndSpy中修改後compiler會報錯,說明脫殼失敗
      11 //下面是我加了-p ds兩個引數測試沒有問題
      12 de4dot Z.EntityFramework.Extensions.dll -p ds
      13 
      14 >>de4dot v3.1.41592.3405 Copyright (C) 2011-2015 [email protected]
      15 >>Latest version and source code: https://github.com/0xd4d/de4dot
      16 
      17 >>Detected DeepSea (Z.EntityFramework.Extensions.dll)
      18 >>Cleaning Z.EntityFramework.Extensions.dll
      19 >>Renaming all obfuscated symbols
      20 >>Saving Z.EntityFramework.Extensions-cleaned.dll
      21 //說明第一步脫殼成功了

       

  2. 使用dnSpy修改程式碼,去掉驗證有效期的程式碼
    • 注意:開啟dnSpy後必須先清除掉所有的assembly
    •  

      開啟需要破解 Z.EntityFramework.Extensions-cleaned.dll,並搜尋ValidateLicense

       最終指向最關鍵的地方,我這邊的做法是直接登出掉if和throw的程式碼行,其它的不要修改

    •  單擊修改程式碼

    •  單擊complier,如果沒有異常就說明修改成功了,但也可能會遇到,比如

    •  這就說明脫殼失敗,需要調整脫殼的引數來解決

    •  直接儲存就好了。但是依然無法使用,因為這個dll還有簽名,你篡改了程式碼重新編譯後簽名驗證就無法通過,所以這裡還需要移除掉簽名驗證才能使用

  3. 移除簽名驗證,使用Strong.Name.Helper刪除簽名

到這裡基本上破解完成了,在引用到專案中就可以使用了。

最後發現一個問題

  因為我的專案中使用了Z.EntityFramework.Plus而最新版本竟然依賴Z.EntityFramework.Extensions 4.0.11.0並且是驗證簽名的,所以現在最新版本Z.EntityFramework.Plus因為修改了簽名,也無法使用了,我臨時的解決方法只能降級1.10.3(這個版本是單獨沒有依賴)。

      這裡可能需要重新簽名,但是簽名也沒有私鑰,所以我現在還不知道要怎麼解決這個問題。