19
签到
16进制的ascii+base64,手速是吧,直接一血。
flag{Welcome_to_changchengbe1}
你这flag保熟吗
前面不说了,两张图片尾部都有rar,提取出来一个hint和一个password的表格,hint给了16位的base64,加密之后和表格比较,发现
哦~,原来是希尔伯特曲线
观察和写脚本经历了长达1个多小时的斗争。
用希尔伯特曲线来提取此表格的脚本如下。(根据百度)
from hilbertcurve.hilbertcurve import HilbertCurve
import xlrd
readbook = xlrd.open_workbook('password.xls')
sheet = readbook.sheet_by_index(0)
f = open('base64.txt','w+')
hilbert_curve = HilbertCurve(17, 2)
base64 = ''
for i in range(65536):
[j,k] = hilbert_curve.point_from_distance(i)
base64 += sheet.cell(j,k).value
f.write(base64)
然后将base64,n次解码
密码为1f_y0u_h4ve_7he_fllllllag,_I_muSt_vvant_1t!
解压rar,得到flag.php
brainfuck,但是怎么弄都是输出error,障眼法是吧。
观察了之后发现前面所有的.(点)都被出题人删了,而作用是输出指针指向的单元内容,所以前面那一长串都无法输出,值只能被保留在对应单元中。
好在github搜brainfuck第一个就可以看到每个单元里面的信息,虽然写脚本也行,但是人都挺懒
https://fatiherikli.github.io/brainfuck-visualizer
用这个,勾选上Optimize?,delay调到最低
但是其实你还会发现一个问题,单元格只有20多个,额外的没法输出
这时只需要凭感觉将前面部分去掉,然后重新跑就行,找交集就能知道整个链子应该是哪样的了
得到
s = [117,111,122,116,123,83,114,82,121,118,105,103,95,88,102,105,101,118,95,49,72,95,52,95,101,101,48,109,119,118,105,117,102,33,95,120,102,105,101,118,125]
然后输出发现是uozt{SrRyvig_Xfiev_1H_4_ee0mwviuf!_xfiev}
然后atbash
flag{HiIbert_Curve_1S_4_vv0nderfu!_curve}
Just_cmp-re
类原题的改编题
[Zer0pts2020]easy strcmp
自己跟着复现这道题就完事
脚本如下
enc = 'flag{********************************}'
m = [0x0A07370000000000, 0x380B06060A080A37, 0x3B0F0E38083B0A07,0x373B0709060B0A3A,0x0F38070F0D]
import binascii
flag = b"" # 由于是字节操作,需要在前面加上b
for i in range(5):
p = enc[i * 8:(i + 1) * 8] # 将enc字符串8位一组分开
print(p)
a = binascii.b2a_hex(p.encode('ascii')[::-1]) # 将分开后的字符串转每一位转换成ascii,然后逆序
print(a)
b = binascii.a2b_hex(hex(int(a, 16) + m[i])[2:])[::-1] # (enc[i]的ascii+m[i])的结果是16进制,[2::]是舍弃开头的0x,然后[::-1]逆序
print(b)
print('\n')
flag += b # 拼凑每组还原后的结果
print(flag)
flag{a14a424005b14e2b89ed45031ea791b9}