解决AspNet Zero Core 5.0.1无法运行的问题
最近在研究AspNet Zero Core 5.0.1时发现VS点击调试后就自动退出了,从ABP QQ群里得知作者加入了licensecode校验。经过一个周左右断断续续的折腾,算是破解了吧。原本想把加密类完全反编译出来,后来发现有些方法反编译不过来,所以有些方法就直接注释掉实现了(关键方法未能反编译,比较遗憾)。
一、说明
如果对反编译不感兴趣的话,可以直接从github下载下来源码之后,把ABP文件下的两个工程Abp.AspNetZeroCore、Abp.AspNetZeroCore.Web编译一下拿到dll直接将AspNet Zero Core 5.0.1工程里的对应引用替换掉就可以了。
拿到AspNet Zero Core 5.0.1源码后会发现有两个应用的dll在ABP github上是没有源码的,一个是在工程MyCompanyName.AbpZeroTemplate.Core里引用的Abp.AspNetZeroCore,另一个是在工程MyCompanyName.AbpZeroTemplate.Web.Core里引用的Abp.AspNetZeroCore.Web。分析之后做校验的代码在Abp.AspNetZeroCore这个dll中,具体方法为AbpAspNetZeroCoreModule类的PostInitialize方法中调用了另一个类AspNetZeroLicenseChecker的Check方法,破解的话直接将PostInitialize注释掉或去掉Check方法中的代码实现即可。如下图:

二、运行效果
破解后的软件运行截图,
服务端:

前端界面:

三、工具软件
反编译过程中,我使用了两个软件:
1.Resharper套件之一,JetBrains dotPeek 2017.3.2。
2.ILSpy version 3.0.1.3459。
四、反编译过程
4.1.找到他们
取得源码用VS还原nuget包之后,会在系统盘目录(C:\Users\Administrator\.nuget\packages)中找到这两个dll(Abp.AspNetZeroCore.dll,Abp.AspNetZeroCore.Web.dll)。

4.2 使用dotPeek反编译并导出工程
将两个dll使用dotPeek反编译,然后在dotPeek的程序集管理其中,选中工程在右键菜单中选择Export to Project

反编译完成之后比较尴尬的是生成工程的.net版本为.net framework 2.0,我们自己创建个.Net Standard工程然后把反编译出来的文件拷贝到创建的解决方案里就可以了。两个dll的处理方法类似。
工程建立完之后引入到源代码里,引入之后我的工程目录结构如下所示,为了调试方便我把对ABP类库的引用都替换成了源代码工程引用:

4.3 反编译Abp.AspNetZeroCore.Web.dll
这个dll比较简单,先从简单的入手吧,这个dll中主要就反编译一个类就可以了,如下图

这个类中4,5两处没看明白有什么用途,直接删掉了;2,3两处其实就是对应类实例的属性所以ctx.set_User(authenticateResult.get_Principal())直接改为ctx.User=val.Principal,
authenticateResult.get_Succeeded() && authenticateResult.get_Principal() != null直接改为val.Succeeded && val.Principal != null。return 语句UseExtensions.Use这块儿实际
上是方法参数app的扩展方法。所以整段代码整理之后如下:

这个dll主要反编译这一个类就可以了,其他反编译的类不需要做额外处理。
4.4 反编译Abp.AspNetZeroCore.dll
这个就比较费劲了,一是代码量大,二是有些代码没看懂怎么反编译,这个dll主要反编译下面两个类

先看AspNetZeroBaseLicenseChecker这个类,这个类是AspNetZeroLicenseChecker类的基类,拿类的构造函数当 典型说一下一些个人的经验吧,未调整的反编译代码如下:

对照上图标记:
1.这个特性暂未发现有什么用处,直接去掉;
2.这个方法有对应的代码如下:
[MethodImpl(MethodImplOptions.NoInlining)]
internal static object iZ5hxHC38E0NlGy6Ai([In] object obj0)
{
return (object) ((AspNetZeroConfiguration) obj0).LicenseCode;
}
实际上就是获取了调用参数的一个特性,所以可以直接修改为 this.LicenseCode = configuration.LicenseCode;
3.这个循环稍微麻烦一点,按照执行步骤一步一步走就行了,名字混淆的方法直接用方法实现替换,这种代码少的好一些,理不乱,有些很长就有点儿头疼了,这整段代码搞来搞去其实就是两句,整理后的代码如下:
protected AspNetZeroBaseLicenseChecker(AspNetZeroConfiguration configuration, IAbpZeroConfig abpZeroConfig, string configFilePath = "")
{
this.LicenseCode = configuration.LicenseCode;
this._abpZeroConfig = abpZeroConfig;
}
其他的方法都可以按类似方式处理。
AspNetZeroLicenseChecker这个类反编译方法类似,但是这个类中的Check方法就搞不定了,dotPeek反编译后的代码如下:

红色方框中圈住的部分实在搞不懂是怎么回事儿。各位园友如果有思路的话,可以提供一下。
五、源码Github地址
反编译后的代码放到github上了,有兴趣的朋友可以下载下来研究一下,有问题欢迎留言讨论。
https://github.com/YSmileX/AspNetZeroCore
解决AspNet Zero Core 5.0.1无法运行的问题的更多相关文章
- 在.NET Core 1.0 RC2 上 运行 Orchard2
http://www.freeboygirl.com/running-orchard2-cms-on-core-rc2-net
- AspNet Zero Core
解决AspNet Zero Core 5.0.1无法运行的问题 最近在研究AspNet Zero Core 5.0.1时发现VS点击调试后就自动退出了,从ABP QQ群里得知作者加入了licens ...
- .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介
.NET Core 1.0.ASP.NET Core 1.0和EF Core 1.0简介 英文原文:Reintroducing .NET Core 1.0, ASP.NET Core 1.0, and ...
- .Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南
ASP.NET Core 2.0 发布日期:2017年8月14日 ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET ...
- ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0
ASP.NET 5.0 将改名为 ASP.NET Core 1.0 ASP.NET MVC 6 将改名为 ASP.NET MVC Core 1.0 Entity Framework 7.0 将 ...
- [转帖]2016年时的新闻:ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0
ASP.NET Core 1.0.ASP.NET MVC Core 1.0和Entity Framework Core 1.0 http://www.cnblogs.com/webapi/p/5673 ...
- Net Core 2.0生态1
Net Core 2.0生态 阅读目录 前言:答读者问(time by:2017.8.19) 项目升级到ASP.NET Core 2.0 新增功能:Razor Pages介绍 模板更新 Entity ...
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
ASP.NET Boilerplate 学习 1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...
- vscode 调试.net core 2.0 输出乱码解决方法
之前在vscode上调试.net core 2.0项目时输出窗口一直是乱码,查了很多资料无法解决 最终在github找到了解决办法 -> https://github.com/OmniSha ...
随机推荐
- [51nod1532]带可选字符的多字符串匹配
有一个文本串,它的长度为m (1 <= m <= 2000000),现在想找出其中所有的符合特定模式的子串位置. 符合特定模式是指,该子串的长度为n (1 <= n <= 50 ...
- bzoj usaco 金组水题题解(2.5)
bzoj 2197: [Usaco2011 Mar]Tree Decoration 树形dp..f[i]表示处理完以i为根的子树的最小时间. 因为一个点上可以挂无数个,所以在点i上挂东西的单位花费就是 ...
- virtualbox虚拟机NAT模式下不能连接外网
背景 给VirtualBox虚拟机(装载了Ubuntu16.04系统)配置了两张网卡,网络模式分别为"网络地址转换(NAT)"和"仅主机(Host-Only)适配器&qu ...
- [学习OpenCV攻略][008][Canny边缘检测]
cvGetSize(输入图片) 得到输入图片的大小 cvCanny(输入图片,输出图片,lowThresh,highThresh,aperture) 把输入图片按设定光圈值进行Canny边缘检测,然后 ...
- 浅析@Deprecated,调用方法时出现横线划掉样式
Deprecated 这个注释是一个标记注释.所谓标记注释,就是在源程序中加入这个标记后,并不影响程序的编译,但有时编译器会显示一些警告信息. 那么Deprecated注释是什么意思呢?如果你经常使用 ...
- 什么是命名空间?php命名空间的基本应用分享
什么是命名空间? php中声明的函数名.类名和常量的名称,在同一次运行中是不能重复的,否则会产生一个致命的错误,常见的解决方法是约定一个前缀.例如 ,在项目开发时,用户 User 模块中的控制器和数据 ...
- 手把手教你撸一个 Webpack Loader
文:小 boy(沪江网校Web前端工程师) 本文原创,转载请注明作者及出处 经常逛 webpack 官网的同学应该会很眼熟上面的图.正如它宣传的一样,webpack 能把左侧各种类型的文件(webpa ...
- Oracle_group by分组查询_深入
Oracle_group by分组查询_深入 本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析. 创建分 ...
- win7系统如何在防火墙里开放端口
用到的端口需要在防火墙里开放,win7的比XP的要复杂一些,此方法同样适用于server2008系统 方法/步骤 1 依次点击"开始"-"控制面板"-" ...
- Linux apache的运行用户和用户组
我们在安装apache后,有时在上传文件的时候,提示没有权限或者是不可写,我们都会去查文件夹的权限. 通过ls -l /var/www/html/website可以很直观的看出我们文件和文件夹的权限, ...