qands 发表于 2021-3-30 21:32

aspose for.net所有版本的注册方法

本帖最后由 qands 于 2021-3-30 21:52 编辑

逛论坛时发现了这个https://www.52pojie.cn/forum.php?mod=viewthread&tid=1116770
有过期注册码,开始研究了各个版本.
工具:dnspy.
19.10之前,不要太简单,略.
19.10,请在system.date.compare下断(具体是哪个compare忘了,都下断吧)
19.10之后,请在system.string.compare处下断
成品不发了,学习为主.
嗯..清清爽爽,收工
具体的调试过程我发csdn了,https://blog.csdn.net/kkndmmx/article/details/115314449

(搞的时候按文中链接吧那个过期注册码加上)
21.3的版本,补个图




qands 发表于 2021-4-1 23:04

夜泉 发表于 2021-4-1 20:18
大佬,按照你的帖子,我已经把 Aspose.Cell 21.3 搞定了,但是换成 Aspose.PDF 我就晕菜了,,可能是和 Asp ...

我那句话的意思是看这里

这个是局部变量,我没贴图,直接复制的文本过来所有有点乱.....

找不到flag的比较,那么说明他虚化了.得在虚拟机里绕绕. 这个比较过程大概形状长这样(这是aspose.word里的).
        private void \u000F\u2001(global::\u0008 \u0002)
        {
                global::\u0008 u = this.\u0003\u2001();
                int num = u.\u0008\u2006\u2005\u0003();
                bool flag;
                if (num <= 11)
                {
                        switch (num)
                        {
                        case 2:
                                flag = (((\u0003\u2002)u).\u0002() == null);
                                goto IL_CB;
                        case 3:
                                flag = (((\u000F\u2000)u).\u0002() == 0L);
                                goto IL_CB;
                        case 4:
                        case 5:
                                break;
                        case 6:
                                flag = (((\u000E\u2000)u).\u0002() == 0);
                                goto IL_CB;
                        default:
                                if (num == 11)
                                {
                                        flag = (((\u000E\u2001)u).\u0002() == IntPtr.Zero);
                                        goto IL_CB;
                                }
                                break;
                        }
                }
                else
                {
                        if (num == 19)
                        {
                                flag = (((\u000F\u2001)u).\u0002() == UIntPtr.Zero);
                                goto IL_CB;
                        }
                        if (num == 23)
                        {
                                flag = !Convert.ToBoolean(((global::\u0002\u2000)u).\u0002());
                                goto IL_CB;
                        }
                }
                flag = (u.\u0008\u2006\u2005\u0002() == null);
                IL_CB:
                if (flag)
                {
                        uint u2 = ((\u0005\u2001)\u0002).\u0002();
                        this.\u0002(u2);
                }
        }
思路是这样,在断点时间比较后,他返回了bool值,总得用起来,笨办法,开2个一样的程序,一个改时间一个不改,对比这跑,哪里不一样问题就再哪里.
于是就发现,到了上面那个程序块,且num==6.
看看这个过程,大概就是判定返回值是不是null,0L,0(false)之类,然后下一步.word在case 6这里直接改成true貌似就没问题了,也不报错.但不意味着其他也能这样.毕竟这是个公用的地方,
感觉相当于IL指令的brtrue类似的指令,true就执行if flag里的,修正程序下一条语句位置,不是的话继续执行后面的代码.

有注册码的情况,在调用 System.Reflection.RuntimeMethodInfo 的地方加个类型和传值的判断,是时间类且year==2015改成2099应该就行了吧


夜泉 发表于 2021-3-31 19:02

本帖最后由 夜泉 于 2021-3-31 19:08 编辑

qands 发表于 2021-3-31 16:08
那是我没想清楚折腾搞的事情啊呀,你直接去mscorlib->CommonLanguageRuntimeLibrary->System->DateTime里 ...
吐血。。。不搞了,,,,太累了,,,,一看就是将各种表达式和运行方式什么的拆分,用invoke调用。。。
{:301_1005:}

下面放入Net4.x 控制台上,加断点

给人填坑吧。。。

    class Program
    {
      public const string Key =
       "PExpY2Vuc2U+DQogIDxEYXRhPg0KICAgIDxMaWNlbnNlZFRvPkFzcG9zZSBTY290bGFuZCB" +
       "UZWFtPC9MaWNlbnNlZFRvPg0KICAgIDxFbWFpbFRvPmJpbGx5Lmx1bmRpZUBhc3Bvc2UuY2" +
       "9tPC9FbWFpbFRvPg0KICAgIDxMaWNlbnNlVHlwZT5EZXZlbG9wZXIgT0VNPC9MaWNlbnNlV" +
       "HlwZT4NCiAgICA8TGljZW5zZU5vdGU+TGltaXRlZCB0byAxIGRldmVsb3BlciwgdW5saW1p" +
       "dGVkIHBoeXNpY2FsIGxvY2F0aW9uczwvTGljZW5zZU5vdGU+DQogICAgPE9yZGVySUQ+MTQ" +
       "wNDA4MDUyMzI0PC9PcmRlcklEPg0KICAgIDxVc2VySUQ+OTQyMzY8L1VzZXJJRD4NCiAgIC" +
       "A8T0VNPlRoaXMgaXMgYSByZWRpc3RyaWJ1dGFibGUgbGljZW5zZTwvT0VNPg0KICAgIDxQc" +
       "m9kdWN0cz4NCiAgICAgIDxQcm9kdWN0PkFzcG9zZS5Ub3RhbCBmb3IgLk5FVDwvUHJvZHVj" +
       "dD4NCiAgICA8L1Byb2R1Y3RzPg0KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl" +
       "0aW9uVHlwZT4NCiAgICA8U2VyaWFsTnVtYmVyPjlhNTk1NDdjLTQxZjAtNDI4Yi1iYTcyLT" +
       "djNDM2OGYxNTFkNzwvU2VyaWFsTnVtYmVyPg0KICAgIDxTdWJzY3JpcHRpb25FeHBpcnk+M" +
       "jAxNTEyMzE8L1N1YnNjcmlwdGlvbkV4cGlyeT4NCiAgICA8TGljZW5zZVZlcnNpb24+My4w" +
       "PC9MaWNlbnNlVmVyc2lvbj4NCiAgICA8TGljZW5zZUluc3RydWN0aW9ucz5odHRwOi8vd3d" +
       "3LmFzcG9zZS5jb20vY29ycG9yYXRlL3B1cmNoYXNlL2xpY2Vuc2UtaW5zdHJ1Y3Rpb25zLm" +
       "FzcHg8L0xpY2Vuc2VJbnN0cnVjdGlvbnM+DQogIDwvRGF0YT4NCiAgPFNpZ25hdHVyZT5GT" +
       "zNQSHNibGdEdDhGNTlzTVQxbDFhbXlpOXFrMlY2RThkUWtJUDdMZFRKU3hEaWJORUZ1MXpP" +
       "aW5RYnFGZkt2L3J1dHR2Y3hvUk9rYzF0VWUwRHRPNmNQMVpmNkowVmVtZ1NZOGkvTFpFQ1R" +
       "Hc3pScUpWUVJaME1vVm5CaHVQQUprNWVsaTdmaFZjRjhoV2QzRTRYUTNMemZtSkN1YWoyTk" +
       "V0ZVJpNUhyZmc9PC9TaWduYXR1cmU+DQo8L0xpY2Vuc2U+";


      static void Main(string[] args)
      {
            #region 加断点地方
            DateTime d1 = DateTime.Now; DateTime d2 = DateTime.Now;
            DateTime.Compare(d1, d2);
            string.Compare("", "");
            var d = d1 > d2;
            #endregion

            var ms = (Stream)new MemoryStream(Convert.FromBase64String(Key));
            (new License()).SetLicense(ms);
      }
    }

xiaocai2021 发表于 2021-3-30 22:33

大佬膜拜 :lol

大白痴先生 发表于 2021-3-30 23:08

楼主你好啊,我到你的CSDN上看了,想请教一下像你CSDN截图中的这种标识符都被加密了,有什么办法能解密出来吗?我有一个软件加密方式和你这个一样,试了de4dot之类的都无法解密。

eddiecgc 发表于 2021-3-30 23:11

大佬,献上我的膝盖!{:1_921:}

qands 发表于 2021-3-30 23:26

由于我的不严谨,弄完aspose.cell就以为所有系列产品都这样.但刚刚试了试aspose.ocr,他却不是在string.compare里判断的,而是在datetime里的 operator >里比较的.如下图


因此大家下断时,这几处都下吧. 没断下来的时候,退一步到 System.Reflection.RuntimeMethodInfo里下断不停F5吧,总会出现的.如图





qands 发表于 2021-3-30 23:30

大白痴先生 发表于 2021-3-30 23:08
楼主你好啊,我到你的CSDN上看了,想请教一下像你CSDN截图中的这种标识符都被加密了,有什么办法能解密出来 ...

能调试你管它的.....比OD环境好多了吧
(其实我也不熟哈哈)

夜泉 发表于 2021-3-31 00:58

本帖最后由 夜泉 于 2021-3-31 01:01 编辑

我也搞过,,,这个太累了,,,,前一次搞了一天,晚上头都晕晕的。。。

PrincessSnow 发表于 2021-3-31 01:02

膜拜大佬 萌新整在学习中

大白痴先生 发表于 2021-3-31 02:22

qands 发表于 2021-3-30 23:30
能调试你管它的.....比OD环境好多了吧
(其实我也不熟哈哈)

那能解密的话不是看的更清楚嘛,现在是能调试,但是很不容易看清楚

qands 发表于 2021-3-31 03:52

大白痴先生 发表于 2021-3-31 02:22
那能解密的话不是看的更清楚嘛,现在是能调试,但是很不容易看清楚

那不是解密的问题,而是编译时变量方法什么的人家就不带名,或者就带的看着像乱码的名
你点开dnspy的IL编辑栏看,自己写的正常的是有名字的,而加过花的是没名字的如图






这你怎么恢复啊...最多像de4dot那样,class1,class2...
页: [1] 2 3 4
查看完整版本: aspose for.net所有版本的注册方法