• AspNet Zero Core


    解决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:UsersAdministrator.nugetpackages)中找到这两个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

  • 相关阅读:
    main 函数返回值
    软件架构师必备能力
    Thinkpad S430 3364-A59 (笔记本型号)加内存条过程
    Mysql char(10) 与 varchar(10)的区别
    centos6.5 安装openresty
    AndroidStudio不自己主动加入新创建的文件到VCS
    【HDU 5647】DZY Loves Connecting(树DP)
    linux 新进程的创建
    如何处理Android中的防缓冲区溢出技术
    nyoj 119士兵杀敌(三)(线段树区间最值查询,RMQ算法)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/8439906.html
Copyright © 2020-2023  润新知