因為項目中使用到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方便
具體步驟
從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 de4dot@gmail.com 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 de4dot@gmail.com 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 //說明第一步脫殼成功了
使用dnSpy修改代碼,去掉驗證有效期的代碼
注意:打開dnSpy后必須先清除掉所有的assembly
打開需要破解 Z.EntityFramework.Extensions-cleaned.dll,並搜索ValidateLicense
最終指向最關鍵的地方,我這邊的做法是直接注銷掉if和throw的代碼行,其它的不要修改
單擊修改代碼
單擊complier,如果沒有異常就說明修改成功了,但也可能會遇到,比如
這就說明脫殼失敗,需要調整脫殼的參數來解決
直接保存就好了。但是依然無法使用,因為這個dll還有簽名,你篡改了代碼重新編譯后簽名驗證就無法通過,所以這里還需要移除掉簽名驗證才能使用
移除簽名驗證,使用Strong.Name.Helper刪除簽名
到這里基本上破解完成了,在引用到項目中就可以使用了。
最后發現一個問題
因為我的項目中使用了Z.EntityFramework.Plus而最新版本竟然依賴Z.EntityFramework.Extensions 4.0.11.0並且是驗證簽名的,所以現在最新版本Z.EntityFramework.Plus因為修改了簽名,也無法使用了,我臨時的解決方法只能降級1.10.3(這個版本是單獨沒有依賴)。
這里可能需要重新簽名,但是簽名也沒有私鑰,所以我現在還不知道要怎么解決這個問題。