题目复现: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}