easyre1
题目:
int __cdecl main(int argc, const char **argv, const char **envp)
{
__isoc99_scanf("%s", flag);
enkey();
reduce();
check();
return 0;
}
int enkey()
{
int i; // [esp+Ch] [ebp-4h]
for ( i = 0; i <= 31; ++i )
*(_BYTE *)(i + 134520992) ^= *(_BYTE *)(i + 134520896);
return 0;
}
int reduce()
{
int i; // [esp+Ch] [ebp-Ch]
for ( i = 0; i <= 30; ++i )
--*(_BYTE *)(i + 134520992);
putchar(10);
return 0;
}
int check()
{
if ( !strcmp(flag, "d^XSAozQPU^WOBU[VQOATZSE@AZZVOF") )
return puts("you are right");
else
return puts("no no no");
}
思路:
逐位加一->逐位与key的对应位异或->flag
script:
s = "d^XSAozQPU^WOBU[VQOATZSE@AZZVOF"
key = "5055045045055045055045055045055"
flag = ""
flagg = ""
for i in range(len(s)):
flag += chr(ord(s[i]) + 1)
print(flag)
for i in range(len(key)):
flagg += chr(ord(flag[i]) ^ ord(key[i]))
print(flagg)
#PolarDNbecomesbiggerandstronger
c:
#include<stdio.h>
int main(){
char flag[] = "d^XSAozQPU^WOBU[VQOATZSE@AZZVOF";
char key[] = "5055045045055045055045055045055";
for(int i=0;i<32;i++){
flag[i] += 1;
}
printf("%s\n",flag);
for (int i=0;i<32;i++){
flag[i] = flag[i]^key[i];
}
printf("%s\n",flag);
}