遗憾迟香 发表于 2021-3-28 11:12

C#算法新手破解

无壳无混淆,验证模块与主程序分开

零下八度 发表于 2021-3-28 12:31

本帖最后由 零下八度 于 2021-3-28 12:38 编辑

这强度还有待提升。。。。
随便说说:
IsCorrectSN 方法取决于求模表达式:result = (201919192329L % (long)AsciiSum(stringBuilder.ToString()) == 0L),
也就是:201919192329 % AsciiSum(s) == 0,由于 201919192329 = 349*263*3*733289,
那么只要 AsciiSum 返回 349、263、3、733289,其中一个数就ok,
我直接拿349做结果来构造:
因为IsCorrectSN 里面有个 ToUpper(),所以为了简单,全部用大写字母得了,
大写字母的ASCII码为:65-90
随便构造:349 = 65(A)+65(A)+65(A)+65(A)+89(Y)
演示注册码:AAAAY
过多的细节,什么横杠啊,大小写啊,数字啊,特殊字符啊,统统不管,完事儿~~

zz100179 发表于 2021-3-29 07:26

c#对程序的保护很弱,不管怎么样都能把代码弄的清清楚楚,商业软件很少用

zlbwasd 发表于 2021-3-28 12:41

学到了很多!!!

大王大王 发表于 2021-3-28 12:58

看看学学

樱花劫 发表于 2021-3-28 15:18

学到了很多!!!

ps122 发表于 2021-3-28 15:18

零下八度 发表于 2021-3-28 12:31
这强度还有待提升。。。。
随便说说:
IsCorrectSN 方法取决于求模表达式:result = (201919192329L % (l ...

分析的很透彻{:1_921:}

weikun444 发表于 2021-3-28 18:06

顶一下零下八度,本人不太懂算法,很羡慕懂算法的人{:1_893:}
                private void button1_Click(object sender, EventArgs e)
                {
                        if (SNValidate.IsCorrectSN(this.textBox1.Text))
                        {
                                MessageBox.Show("注册成功");
                        }
                        else
                        {
                                MessageBox.Show("注册失败");
                        }
                }


        public static class SNValidate
        {
                // Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250
                public static bool IsCorrectSN(string s)
                {
                        bool result;
                        try
                        {
                                string[] array = s.Trim().ToUpper().Split(new char[]
                                {
                                        '-'
                                });
                                StringBuilder stringBuilder = new StringBuilder("");
                                foreach (string value in array)
                                {
                                        stringBuilder.Append(value);
                                }
                                result = (201919192329L % (long)SNValidate.AsciiSum(stringBuilder.ToString()) == 0L);
                        }
                        catch
                        {
                                result = false;
                        }
                        return result;
                }

                // Token: 0x06000002 RID: 2 RVA: 0x000020F0 File Offset: 0x000002F0
                private static int AsciiSum(string s)
                {
                        char[] array = s.ToCharArray();
                        int num = 0;
                        foreach (char c in array)
                        {
                                num += (int)c;
                        }
                        return num;
                }
        }

wildfire_810 发表于 2021-3-28 19:35

鼓掌,解释的很清楚

sina0022 发表于 2021-3-28 23:42

C#的功能很强大,正好要学习一下,感谢你
页: [1] 2
查看完整版本: C#算法新手破解