赞
踩
进入IDA分析,找到主函数,F5查看伪代码
里面存在好几个while循环和if判断,而且数值特别大。
再往下看,下面还会输出“what a shame!!!”,意思是好可惜啊,可以判断,如果输出这句话,就说明我们错了,所以,通过上面的条件将这句话跳过去。
可以看出来,当if(v4&1)成立时,v5会重新赋值,v16也会变,不满足下面的判断,执行“break”,从而跳过这句话。所以说,v4=1。
接下来会调到一个switch语句中去,而且他通过不断地判断来更改v16的值,从而进入不同的case中。
经过分析,他一改先进入第七个case,通过if判断,进入第六个case,再通过if判断,来到switch上方的if语句出,从而跳过if的break;接着过if判断,进入第二个case,经过if,进入第四个判断,然后输出“you get it !”,成功。
所以他们需要满足fun_check1到5返回值均为1。
主要函数有4个(1没太大作用),其中2,3,4比较简单,作用如下
我们进入函数5,
s = a1; seven = a2; v12 = 0; v11 = -624695604; while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( v11 == -1771681815 ) { v6 = 1740029224; if ( s[v12] >= 'a' ) v6 = -1207418117; v11 = v6; } if ( v11 != -1490231676 ) break; ++v12; v11 = -768723158; } if ( v11 != -1407902233 ) break; v4 = -1188300396; if ( s[v12] <= 57 ) v4 = -478229440; v11 = v4; } if ( v11 != -1207418117 ) break; v7 = 1740029224; if ( s[v12] <= 'z' ) v7 = 2096910144; v11 = v7; } if ( v11 != -1188300396 ) break; v5 = -1771681815; // 插个眼 在此判断字母与- if ( s[v12] == 45 ) v5 = -1167333891; v11 = v5; } if ( v11 != -1167333891 ) break; v13[v12] = s[v12]; // 如果s里是“-”就不做处理 v11 = -118846692; } if ( v11 != -995934932 ) break; v3 = -1188300396; if ( s[v12] >= '0' ) // 第一次 s[0] v3 = -1407902233; // 第二次来 s【1】 v11 = v3; // 第三次来 s[2] } if ( v11 != -991718889 ) break; v11 = -1490231676; } if ( v11 != -768723158 ) break; v8 = 1681851953; if ( v12 < 36 ) v8 = 434013166; v11 = v8; } if ( v11 != -624695604 ) break; v2 = 659899916; if ( v12 < 36 ) v2 = -995934932; v11 = v2; } if ( v11 != -478229440 ) break; v13[v12] = s[v12] + 17; // 如果s里面有数字,则加17变为大写字母 v11 = 1926387427; } if ( v11 != -451717645 ) break; ++v12; v11 = -624695604; } if ( v11 != -118846692 ) break; v11 = 1926387427; } if ( v11 != 329160926 ) break; v16 = 0; v11 = 1269730414; } if ( v11 != 434013166 ) break; v9 = -991718889; if ( v13[v12] != seven[v12] ) v9 = 329160926; v11 = v9; } if ( v11 != 659899916 ) break; v12 = 0; v11 = -768723158; } if ( v11 == 1269730414 ) break; switch ( v11 ) { case 1681851953: v16 = 1; v11 = 1269730414; break; case 1740029224: v11 = -118846692; break; case 1926387427: v11 = -451717645; break; case 2096910144: v13[v12] = s[v12] - 1347911315 + 1347911267;// 小写字母-48 变成数字 v11 = 1740029224; break; } } return v16 & 1; }
经过多次循环,可以看出,该函数主要有三点功能,
s="J2261C63-3I2I-EGE4-IBCC-IE41A5I5F4HB"
flag=""
for k in s:
i=ord(k)
if i==45:
flag=flag+chr(i)
elif i>=48 and i<=57:
flag=flag+chr(i+48)
elif i>=65 and i<=90:
flag=flag+chr(i-17)
print(flag)
解得flag:flag{9bbfa2fc-c8b8-464d-8122-84da0e8e5d71}
坑爹的签到题,以前没遇见过这种类型的,
得到flag
下载压缩包,解压缩,有一张图片,上书二十四真言,是社会主义核心价值观,作为社会主义新青年,我们知道,这是社会主义核心价值观加密。
网上找在线解密,不知道为什么,全都输进去解不出来,只能几个几个的试,经过无数次尝试,解出密码,CodeValues。这不是flag,继续。
一张png图片,binwalk一下,里面有东西,分析出来,又是一个压缩包,还有密码。
找伪加密,不是。将上步解出的密码输入,对了。
又是一张图片,还是二十四字真言,
中间的东西看着就像二维码,扫一下,没反应,ps编辑,放大,在扫,flag出来了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。