2020金盾信安杯wp
CRYPTO
0x01-base
内容:链接: https://pan.baidu.com/s/18oejcVD2ywcSuHo5mqTP1A 密码: hbg4
下载附件解压,用记事本打开
在线base64转图片,另存为png
是张二维码
扫描二维码
F#S<YReBy{f.WwU{CSv^e^'n*D
在线Base92解码,得到flag
0x02-不一样的凯撒
内容:链接: https://pan.baidu.com/s/1vwAzXwpttfflbqojLWgdpQ 密码: w913
这道题当时没有做出来,复现一下
#密文
bhag{asb_zsz_vtsz_aszw}
转化成Ascll码
98 104 97 103 123 97 115 98 95 122 115 122 95 118 116 115 122 95 97 115 122 119 125
flag的格式为flag{}
f l a g {
102 108 97 103 123
从密文得到flag,密文前两位ascll码98和104
均+4,后面三位字母的ascll码103 123 97
保持不变.
规律为
ascll码为偶数数值加4,奇数则保持不变
写个脚本
m='bhag{asb_zsz_vtsz_aszw}'
for i in m:
if ord(i)%2 == 0:
print(chr((ord(i)+4)),end="")
else:
print(i,end="")
运行结果
flag{asf_~s~_zxs~_as~w}
~
显然不是想要的结果,其ascll码为126,超出了范围,ascll减去26,对应的字母是d
所以最后的结果为 flag{asf_dsd_zxsd_asdw}
改进后的脚本
m='bhag{asb_zsz_vtsz_aszw}'
for i in m:
if i>'a' and i<'z' and ord(i)%2 == 0:
print(chr(((ord(i)+4-97))%26+97),end="")
else:
print(i,end="")
0x03-今天是个好日子
内容:链接: https://pan.baidu.com/s/1BUqo-j2HtXcvrx4kXEEmeQ 密码: l3hl
下载附件
扫描二维码
\u0056\u0054\u004a\u0047\u0063\u0032\u0052\u0048\u0056\u006d\u0074\u0059\u004d\u0053\u0074\u006c\u0061\u0046\u0068\u006b\u0052\u0048\u0056\u0042\u004d\u0030\u0056\u0044\u004e\u0031\u0052\u006a\u0063\u006a\u0056\u0069\u0054\u0030\u0068\u004f\u0061\u0048\u0070\u0069\u0052\u0056\u0042\u0050\u0065\u006a\u0055\u0031\u0052\u0032\u0052\u0035\u004e\u0056\u004e\u0030\u0057\u006c\u0055\u0033\u0055\u006b\u0052\u0036\u0057\u0054\u0064\u0049\u005a\u006e\u0049\u0031\u0054\u0054\u0046\u004b\u0062\u0030\u0035\u0030\u0065\u0067\u006f\u0067
VTJGc2RHVmtYMStlaFhkRHVBM0VDN1RjcjViT0hOaHpiRVBPejU1R2R5NVN0WlU3UkR6WTdIZnI1TTFKb050egog
Base64解码
U2FsdGVkX1+ehXdDuA3EC7Tcr5bOHNhzbEPOz55Gdy5StZU7RDzY7Hfr5M1JoNtz
尝试了各种解码,最后AES解码,题目是今天是个好日子,所以密钥为20201220,拿到flag
MISC
0x01-注意数字
内容:链接: https://pan.baidu.com/s/14yqufylp_V4iviXUQLm4Nw 密码: k0ji
图中的数字是3和9,binwalk查看,发现隐藏文件,分离
得到压缩包,解压到一个文档
去掉前面的b’和后面的’,然后进行base64解码,一直解码,大概解了31次,快吐了,最后得到
yqjb{lha-drwohjw-ekf}
前面的数字是3和9,进行仿射密码解码
0x02-小火龙冲啊
内容:链接: https://pan.baidu.com/s/1_Te9_NvNrJywyUt6T8YFWA 密码: o0rm
下载附件
用010 editor图片,发现pass:111111
binwalk一下,发现有隐藏文件
分离文件,分离出1B377.rar
上面的111111为压缩包密码
0x03-五瓶药水
内容:链接: https://pan.baidu.com/s/1Hq-WmLrX2Su4RyOcileDUg 密码: lw7u
下载附件,都是压缩包
CRC碰撞,根据彩虹排序颜色排序,红橙黄绿青,CRC32值分别为
红 555FA1A2
橙 E5C67F46
黄 6E957E45
绿 76D6A31A
青 2B042586
补充上0x开头,使用脚本进行碰撞
import binascii
import string
dic=string.printable
crc1 = 0xe5c67f46
crc2 = 0x555fa1a2
crc3 = 0x6e957e45
crc4 = 0x76d6a31a
crc5 = 0x2b042586
def CrackCrc4(crc):
for i in dic :
for j in dic:
for p in dic:
for q in dic:
s=i+j+p+q
if crc == (binascii.crc32(s.encode("ascii"))):
print (s)
return 1
CrackCrc4(crc1)
CrackCrc4(crc2)
CrackCrc4(crc3)
CrackCrc4(crc4)
CrackCrc4(crc5)
脚本跑出来
cG90
aW9u
Z2Vu
YjEy
Mw==
Base64解码
potiongenb123
解压flag.zip,密码为potiongenb123
上面那个网站不行,换了个网站,Base64转图片
用010打开图片,拖到最后,看到了flag
0x04-我和十六有个约定
内容:链接: https://pan.baidu.com/s/1LJiUaVyANUZBN4bb1SHiCQ 密码: u5sr
下载附件,得到ababab.png和flag.zip
010打开ababab.png,发现其实是GIF,不过没什么用,拖到最后,看到keyis7034735377307244
十六进制转字符串,得到p4sSw0rD,这就是压缩包密码解压文件flag.txt和splice.txt
flag.txt内容为
发现第一行FF D8 FF E0
,倒着读是jpg的文件头,找到一个脚本将flag.txt反转,生成output.txt
#coding=utf-8
import re
f=open("flag.txt")
out = open("output.txt","w")
out.close()
out = open("output.txt","a")
for fl in f.readlines():
temp=re.findall(r'.{2}',fl)
order=[]
for i in temp:
order.append(i)
order.reverse()
print(''.join(order))
out.write(''.join(order)+'\n')
f.close()
out.close()
去掉空格
打开010,新建一个Hex file,把编辑后的output.txt内容粘贴进去
文件头是FF D8 FF E0,是jpg文件,另存为output.jpg,得到一张残缺的二维码
splice.txt内容为
Base64转换为图片
补全二维码
扫码得到flag
0x05-One_piece
内容:链接: https://pan.baidu.com/s/16XRUA9HFBENqoHdRSNdFNA 密码: dpfj
一开始以为是伪加密,后来直接爆破压缩包密码
口令为9156,解压文件,得到一个C语言代码和一个记事本
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(int argc, char* argv[]) {
unsigned int first, second, thirdly, fourthly;
if (first + 2 != 100) //first=b
{
printf("wrong!\n");
}
if (second * second != 9409) //second=a
{
printf("Made a mistake!\n");
}
if (thirdly / 7 == 14 && thirdly < 100) //thirdly=b
{
printf("yes! You got it\n");
}
if (fourthly != 121)//fourthly=y
{
printf("not this!\n");
}
int p[4] = {first,second,thirdly,fourthly};
int i;
printf("key:");
for ( i = 0; i < 4; i++)
{
printf("%c", p[i]);
}
printf("\n");
return 0;
}
读这段代码,绕过四个if语句可以得到key
1.first + 2 != 100,得first=98
2.second * second != 9409,得second=97
3.thirdly / 7 == 14 && thirdly < 100,得thirdly=98
4.fourthly != 121,得fourthly=121
把first=98,second=97,thirdly=98,fourthly=121待人入运行程序,得到key为baby
记事本的内容为
++++++++[>>++>++++>++++++>++++++++>++++++++++>++++++++++++>++++++++++++++>++++++++++++++++>++++++++++++++++++>++++++++++++++++++++>++++++++++++++++++++++>++++++++++++++++++++++++>++++++++++++++++++++++++++>++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>+++++++.>----.<-----.+++.>>-----.<++++.--.<+.-------.>.----.-----.-.-.<.>+++++++.>--------.<<.>>++.<----.++++.>--.<<.>+.++.>+++.----.<++.<++++.>>++++++++.<<<<<<+.>>>>>>+++.
glbe{pnf_njedc_js_ufjs_kmvrocz!}
维吉尼亚解码,密钥为baby
flag{one_piece_is_this_journey!}