【实验吧】转瞬即逝write up

---恢复内容开始---

虽然这是很简单的一道题,但这是我第一次拿着题有很清晰的思路,并且脚本也有思路写,拿到文件用ida打开,分析main函数:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  size_t v3; // rax@1
  int result; // eax@4
  __int64 v5; // rsi@4
  unsigned __int8 i; // [sp+7h] [bp-39h]@1
  _BYTE *ptr; // [sp+8h] [bp-38h]@1
  char s[8]; // [sp+10h] [bp-30h]@1
  __int64 v9; // [sp+28h] [bp-18h]@1

  v9 = *MK_FP(__FS__, 40LL);
  strcpy(s, "tikp[luX|aoTjaoh");
  v3 = strlen(s);
  ptr = malloc(v3);
  puts("Welcome!");
  puts("This is a x64 REV,find out the flag.");
  for ( i = 0; i < strlen(s); ++i )
  {
    ptr[i] = s[i] ^ i;
    ptr[i] = 0;
  }
  printf("CTF{%s}\n", ptr);
  free(ptr);
  result = 0;
  v5 = *MK_FP(__FS__, 40LL) ^ v9;
  return result;
}

字符串tikp[luX|aoTjaoh第一个字符分别与对应数组次序异或,脚本如下:

s = "tikp[luX|aoTjaoh"
num=len(s)
ptr=[]
for x in range(0,num):
    ptr.append(x)
for i in range(0,num):
    ptr[i]=ord(s[i])^i

flag=''
for i in ptr:
    flag+=chr(i)
print(flag)

得出结果:

 

---恢复内容结束---

posted @ 2017-09-07 21:42  S_s_s  阅读(207)  评论(0编辑  收藏  举报