pi pi pi pi pi pi pi pi pi pi pika pipi pi pipi pi pi pi pipi pi pi pi pi pi pi pi pipi pi pi pi pi pi pi pi pi pi pi pichu pichu pichu pichu ka chu pipi pipi pipi pipi pi pi pikachu pi pi pi pi pi pi pikachu ka ka ka ka ka ka ka ka ka ka ka pikachu pi pi pi pi pi pi pikachu pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pikachu ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka pikachu pichu ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka pikachu ka ka ka ka pikachu pi pi pikachu pi pi pikachu pipi pikachu pichu ka ka ka ka ka pikachu pipi pi pi pikachu pichu pi pi pi pikachu ka ka ka pikachu pipi pikachu ka ka ka ka ka pikachu pi pi pi pikachu pichu ka pikachu pi pi pi pikachu ka pikachu pipi pi pikachu pikachu pichu pi pikachu ka ka ka pikachu pi pikachu pi pi pi pi pi pi pi pi pikachu ka ka ka ka ka ka pikachu pipi pi pikachu pichu pikachu pipi ka ka ka ka ka pikachu pi pi pi pi pi pikachu pichu ka ka pikachu pi pi pi pi pikachu ka pikachu ka ka ka ka pikachu pi pi pi pi pi pi pi pi pikachu pipi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pikachu
pikalang 解密网站:https://www.dcode.fr/pikalang-language
解密得 flag
打开后得到 base64,解密得到:
svciqytf10r3ln!nule7
W 形栅栏解密,栏数为 3,得到:
syntvfu1c0lri3elqn7!
凯撒直接遍历,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
model = "abcdefghijklmnopqrstuvwxyz" model2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
str1 = "syntvfu1c0lri3elqn7!"
for key inrange(1,27): for s in str1: if s.islower(): n = model.find(s) s = model[n-key] elif s.isupper(): n = model2.find(s) s = model2[n-key] print(s, end='') print('')
得到:
flagish1p0yev3ryda7!,
就是:flag is h1p0yev3ryda7!
然后 h1p0yev3ryda7! 进行 md5 32 (小写) 加密,得到 flag
import Crypto.Util.strxor as xo import libnum, codecs, numpy as np
defisChr(x): iford('a') <= x and x <= ord('z'): returnTrue iford('A') <= x and x <= ord('Z'): returnTrue returnFalse
definfer(index, pos): if msg[index, pos] != 0: return msg[index, pos] = ord(' ') for x inrange(len(c)): if x != index: msg[x][pos] = xo.strxor(c[x], c[index])[pos] ^ ord(' ')
dat = []
defgetSpace(): for index, x inenumerate(c): res = [xo.strxor(x, y) for y in c if x!=y] f = lambda pos: len(list(filter(isChr, [s[pos] for s in res]))) cnt = [f(pos) for pos inrange(len(x))] for pos inrange(len(x)): dat.append((f(pos), index, pos))
c = [codecs.decode(x.strip().encode(), 'hex') for x inopen('Problem.txt', 'r').readlines()]
msg = np.zeros([len(c), len(c[0])], dtype=int)
getSpace()
dat = sorted(dat)[::-1] for w, index, pos in dat: infer(index, pos)
print('\n'.join([''.join([chr(c) for c in x]) for x in msg]))
得到对应输出
可见能看到明文信息,从最后一串下手,可以猜出是 e were neither up nor down. OK ,根据明文与密文异或求出 key。
1 2 3 4 5 6 7 8
s=bytes.fromhex('32397f47102d3c101b3a2a34063a2013354111173036600a0c44314c602d32') txt="e were neither up nor down. OK" for i inrange(len(s)): print(chr(ord(txt[i])^s[i]),end='') #W_0u_Y0u_C@n_R3@11y_D@nc3_b@by print() print(chr(int('25',16)^ord('e'))) #W@_0u_Y0u_C@n_R3@11y_D@nc3_b@by
还有一位没有还原,可以结合第一句话是倒数第四句话 they 来推测,拿到正确的 key,之后 key 与所有密文异或。
还原出的 key 作为压缩包解密,第二关给了一个字典和一个加 salt 的 hash,hash 无法逆求所以只能是爆破将字典的字符按照对应的 salt 依次爆破。
1 2 3 4 5 6 7 8
from passlib.hashimport md5_crypt f=open(r'C:\Users\lx\Desktop\分区赛\密码\minirockyou.txt','r') enc='$1$ciscn010$mSuTlV75nZZGGjoayF/nS0' whileTrue: s=f.readline().replace('\n','') if enc in md5_crypt.hash(s,salt='ciscn010'): print(s) break
因为密码数据比较短,所以依次手动修改 enc 和 salt 即可,最终得到一串明文字符。
1 2 3 4 5 6 7 8
m="the second letter of each word in this list in order"#取出这些单词的第二个字符 m=m.split(' ') str='' for i inrange(len(m)): str+=m[i][1] print(str) #heefaonhinr #flag{0ed7bc5c61e32c10e082abd2b5589a22}
直接将得到的字符包上 flag 提交不对,长度不对,其余 flag 的内容均为 32 位 16 进制,所以尝试 flag {md5 (heefaonhinr)},: ) 提交正确。
''' 0x0000000000028a55 : pop rdi ; ret 0x0000000000112a51 : pop rdx ; pop r12 ; ret 0x00000000001574e6 : pop rdx ; pop rbx ; ret 0x00000000000fc103 : pop rdx ; pop rcx ; pop rbx ; ret 0x00000000000c7f32 : pop rdx ; ret 0x0000000000095982 : pop rdx ; ret 0x11 0x0000000000093342 : pop rdx ; ret 0xfffc 0x0000000000028db0 : pop rsi ; pop r15 ; pop rbp ; ret 0x0000000000028a53 : pop rsi ; pop r15 ; ret 0x000000000002a4cf : pop rsi ; ret 0x0000000000028dac : pop rsp ; pop r13 ; pop r14 ; pop r15 ; pop rbp ; ret 0x0000000000028a4f : pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret 0x000000000002a4cb : pop rsp ; pop r13 ; pop r14 ; ret 0x0000000000043922 : pop rsp ; pop r13 ; pop rbp ; ret 0x000000000002a04c : pop rsp ; pop r13 ; ret 0x00000000000de0e6 : pop rsp ; pop rbp ; ret 0x0000000000033af2 : pop rsp ; ret 0x0000000000026699 : ret '''
''' 0x00000000000248f1 : pop r15 ; pop rbp ; ret 0x0000000000023b69 : pop r15 ; ret 0x000000000005520f : pop rax ; pop rbx ; pop rbp ; pop r12 ; pop r13 ; ret 0x00000000000226be : pop rax ; pop rbx ; pop rbp ; ret 0x000000000015f8c5 : pop rax ; pop rdx ; pop rbx ; ret 0x0000000000036174 : pop rax ; ret 0x0000000000023b62 : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret 0x0000000000026019 : pop rbp ; pop r12 ; pop r13 ; pop r14 ; ret 0x00000000000ef193 : pop rbp ; pop r12 ; pop r13 ; pop r15 ; ret 0x0000000000025b9a : pop rbp ; pop r12 ; pop r13 ; ret 0x000000000008e22f : pop rbp ; pop r12 ; pop r14 ; ret 0x000000000002f708 : pop rbp ; pop r12 ; ret 0x000000000013641e : pop rbp ; pop r13 ; pop r14 ; pop r15 ; ret 0x00000000000248ee : pop rbp ; pop r14 ; pop r15 ; pop rbp ; ret 0x0000000000023b66 : pop rbp ; pop r14 ; pop r15 ; ret 0x000000000002601d : pop rbp ; pop r14 ; ret 0x00000000000ef197 : pop rbp ; pop r15 ; ret 0x0000000000046077 : pop rbp ; pop rbp ; ret 0x0000000000055bb8 : pop rbp ; pop rbx ; ret 0x00000000000226c0 : pop rbp ; ret 0x000000000010feb0 : pop rbx ; pop r12 ; pop r13 ; pop r14 ; ret 0x0000000000046073 : pop rbx ; pop r12 ; pop r13 ; pop rbp ; ret 0x0000000000062569 : pop rbx ; pop r12 ; pop r13 ; ret 0x000000000005b937 : pop rbx ; pop r12 ; ret 0x000000000003040a : pop rbx ; pop rbp ; pop r12 ; pop r13 ; pop r14 ; ret 0x00000000000ef192 : pop rbx ; pop rbp ; pop r12 ; pop r13 ; pop r15 ; ret 0x0000000000025b99 : pop rbx ; pop rbp ; pop r12 ; pop r13 ; ret 0x000000000008e22e : pop rbx ; pop rbp ; pop r12 ; pop r14 ; ret 0x000000000002f830 : pop rbx ; pop rbp ; pop r12 ; ret 0x000000000013641d : pop rbx ; pop rbp ; pop r13 ; pop r14 ; pop r15 ; ret 0x0000000000196c62 : pop rbx ; pop rbp ; pop r14 ; ret 0x00000000000226bf : pop rbx ; pop rbp ; ret 0x000000000002fdaf : pop rbx ; ret 0x0000000000119150 : pop rcx ; pop rbp ; pop r12 ; pop r13 ; ret 0x00000000001587d3 : pop rcx ; pop rbx ; pop rbp ; pop r12 ; pop r13 ; pop r14 ; ret 0x000000000010257e : pop rcx ; pop rbx ; ret 0x0000000000118d4f : pop rcx ; ret 0xf66 0x00000000000248f2 : pop rdi ; pop rbp ; ret 0x0000000000023b6a : pop rdi ; ret 0x0000000000119211 : pop rdx ; pop r12 ; ret 0x000000000015f8c6 : pop rdx ; pop rbx ; ret 0x000000000010257d : pop rdx ; pop rcx ; pop rbx ; ret 0x0000000000142c92 : pop rdx ; ret 0x00000000000dfc12 : pop rdx ; ret 0x10 0x00000000000248f0 : pop rsi ; pop r15 ; pop rbp ; ret 0x0000000000023b68 : pop rsi ; pop r15 ; ret 0x000000000002601f : pop rsi ; ret 0x00000000000248ec : pop rsp ; pop r13 ; pop r14 ; pop r15 ; pop rbp ; ret 0x0000000000023b64 : pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret 0x000000000002601b : pop rsp ; pop r13 ; pop r14 ; ret 0x00000000000ef195 : pop rsp ; pop r13 ; pop r15 ; ret 0x0000000000046075 : pop rsp ; pop r13 ; pop rbp ; ret 0x0000000000025b9c : pop rsp ; pop r13 ; ret 0x000000000008e231 : pop rsp ; pop r14 ; ret 0x000000000012cf7e : pop rsp ; pop rbp ; ret 0x000000000002f70a : pop rsp ; ret 0x0000000000099020 : pop rsp ; ret 0xffff 0x0000000000022679 : ret '''