题目复现:https://buuoj.cn/challenges#[GXYCTF2019]luck_guy

首先拿到题目,先运行一下,然后看一下参数:

可以看到题目环境为linux64位,输入一个数字之后,打印内容。

拉入IDA,看到有一个关键函数patch_me将输入的数字消化了:

跟随进入函数,看到做了个简单判断,首先要满足输入的数字是偶数:

再次跟随进入关键函数get_flag:

看到了题目中用了rand函数,难怪题目叫luck guy,是不是幸运点就不用做题了? :huaji22:
既然不幸运,那就看看函数做了什么事:

要得到flag就要得到f2,f2原型来自字符串icug`of,然后经过变形得到实际字符串,所以可以写脚本了:

[infobox title=”C”]

#include<stdio.h>
#include<string.h>
int main() {
  int j;
  char f2[] = "icug`of";
  for (j = 0; j <= 7; ++j){
    if (j % 2 == 1)
      f2[j] = f2[j] - 2;
    else
      f2[j] = f2[j] - 1;
  }
  printf("GXY{do_not_%s", f2);
}

[/infobox]

轻松得到flag:GXY{do_not_hate_me}