【原创视频教程】破解高效率数据库批量操作类库Z.EntityFramework.Extensions
本帖最后由 梦里的畅泳 于 2019-2-13 17:24 编辑链接: https://pan.baidu.com/s/1AhflJ2ZdZzjCoN4hFRV2Pw 提取码: 15su
Z.EntityFramework.Extensions破解教程
---------------------------------------------------
此教程通用zzzprojects项目组的所有类库,最早使用是在17年的一个项目中,由于数据较多而且需要不重复的入库后来了解到这个库的批量操作
特别是BulkMerge合并方法真是异常的好用。
---------------------------------------------------
这是我的第二个.net破解教程,其实.net破解只要能脱壳花点时间相信都是没问题的,希望大家能够动手多练习。
--------------------------------------------------------------------------------------------
1、打开VS获取到类库,因为官网没有提供下载,只能通过nuget来下载包文件。
2、下载好文件后,导入到dnspy
3、通过官方的授权说明我们可以看到所有的授权操作都是在LicenseManager这个类里面的。我们直接搜索这个类,可以看到这里有些 \uE077.\uE008这样的字符
为了我们修改方便以及阅读方便我们用de4dot来重命名下
AddLicense 方法:
我们看到这个方法是添加一个许可证到类库里面是一个没有返回值的方法,这个方法只是做了一个输入校验,然后把key pwd都写入到一个集合里面
LicenseManager.concurrentBag_0
ValidateLicense 方法:
从字面上来理解这是一个验证输入key的方法,这个方法一共有3个重载,我们直接看最底层的方法。也就是 Class349.smethod_8 这个方法
smethod_8 方法:
我们可以看到这个方法也只是做了一个许可证的输入值是否合法的校验,看到最底层调用的都是 Class349.smethod_9 这个方法,我们直接跳转到这个方法
smethod_9 方法:
这个方法返回的是一个布尔值,返回的内容是通过调用smethod_7这个方法来得到的,我们继续跟踪。
smethod_7 方法:
其实这个方法我们可以确实就是最终校验的方法了,因为里面并没有再调用其他的有意义的方法。我们往下看
第一句话是调用的 smethod_0 这个方法,我们跟进去发现里面只是判断 当前数据库的类型 如果是支持的数据库就没事
接下来这一句:if (LicenseManager.concurrentBag_0.Count == 0)我们知道 LicenseManager.concurrentBag_0 这个集合是用来存放许可证的。
那么当许可证集合=0的时候就说明是我们没有注册这个类库的时候。
if (DateTime.Now < new DateTime(2019, 3, 1)) 下面这句代码可以看出这个类库是用时间来检测的
如果我们本机的时间小于2019年3月1号的话,这里的属性都是等于true,我们回到官网
You can evaluate the library for several months before purchasing it.
The latest version always contains a trial that expires at the end of the month.
You can extend your trial for several months by downloading the latest version at the beginning of every month.
这里也说明了,可以每个月来更新一次类库就可以免费试用。
4、 第一种破解方式:
到了这里我们已经知道,直接把这个时间修改就可以了,或者直接让if=true,还有就是直接把if语句里面的代码除外的代码都删掉。
第二种破解方式:
第二种破解方式就用到了我第一个视频教程里面讲的分析,我们直接分析,是哪些地方引用了这个方法,删除引用的语句让他不进行校验就行了。
这里可以看到有两个地方引用了这个方法,我们想一下修改smethod_9 这个方法其实是完全没有意义的,我们要修改的是最上层的调用。可以看到
有一个execute方法调用,这个方法从字面理解是 执行 按照正常的逻辑来讲,说明是在执行具体的功能时候进行了校验
所以我们判断这个方法就是最顶层的调用方法,这里我们直接干掉检验,由于直接用编辑方法编译不了,我们直接用IL编辑用空白指令把他替换掉就OK
5、为什么不修改 smethod_8 这个方法,我们来看下这个方法的分析结果可以看到这个方法只有在ValidateLicense的时候才会被调用,这里就有两个原因不修改他
A、 因为他不是最终的执行验证方法,也不是最顶层的调用方法。
B、 因为这个类库我们通过 smethod_7 就可以发现是可以不用添加许可证的 还记得if (LicenseManager.concurrentBag_0.Count == 0) 这个语句
如果许可证集合是=0的时候就会默认的触发 1个月的 时间验证。而我们不添加许可证不显示的调用 ValidateLicense 那么这个方法是根本不会被触发的。
这点可以从官网上面看出来
// CHECK if the license is valid for the default provider (SQL Server)
string licenseErrorMessage;
if (!Z.EntityFramework.Extensions.LicenseManager.ValidateLicense(out licenseErrorMessage))
{
throw new Exception(licenseErrorMessage);
}
// CHECK if the license is valid for a specific provider
string licenseErrorMessage;
if (!Z.EntityFramework.Extensions.LicenseManager.ValidateLicense(out licenseErrorMessage, ProviderType.SqlServer))
{
throw new Exception(licenseErrorMessage);
}
6、再次说明此教程通用zzzprojects项目组的所有类库,需要其他类库的请自己动手。
@伯牙 @约定的童话
通用全家族系列,真是好东西。 看的一头雾水,支持一下 看的一头雾水,支持一下 牛掰了大佬。。虽然不懂还是要支持一下。 感谢楼主分享 一头雾水,支持一下 一脸茫然,感谢分享 一脸茫然,感谢分享
支持一下