这个题的前5位给了为actf{
第一个for循环要求满足前五位不要与第七位到第十一位相等就可以进入到LABEL_6
这个只要满足第十二个到最后一个就可以输出flag
因此只需要算出第十二个到最后就可以了
//但是第14行代码会将我们输入的flag变成actf{,不清楚为什么还可以正常执行。
第二十九行中的sub_83A函数是检测的,但是打不开,会出现以下警告:
解决办法:
打开ida函数的安装路径,进入cfg文件夹,找到hexrays.cfg文件,打开,找到MAX_FUNCSIZE
将原来的64改为1024,重新启动ida即可
//我的电脑直接打不开这个文件,我是使用虚拟机打开的,修改后将文件再复制过去的
打开这个函数,发现进行了好多次的基本计算,最后与v3数组进行比较
写脚本,直接得出flag的一部分
//爆破
#include <stdio.h>
#include <string.h>
int v3[12]={126,50,37,88,89,107,53,110,0,19,30,56};
int sub_83A(char *a1,int i)
{
*a1 ^= 0x2Bu;
a1[1] ^= 0x6Cu;
a1[2] ^= 0x7Eu;
a1[3] ^= 0x56u;
a1[4] ^= 0x39u;
a1[5] ^= 3u;
//……
//直接复制源代码就行
if(a1[i] == v3[i])
return 1;
else
return 0;
}
int main()
{
int i,j;
char flag[13] = "";
char tmp[13] = "";
for(i = 0; i < 12 ; i++)
{
for(j = 33; j <= 126 ; j++)
{
strcpy(flag,tmp);
flag[i] = j;
if(sub_83A(flag,i))
{
tmp[i] = j;
break;
}
}
}
printf("%s\n",tmp);
return 0;
}
//b0Nf|Re_LiT!