新手一枚,如有错误(不足)请指正,谢谢!!
题目链接:BUUCTF-re-[FlareOn4]IgniteMe
运行程序看一下
IDA32位载入,进入start函数
先去sub_4010F0()函数看一下
就是一个读入字符串存到user_input 全局变量这
查看start函数里的sub_401050函数
sub_401000函数是返回一个固定值。动调得到v4=4
总体逻辑就是将输入倒序异或,然后进行比对,写爆破脚本
#include <stdio.h>
char data[40] =
{
13, 38, 73, 69, 42, 23, 120, 68, 43, 108,
93, 94, 69, 18, 47, 23, 43, 68, 111, 110,
86, 9, 95, 69, 71, 115, 38, 10, 13, 19,
23, 72, 66, 1, 64, 77, 12, 2, 105, 0
};
int main(void)
{
char v4 = 4;
int i, j, k;
char flag[40] = { 0 };
for (i = 38; i >= 0; i--)
{
for (j = 0x20; j < 0x80; j++)
{
k = j;
k ^= v4;
if (k == data[i])
{
flag[i] = j;
v4 = j;
break;
}
}
}
printf("flag{%s}",flag);
return 0;
}
得到flag为flag{R_y0u_H0t_3n0ugH_t0_1gn1t3@flare-on.com}