攻防世界---getit

getit

题目描述:菜鸡发现这个程序偷偷摸摸在自己的机器上搞事情,它决定一探究竟

题目附件:https://adworld.xctf.org.cn/media/task/attachments/e3dd9674429f4ce1a25c08ea799fc027

首先查壳
攻防世界---getit_第1张图片得知:无壳;64位ELF文件;

直接放到ida中,F5键反编译成C语言代码

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v3; // al
  __int64 v5; // [rsp+0h] [rbp-40h]
  int i; // [rsp+4h] [rbp-3Ch]
  FILE *stream; // [rsp+8h] [rbp-38h]
  char filename[8]; // [rsp+10h] [rbp-30h]
  unsigned __int64 v9; // [rsp+28h] [rbp-18h]

  v9 = __readfsqword(0x28u);
  LODWORD(v5) = 0;
  while ( (signed int)v5 < strlen(s) )
  {
    if ( v5 & 1 )
      v3 = 1;
    else
      v3 = -1;
    *(&t + (signed int)v5 + 10) = s[(signed int)v5] + v3;
    LODWORD(v5) = v5 + 1;
  }
  strcpy(filename, "/tmp/flag.txt");
  stream = fopen(filename, "w");
  fprintf(stream, "%s\n", u, v5);
  for ( i = 0; i < strlen(&t); ++i )
  {
    fseek(stream, p[i], 0);
    fputc(*(&t + p[i]), stream);
    fseek(stream, 0LL, 0);
    fprintf(stream, "%s\n", u);
  }
  fclose(stream);
  remove(filename);
  return 0;
}

查看一些参数的值
攻防世界---getit_第2张图片从上面的信息中我们可以得到s和t的值,分别为:‘c61b68366edeb7bdce3c6820314b7498’
‘SharifCTF{???}’,这里最容易出错的是t的值,t的值应该是“0x53H+harifCTF{???}”,而t很有可能是存放flag的数组。
分析以上代码,上述代码整体上可分为三部分,其中
10—20行部分就是得到flag 的值,所以只要重写一下这部分代码,输出flag即可

#include
#include 
int main()
{
  char v3; // al
  __int64 v5=0; // [rsp+0h] [rbp-40h]
  int i; // [rsp+4h] [rbp-3Ch]
  FILE *stream; // [rsp+8h] [rbp-38h]
  char filename[8]; // [rsp+10h] [rbp-30h]
  unsigned __int64 v9; // [rsp+28h] [rbp-18h]
   char s[] = "c61b68366edeb7bdce3c6820314b7498";
    char t[] = "SharifCTF{????????????????????????????????}";

 

  while ( (signed int)v5 < strlen(s) )
  {
    if ( v5 & 1 )
      v3 = 1;
    else
      v3 = -1;
    *(t + (signed int)v5 + 10) = s[(signed int)v5] + v3;
    v5++;
  }
  printf("%s",t);
  return 0;
} 

攻防世界---getit_第3张图片

你可能感兴趣的:(CTF)