本帖最后由 zbnysjwsnd8 于 2017-7-16 11:40 编辑
简单的写了一下。。(看不懂我说的没事 反正代码说的很清楚了)
[C#] 纯文本查看 复制代码 private void ok_Click(object sender, EventArgs e)
{
this.inputN++;
this.input = this.inputText.Text;
if (this.input.Equals(this.right))
{
MessageBox.Show("破解成功");
this.flag = true;
}
}
这段代码就是说 如果输入的注册码 = this.right 就是注册成功
[C#] 纯文本查看 复制代码 private void CrackMe_Load(object sender, EventArgs e)
{
this.date = this.GetSystemDate();//取出当前的时间(年 + 月 + 日 (比如2017年7月16日 取出来就是2017716))
//取出当前的月份并转换成字符串 记为s1
//取出当前的天数并转换成字符串 记为s2
//a1 = StringToInt(s1 + s2)
//取出当前的天数并转换成整数记为a2
//则a = inputN * (a1 + a2)
this.a = (int.Parse(DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString()) + int.Parse(DateTime.Now.Day.ToString())) * this.inputN;
this.ok_Click("", null);
if (this.flag)
{
this.right = null;
}
else
{
this.right = this.a + this.date + "52pojie";//正确的注册码是IntToString(a) + data + "52pojie"
}
}
但是凭这些还不知道正确的注册码是什么 因为不知道inputN是多少。
然后就找 哪里给inputN赋值
[C#] 纯文本查看 复制代码 public CrackMe()
{
this.date = "";
this.inputN = 1; //就在这里
this.a = -1;
this.input = "";
this.right = " ";
this.flag = false;
this.components = null;
this.InitializeComponent();
}
这样注册码应该清楚了。今天是2017年7月16日
从上面收集的信息可以得出:
s1 = 7
s2 = 16
则a1 = StringToInt(s1 + s2) = StringToInt(716) = 716
a2 = 16
则a = inputN * (a1 + a2) = 1 * (716 + 16) = 732
则right = IntToString(a) + this.data + "52pojie" = "732" + this.GetSystemDate(); + "52pojie" = "732" + "2017716" + "52pojie" = "732201771652pojie"
故注册码为732201771652pojie
这个注册码仅仅先于今天(除非改过系统时间)
过了今天注册码就变了。
|