自己动手破解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方便
具体步骤
从nuget下载最新的Z.EntityFramework.Extensions.dll,为了方便直接把最新版本Z.EntityFramework.Extensions.dll(4.0.11.0) copy到 de4dot 运行目录下
- //执行脱壳命令
- //扫描使用的是什么加壳算法 参数-d
- de4dot -d Z.EntityFramework.Extensions.dll
- >>de4dot v3.1.41592. Copyright (C) - de4dot@gmail.com
- >>Latest version and source code: https://github.com/0xd4d/de4dot
- //提示无法识别
- >>Detected Unknown Obfuscator (Z.EntityFramework.Extensions.dll)
- //注意:如果不加参数直接脱壳,在ndSpy中修改后compiler会报错,说明脱壳失败
- //下面是我加了-p ds两个参数测试没有问题
- de4dot Z.EntityFramework.Extensions.dll -p ds
- >>de4dot v3.1.41592. Copyright (C) - de4dot@gmail.com
- >>Latest version and source code: https://github.com/0xd4d/de4dot
- >>Detected DeepSea (Z.EntityFramework.Extensions.dll)
- >>Cleaning Z.EntityFramework.Extensions.dll
- >>Renaming all obfuscated symbols
- >>Saving Z.EntityFramework.Extensions-cleaned.dll
- //说明第一步脱壳成功了
使用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(这个版本是单独没有依赖)。
这里可能需要重新签名,但是签名也没有私钥,所以我现在还不知道要怎么解决这个问题。
自己动手破解Z.EntityFramework.Extensions 4.0.11.0的方法的更多相关文章
- 破解EFCore扩展Dll --- Z.EntityFramework.Extensions.EFCore
安装 Z.EntityFramework.Extensions.EFCore Install-Package Z.EntityFramework.Extensions.EFCore -Version ...
- 第九节: EF的性能篇(二) 之 Z.EntityFramework.Extensions程序集解决EF的性能问题
一. 综述 该模块主要介绍:EF的性能优化插件Z.EntityFramework.Extensions,该插件收费. (一). 简介 1. 相关网站:http://www.zzzprojects.co ...
- 【EF】解决EF批量操作,Z.EntityFramework.Extensions 过期方案
方案一: 使用EntityFramework.Extended优点: 启下载量是Z.EntityFramework.Extensions的10倍+ 不会过期缺点:不能批量Insert 方案二:解决批量 ...
- Kafka 0.11.0.0 实现 producer的Exactly-once 语义(官方DEMO)
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients&l ...
- Windows下MySQL8.0.11.0安装教程
1.mysql下载地址:https://dev.mysql.com/downloads/installer/ 2.下载安装MySQL 8.0.11.0 https://cdn.mysql.com//D ...
- kafka 0.11.0.3 源码编译
首先下载 kafka 0.11.0.3 版本 源码: http://mirrors.hust.edu.cn/apache/kafka/0.11.0.3/ 下载源码 首先安装 gradle,不再说明 1 ...
- 测试EntityFramework,Z.EntityFramework.Extensions,原生语句在不同的查询中的表现。原来池化与非池化设定是有巨大的影响的。
Insert测试,只测试1000条的情况,多了在实际的项目中应该就要另行处理了. using System; using System.Collections.Generic; using Syste ...
- Kafka 0.11.0.0 实现 producer的Exactly-once 语义(中文)
很高兴地告诉大家,具备新的里程碑意义的功能的Kafka 0.11.x版本(对应 Confluent Platform 3.3)已经release,该版本引入了exactly-once语义,本文阐述的内 ...
- Kafka 0.11.0.0 实现 producer的Exactly-once 语义(英文)
Exactly-once Semantics are Possible: Here’s How Kafka Does it I’m thrilled that we have hit an excit ...
随机推荐
- 线上CPU飙升100%问题排查,一篇足矣
一.引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高. 二.问题复现 线上系统突然 ...
- Linux初识之Centos7中terminal光标位置偏移问题的解决
新安装的centos7打开terminal发现光标位置向右偏移,使用起来影响感官,经查询后找到类似情况并顺利解决问题,特记录解决过程以作参考. 1.未解决时光标向右偏移显示: 2.打开设置(Setti ...
- select2 分组后的选项无法被选中
在使用select2组件的过程中发现分组下的选项无法选中,与分组在同一级的选项可以被选中! 1.所用select2版本select2-4.0.32 2.HTML代码: <input id=&qu ...
- Java String 类解析
I.构造函数: public String() {} 默认构造函数 public String(String original) {} 使用原有字符串构造 public String(char va ...
- python实现感知机线性分类模型
前言 感知器是分类的线性分类模型,其中输入为实例的特征向量,输出为实例的类别,取+1或-1的值作为正类或负类.感知器对应于输入空间中对输入特征进行分类的超平面,属于判别模型. 通过梯度下降使误分类的损 ...
- 23种设计模式之责任链模式(Chain of Responsibility Pattern)
责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式. ...
- Flask基础(07)-->正则自定义转换器
正则自定义转换器 为什么要自定义正则转换器? 因为默认转换器太过于笨重,往往不能满足我们实际业务的需求,这时候我们就需要自定义正则转换器了. 那么我们怎么自定义正则转换器呢? from flask i ...
- 【SQL server基础】手动创建数据库和表格
use master go if exists(select * from sysdatabases where name='learning') drop database learning go ...
- json.dumps和json.loads
概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行json ...
- Cocos Creator一步一步实现重力球游戏
『 游戏玩法 』 通过手机陀螺仪,调整手机,让球从上一层的间隔中落到下一层,楼层会不断上涨,如果球碰到上方或者下方的火焰,游戏结束. 『 游戏预览 』 『 开发工具 』 1. CocosCreat ...