本身动手破解Z.EntityFramework.Extensions 4.0.11.0的方法

由于项目中使用到Z.EntityFramework.Extensions 和 Z.EntityFramework.Plus(免费开源)两个类库,可是Z.EntityFramework.Extensions是收费的,只能无偿使用一个月,之前的版本能够用序列号生成器注册,可是如今新版本修改了序列号验证的规则因此已经没办法使用了,网上能够找到一篇破解文章,但也是很老的版本,写的也不是很详细,在破解的过程当中遇到一些问题,做者也没有明确说明。最后经过Google解决了。虽然不是很完美,但也能用了。后面我会把问题写清楚,但愿后面会有好的建议。git

简单介绍一下Z.EntityFramework.Extensions,Z.EntityFramework.Plus这两个项目的功能:主要是提高性能,对于一次提交大批量数据好比Excel批量导入,使用EF6自带的SaveChanges要等待好久(EF Core版本已经明显改善),但使用BulkSaveChanges速度就很是的快,改善很是明细,另外Z.EntityFramework.Plus,提供的Query Filter,Batch Update,Batch Delete方法也很是有用,能省很多工时。github

下面说一下破解过程算法

准备条件&工具

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方便spa

具体步骤

从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后必须先清除掉全部的assembly3d

打开须要破解 Z.EntityFramework.Extensions-cleaned.dll,并搜索ValidateLicensecode

 最终指向最关键的地方,我这边的作法是直接注销掉if和throw的代码行,其它的不要修改blog

 单击修改代码

 单击complier,若是没有异常就说明修改为功了,但也可能会遇到,好比

 这就说明脱壳失败,须要调整脱壳的参数来解决

 直接保存就行了。可是依然没法使用,由于这个dll还有签名,你篡改了代码从新编译后签名验证就没法经过,因此这里还须要移除掉签名验证才能使用

移除签名验证,使用Strong.Name.Helper删除签名

到这里基本上破解完成了,在引用到项目中就能够使用了。

最后发现一个问题

  由于个人项目中使用了Z.EntityFramework.Plus而最新版本居然依赖Z.EntityFramework.Extensions 4.0.11.0而且是验证签名的,因此如今最新版本Z.EntityFramework.Plus由于修改了签名,也没法使用了,我临时的解决方法只能降级1.10.3(这个版本是单独没有依赖)。

      这里可能须要从新签名,可是签名也没有私钥,因此我如今还不知道要怎么解决这个问题。

相关文章
相关标签/搜索