level03: source code done
This commit is contained in:
parent
51919e2e24
commit
d8ce593b67
68
level03/source.c
Normal file
68
level03/source.c
Normal file
@ -0,0 +1,68 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
int decrypt(char key)
|
||||
{
|
||||
unsigned int len;
|
||||
char str[28];
|
||||
|
||||
// Stack canary protection (or SSP)
|
||||
// *(_DWORD *)((char *)&str[4] + 1) = __readgsdword(0x14u);
|
||||
strcpy((char *)str, "Q}|u`sfg~sf{}|a3");
|
||||
len = strlen((const char *)str);
|
||||
for (int i = 0; i < len; ++i)
|
||||
*((char *)str + i) ^= key;
|
||||
// Key needs to equal 12
|
||||
if (!strcmp((const char *)str, "Congratulations!"))
|
||||
return system("/bin/sh");
|
||||
else
|
||||
return puts("\nInvalid Password");
|
||||
}
|
||||
|
||||
int test(int a1, int a2)
|
||||
{
|
||||
int result;
|
||||
char key;
|
||||
|
||||
switch (a2 - a1) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
case 16:
|
||||
case 17:
|
||||
case 18:
|
||||
case 19:
|
||||
case 20:
|
||||
case 21:
|
||||
result = decrypt(a2 - a1);
|
||||
break;
|
||||
default:
|
||||
key = rand();
|
||||
result = decrypt(key);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int input;
|
||||
|
||||
srand(time(NULL));
|
||||
puts("***********************************");
|
||||
puts("*\t\tlevel03\t\t**");
|
||||
puts("***********************************");
|
||||
printf("Password:");
|
||||
scanf("%d", &input);
|
||||
test(input, 322424845);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user