在线浏览: https://blog.w1ndys.top/posts/65c6afd7
主函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| int __fastcall main(int argc, const char **argv, const char **envp) { int v3; int v4; char v6[80];
printf("Whats the password: "); __isoc99_scanf("%s", v6); v3 = check1(v6); v4 = check2(v6) * v3; if ( (int)(v4 * check3(v6)) <= 0 ) puts("Nope, try again."); else puts("Correct!"); return 0; }
|
check1()
1 2 3 4 5 6 7 8 9 10 11
| __int64 __fastcall check1(const char *a1) { int i;
for ( i = 0; i < strlen(a1); ++i ) { if ( a1[i] <= 47 || a1[i] > 57 ) return 0LL; } return 1LL; }
|
check1() 函数检查输入的密码是否全部为数字。
check2()
1 2 3 4 5 6 7 8 9 10 11 12 13
| __int64 __fastcall check2(const char *a1) { char v2; int i;
v2 = 0; for ( i = 0; i < strlen(a1) - 1; ++i ) v2 += a1[i]; if ( (v2 & 1) != 0 ) return 0xFFFFFFFFLL; else return 1LL; }
|
check2() 函数检查输入的密码,除去最后一位之后前面的和是不是偶数。
check3()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| __int64 __fastcall check3(const char *a1) { int v2; int i;
if ( (strlen(a1) & 1) != 0 || strlen(a1) <= 4 ) return 0LL; for ( i = 0; i < strlen(a1) >> 1; ++i ) { v2 = a1[i]; if ( v2 != a1[i + (strlen(a1) >> 1)] + 4 ) return 0LL; } return 1LL; }
|
check3() 函数检查输入的密码,前半部分是否等于后半部分加 4。
总结
本次实验中,我们实现了三个密码检查函数,分别是 check1()、check2() 和 check3()。check1() 函数检查输入的密码是否全部为数字,check2() 函数检查输入的密码,除去最后一位之后前面的和是不是偶数,check3() 函数检查输入的密码,前半部分是否等于后半部分加 4。
所以输入密码符合前面提到的三个情况即可