BUU[FlareOn4]IgniteMe

分析

首先查壳,发现是32位的,然后放入IDA分析

image-20220423212431488

然后发现有用的好像只有sub_4010F0和sub_401050这两个函数,接着一个个点进去看

image-20220423212538675

这个函数其实作用并不大,接着去看看判断函数

image-20220423212644900

这里1020点进去很显然是个读取数组长度的

image-20220423212807857

1000点进去看

image-20220423212851148

看不懂在干嘛,先跳过。接着是两个for循环,可以看到第一个for循环在异或,第二个for循环有个if,看看那几个数组,发现这是个与最后flag进行的一个比较

image-20220423213001253

那么前面一个for循环时解题的关键,现在就差第一次for循环的v4值不知道了,于是下个断点去看

image-20220423213218032

image-20220423213233636

那么v4=4也出来了,开始写脚本

脚本
#include<stdio.h>
#include<string.h>
int main()
{
char a[]={0x0D, 0x26, 0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C,
0x5D, 0x5E, 0x45, 0x12, 0x2F, 0x17, 0x2B, 0x44, 0x6F, 0x6E,
0x56, 0x09, 0x5F, 0x45, 0x47, 0x73, 0x26, 0x0A, 0x0D, 0x13,
0x17, 0x48, 0x42, 0x01, 0x40, 0x4D, 0x0C, 0x02, 0x69};
int b=strlen(a);
int v4=4;
for(int i=b-1;i>=0;i--)
{
a[i]=a[i]^v4;
v4=a[i];
}
printf("%s",a);
}

最后得到flag

R_y0u_H0t_3n0ugH_t0_1gn1t3@flare-on.com
总结

这题就是简单的异或,主要是需要用到IDA的动态调试去找初始值v4