解决AspNet Zero Core 5.0.1无法运行的问题

 

  最近在研究AspNet Zero Core 5.0.1时发现VS点击调试后就自动退出了,从ABP QQ群里得知作者加入了licensecode校验。经过一个周左右断断续续的折腾,算是破解了吧。原本想把加密类完全反编译出来,后来发现有些方法反编译不过来,所以有些方法就直接注释掉实现了(关键方法未能反编译,比较遗憾)。

声明:本文仅供学习研究使用,若项目使用请购买正版授权

  一、说明

  二、运行效果

  三、工具软件

  四、反编译过程

  五、源码Github地址

一、说明

  如果对反编译不感兴趣的话,可以直接从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的更多相关文章

  1. Asp.Net WebApi+Microsoft.AspNet.WebApi.Core 启用CORS跨域访问

    WebApi中启用CORS跨域访问 1.安装 Nugget包Microsoft.AspNet.WebApi.Cors This package contains the components to e ...

  2. 解决AspNet Zero Core 5.0.1无法运行的问题

    最近在研究AspNet Zero Core 5.0.1时发现VS点击调试后就自动退出了,从ABP QQ群里得知作者加入了licensecode校验.经过一个周左右断断续续的折腾,算是破解了吧.原本想把 ...

  3. .NET Core Analysis

    .NET Core 1.0.1 Module Component .NET Core MongoDB MongoDB.Driver There has a nuget package availabl ...

  4. 从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构

    Microsoft.AspNet.Identity简介 Microsoft.AspNet.Identity是微软在MVC 5.0中新引入的一种membership框架,和之前ASP.NET传统的mem ...

  5. [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity

    项目:后台管理平台 意义:一个完整的管理平台需要提供用户注册.登录等功能,以及认证和授权功能. 一.为何使用CLK.AspNet.Identity 首先简要说明所采取的权限控制方式.这里采用了基于角色 ...

  6. 跟Microsoft.AspNet.Identity学习哈希加盐法

    什么是哈希加盐法? 废话少说:对于MD5这种加密算法,同样的密码每次加密后得到的密文是一样的,所以黑客可以利用已知的密码库(彩虹库)对目标数据库密文进行对比进行攻击. 怎样解决:哈希加盐法,以下是网上 ...

  7. 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包 ...

  8. 【转载】通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    本文转载自:http://www.cnblogs.com/1996V/p/9037603.html [尊重作者原创,转载说明出处!感谢作者“小曾看世界”分享! ] 什么是.NET?什么是.NET Fr ...

  9. Microsoft.AspNet.Identity 的简单使用

    要完成一个简单的注册,登陆,至少需要实现Identity中的3个接口 IUser IUserStore<TUser> : IDisposable where TUser : IUser I ...

随机推荐

  1. Android Studio 主题、字体大小的设置

    1. Android Studio 主题的设置: 设置Android Studio 自带的主题 设置第三方主题 2. Android Studio 字体的设置 设置左面包名的字体大小 设置右面代码编辑 ...

  2. 如何改变cmd窗口大小

      按下Win+R(windows徽标和R一起按),再输入cmd. 输入mode ,查看当前屏幕的大小,来为后面准备(大概估计数值大小). 再输入mode con:cols=400 lines=400 ...

  3. memcached高可用

    http://sourceforge.net/projects/repcached/ memcached-1.2.8-repcached-2.2.tar.gz tar zxvf memcached-1 ...

  4. codeforces 706B B. Interesting drink(二分)

    题目链接: B. Interesting drink 题意: 给出第i个商店的价钱为x[i],现在询问mi能在多少个地方买酒; 思路: sort后再二分; AC代码: #include <ios ...

  5. k8s-集群状态及部署一个实例

    [root@k8s-master ~]# kubectl get csNAME STATUS MESSAGE ERRORcontroller-manager Healthy ok scheduler ...

  6. poj3784Running Median——堆维护中间值

    题目:http://poj.org/problem?id=3784 将较小的数放入大根堆,较大的数放入小根堆,控制较小数堆大小比较大数堆小1,则较大数堆堆顶即为中位数. 代码如下: #include& ...

  7. 使用EA完成数据库设计

    开始重构之后对于EA的了解也逐渐增多,今天就总结一下如何使用EA完成对数据库的设计.下边的图分别是截自机房收费系统和牛腩新闻开发的数据库,因为我第一遍写的时候是在机房合作的时候,而后建立牛腩新闻发布系 ...

  8. jquery中attr() & prop() 的区别与其实现方法

    $(function(){ $('#check').attr('checked'); // undefind ???一头雾水 }) 在jquery中 attr 本来就是用来设置或者获取属性的,可是上面 ...

  9. KMP匹配 (1)

    ---恢复内容开始--- 字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串" ...

  10. 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

    No valid host was found. There are not enough hosts available 'ascii' codec can't decode byte 0xe6 i ...