逆向攻防世界CTF系列8-getit

image-20241014141333840

image-20241014141422357

image-20241014142307807

其中

  strcpy(filename, "/tmp/flag.txt"); #此行代码将指定文件的路径存储在 filename 中。
  stream = fopen(filename, "w");     #stream 是一个 FILE* 类型的指针,指向打开的文件。
  fprintf(stream, "%s\n", u, v5);    #是一个格式化输出函数,用于向指定的文件流写入格式化的数据。

因此这是写出flag的内容到txt,我们关注上面的代码

  v9 = __readfsqword(40u);
  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;
  }

t是由s变来的 s='c61b68366edeb7bdce3c6820314b7498'

我们这需要理解上面的代码就行,转成python

image-20241014142630327

s = 'c61b68366edeb7bdce3c6820314b7498'
flag = ''
i = 0 
while i < len(s):
    v3 = 0
    if i & 1:
        v3 = 1
    else :
        v3 = -1
    flag += chr(ord(s[i])+v3)
    i+=1
print('SharifCTF{' + flag + '}')
```
SharifCTF{b70c59275fcfa8aebf2d5911223c6589}

要注意,t不仅仅是harifCTF{???},上面还有一个53h,转换成字符也就是‘S’,所以t应该是SharifCTF{????????????????????????????????}