C#算法新手破解
无壳无混淆,验证模块与主程序分开本帖最后由 零下八度 于 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
过多的细节,什么横杠啊,大小写啊,数字啊,特殊字符啊,统统不管,完事儿~~
c#对程序的保护很弱,不管怎么样都能把代码弄的清清楚楚,商业软件很少用
学到了很多!!! 看看学学 学到了很多!!!
零下八度 发表于 2021-3-28 12:31
这强度还有待提升。。。。
随便说说:
IsCorrectSN 方法取决于求模表达式:result = (201919192329L % (l ...
分析的很透彻{:1_921:} 顶一下零下八度,本人不太懂算法,很羡慕懂算法的人{: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;
}
} 鼓掌,解释的很清楚 C#的功能很强大,正好要学习一下,感谢你
页:
[1]
2