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);

}
posted @ 2025-05-07 10:49  lethe311  阅读(2)  评论(0)    收藏  举报