这个CrackMe必须在NET4.0环境下运行,比较容易,顺道复习了中学数学。
1、运行程序,有三个Edit输入框,貌似三者都必须符合某种要求才能弹出正确的提示。

2、用Reflector载入,可以发现,程序的Form1里的点击按钮事件:

3、点进去查看代码,不难看出,三个输入的数字必须要同时满足三个条件才能弹出正确提示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | private void btnCheck_Click(object sender, EventArgs e)
{
double num = Convert.ToDouble(this.Num1.Text);
double num2 = this.Change(Convert.ToDouble(this.Num2.Text));
double num3 = Convert.ToDouble(this.Num3.Text);
if ((((Math.Log10(num3 - 3.0) + Math.Log10(num3 + 1.0)) == Math.Log10((4.0 * num3) - 3.0)) && ((Math.Pow(2.0, num + 3.0) - Math.Sqrt(Math.Pow(2.0, (num3 - 2.0) + (2.0 * num)))) == (4.0 + (2.0 * Math.Pow(4.0, num / 2.0))))) && (((Math.Sqrt(3.0) * Math.Pow(Math.Tan(2.0 * num2), 2.0)) - (4.0 * Math.Tan((num3 - 4.0) * num2))) == (Math.Sqrt(3.0) * -1.0)))
{
MessageBox.Show( "Valid Combination! :)" );
}
else
{
MessageBox.Show( "Invalid combination :(" );
}
}
|
4、这三个条件分别是:
Math.Log10(num3 - 3.0) + Math.Log10(num3 + 1.0) == Math.Log10((4.0 * num3) - 3.0)
Math.Pow(2.0, num + 3.0) - Math.Sqrt(Math.Pow(2.0, (num3 - 2.0) + (2.0 * num)) == 4.0 + (2.0 * Math.Pow(4.0, num / 2.0))
Math.Sqrt(3.0) * Math.Pow(Math.Tan(2.0 * num2), 2.0) - 4.0 * Math.Tan((num3 - 4.0) * num2) == Math.Sqrt(3.0) * -1.0
5、下面就是分别来解这个方程组了,先看第一个方程,是对数方程:
Math.Log10(num3 - 3.0) + Math.Log10(num3 + 1.0) == Math.Log10((4.0 * num3) - 3.0)
log(num3 - 3) + log(num3 + 1) = log(4 * num3 - 3)
log((num3 - 3)(num3 + 1)) = log(4 * num3 - 3)
(num3 - 3)(num3 + 1) = 4 * num3 - 3
num3^2 – 2 * num3 – 3 = 4 * num3 – 3
num3^2 = 6 * num3
num3 = 6 或num3 = 0
由于负数和0没有对数,所以num3只能=6
6、再看第二个方程,是幂方程:
Math.Pow(2.0, num + 3.0) - Math.Sqrt(Math.Pow(2.0, (num3 - 2.0) + (2.0 * num)) == 4.0 + (2.0 * Math.Pow(4.0, num / 2.0))
2^(num + 3) - (2^(num3 – 2 + 2 * num))^0.5 = 4 + 2 * (4^(num / 2))
2^num * 2^3 – (2^(6 – 2 + 2 * num))^0.5 = 4 + 2 * ((4^num)^0.5))
8 * 2^num – 4 * 2^num = 4 + 2 * 2^num
2^num * 2 = 4
[注意]看雪招聘,专注安全领域的专业人才平台!