str1=[16,4,24,11,24,16,4,21,11,5,31,46,33,46,72,21,6,46,17,69,5,62,46,24,21,72,46,69,33,31,10] for i in str1: x = ((i ^ 0x42) - 4) ^ 0x37 print(chr(x),end="")
import base64 from os import read f = open(r'.\story.txt','rb') c = f.read().strip() s = c while1: try: s = base64.b64decode(s) print(s) except: try : s = base64.b64decode(s[::-1]) print(s) except: break
s = '9smRjNnSWF2b4dkV6BHbStGdrJVcaZUVxM3VZhlWFJlaO52UHZkMURDZrZFNwFTYXhGbSRHZxM2caVlW5plRidFaX5kcK1WVzhnMVpnWsJFbw1mVyRGbNNEarlFVWpXYThWRjhXSWl1Rwh1VyI0MhxmWGF2ckx2YHRGMWNDayEGWoV0YyFzaWtmWVpFMwZkYsR3aWdXVsZ1QotWWYJ1VSpGZrdFeRZVW0QGbWdXUE10UsdUYHBHbSdEZWpVYatWYXpFShpXWsZVNjBTW6BnRiVlQU1EWaxWTahXbVNHcxEGWaZ0YHZ0VZdkUWdlW41WZohmRhlFZGVmVGpXWop1ahdlWEFGWK1GVzRGMZBjUHJ2U0VVTYJVMSdnRUlFWoJTYSxGbTlXWxQVMjZlVhBHbWlGasRlcWxmVzplVaNDaYJ2V5s2VWpkMW9UNtZFNxsWTUJlaTFnWWd1SGpWVwplRiJlVGp1RW1mUrpVMWlkWFZVakZkY1RWMjdkSqZFSSJTYYxGSjJnSGdFM01WVWh3VN5EdrdlVSZ0VTR2aZdFaXZ1TaVkWHZVbhFGetZFNGxWZo5kRhNnUWN1VkVkWYBnVSFGeFN2VxAjVHRWVZpFcwIFWSREZ0plRNdHetZVYShlYTZkbXdVMwY1U41mVZpFblhGaGplcOZ0U4NnMWhGcsJ1VKRUZ0ZlMVtGeHZlS1UlYT5kVNRnWG1kUKRVWZhXbSpmWsNVeVFjUrZlVXpkQIJ2U0d1T0JFbONnWwYFV1sWYXJkRjhXRHd1a0JTV1Y1aNhmUU1Edax2U3ZlVU9kVUJVYkZVTGRmRlJkUGZVTChkYXZFbSRnVGN1aaxmVyh2MWdlVEJ2caZUYDJ1aXpnSsZlWk52VyxmRXdHdtVFaCh0VW5kbWdkVtVVYWxmV' s = base64.b64decode(s[::-1]) s = (base64.b64decode(s)) s = (base64.b64decode(s)) s = (base64.b64decode(s)) s = (base64.b64decode(s)) s = base64.b64decode(s[::-1]) s = (base64.b64decode(s)) s = (base64.b64decode(s)) s = base64.b64decode(s[::-1]) s = (base64.b64decode(s)) s = base64.b64decode(s[::-1]) s = base64.b64decode(s[::-1]) print(s[::-1])
晚上做完了Web3,寻思去看看Misc3,从来没做过取证,呜呜呜,下载下来是一个名字为zip的文件,010打开,看到zip文件头50 4B 03 04,显然需要修改文件后缀名,然后解压得到了flag.txt和一个rar,binwalk,foremost啥也没搞出来,NTFS隐写也是啥也没有,没思路了,所以第一天晚上这题咕了。第二天起来,上午试了无数的方法都解不出来压缩包,也搞不懂flag.txt咋回事,直到下午伟大的树神告诉我flag.txt中可能有零宽字符隐写,即刻跑到羊羊师傅的博客搜一波,搜到了,然后学了一波。这里贴一下羊羊师傅的博客(http://www.ga1axy.top/) kali中vim打开flag.txt,看到 yep!确实是零宽字符隐写,在线网站解就好,得到minil**** 这个应该就是rar压缩包的密码的一部分,手试了几次,全部以失败告终…… 想着试着把rar拖进ARCHPR爆破提示文件格式解析不了,网上搜到说是ARCHPR爆破不了rar5,把题目的rar拖进010,看到文件头为52 61 72 21 1A 07 01 00,确实是rar5的文件头。去网上搜怎么爆破rar5的密码,查到可以用rar2john+hashcat,然后花了一下午装这俩工具,期间出现了无数的小问题,我是真的菜,但凡之前少嫖几次别人工具直接用,自己找几次,装个工具都不会这么费劲。 有工具了啥都好说,这里还要说羊羊师傅yyds,在羊羊师傅博客里以最快速度学会了怎么用hashcat爆破 kali,rar2john flag.txt得到rar压缩包的hash windows,./hashcat64.exe -m 13000 -a 3 '$rar5$16$529d132521c41a0d068fa8ceeab29cde$15$8c79ff2fb201f8b6c1a0981bb57e20c9$8$4138cf0615f62942' minil?a?a?a?a 解压rar压缩包,img文件终于出来了,呜呜呜 搜到个能搞硬盘的工具(X-Ways Forensics),把img文件拖进去,用这东西也费了好多时间,因为属实没用过,不会用。 最后发现可以直接看分区目录,点了一下分区1…… az,出来了,”好康的”,看了两遍视频挺有意思的,被开头吸引(bushi,然后树神看了一眼,让我把视频发给他,过了一会,给我发回来7张图片(hsyyds),得到的一串数字是:7355608(cs放C4输的,哈哈哈) 接下来应该就是最后一步了,从“奇怪的邮件”中找线索,利用这串数字解出flag! 这里想吐槽自己,为什么这么喜欢用微软的搜索引擎,搜了俩小时啥也没搜到,英语学弱被迫看了好几遍邮件内容,咋看都觉得Senate bill 1621 ; Title 3 , Section 303 .,Senate bill 2116 , Title 9 , Section 309,Why work for somebody else when you can Why work for somebody else when you can become rich within 38 WEEKS !Why work for somebody else when you can become rich inside 59 days ! become rich within 81 days这些等等没完没了重复的东西不对劲,可是就是搜不到,后来破罐子破摔,开梯子去谷歌搜了一下Senate bill 2116 , Title 9 , Section 309一下就搜到解密网站了,哎 flag:MiniLCTF{n3ver_g0nna_L3t_H5_dowN}
defget_flag(): phi = (p-1)*(q-1) d =inverse(e,phi) return long_to_bytes(pow(c,d,n))
defget_p_q(): p_low = [0] q_high = [0] q_low = [0] p_high = [0] maskx = 1 maskn = 2 si = 2 for i inrange(256): x_lowbits = (x & maskx) >> i n_lowbits = (n % maskn) tmppp_low = [] tmpqq_low = [] tmppp_high =[] tmpqq_high =[] x_highbits = (x >> (511-i)) & 1 n_highbits = (n)>> (1022 - 2*i) for j inrange(len(p_low)): for pp_low inrange(2): for qq_low inrange(2): for pp_high inrange(2): for qq_high inrange(2): if pp_low ^ qq_high == x_lowbits and qq_low ^ pp_high == x_highbits: temp1 = ((pp_low * maskn //2 + p_low[j]) * (qq_low * maskn // 2 + q_low[j])) % maskn temp2 = (((pp_high << (511-i)) + p_high[j]) * ((qq_high << (511-i)) + q_high[j]))>>(1022-2*i) if temp1 == n_lowbits : if n_highbits-temp2 >= 0and n_highbits-temp2 <=(2<<i+1): #print("down") tmppp_low.append(pp_low * maskn //2 + p_low[j]) tmpqq_low.append(qq_low * maskn //2 + q_low[j]) tmppp_high.append((pp_high<<(511-i))+p_high[j]) tmpqq_high.append((qq_high<<(511-i))+q_high[j]) #print(tmppp_low) #print(tmpqq_low) #print(tmppp_high) #print(tmpqq_high) maskn *= 2 maskx *= 2 p_low = tmppp_low q_low = tmpqq_low p_high = tmppp_high q_high = tmpqq_high print(i,len(p_low)) for a in p_low: for b in p_high: if n %(a+b) ==0: p = a + b print(p) q = n//p return p,q
if __name__ == "__main__": n = 142640215238537871365683719891541306935180737226071087966538112975312943506714964164341655541156886519552359173518384366335764339838818638439617545046906731685628758140658162759582216079833807742803333237267119228131836589616600586722503125595590784393805677472708123448256012705645099262323873911736910168311 c = 141992115210477059329798383810995602331919683555539663737474122431362785313684902184569357178889736223104558359787247242121836892146092641430333220915928891299001128364434856756544237628623127350186698031711524123158225428351095110283324920060240308834304841350657100420648385312630518518518978998617676378512 e = 0x10001 x = 2687108833541074884027968939992825896836389810177573543799115292760866858835988113613745599976930175463756036625174575759254321939315015594803646458939874 p , q = get_p_q() flag = get_flag() print(flag)
from pwn import * from base64 import b64decode, b64encode from Crypto.Util.number import long_to_bytes
defget_least_length(): for i inrange(1, 16): guess = b'\x00' * i c = b64decode(get_recv(guess)) if i == 1: base = len(c) iflen(c) != base: return base - 16 - i
defget_recv(x): io.send(b'1') io.recvuntil(b':') io.send(b64encode(x)) Res = io.recvuntil(b'flag;').decode().split('\n') return Res[1]
defget_message_last(c): guess = long_to_bytes(66) * 239 for i inrange(256): G = guess + long_to_bytes(i) io.send(b'2') io.recvuntil(b':') io.send(b64encode(G + c)) io.recvuntil(b':') io.send(b64encode(IV)) resp = io.recvuntil('flag;').decode().split('\n')[1] if resp == '': return i
if __name__ == "__main__": IV = b'\x00'*16 LengTh = 0 ciphertext = [] M = [0]*17 while LengTh == Noneor LengTh != 17: try: io = remote('0.0.0.0', 10001) io.recv() LengTh = get_least_length() print(LengTh) except: io.close() print('Get Length!!!') for i inrange(16): pad = b'\x76' * 16 + (15 - i) * b'\x00' res = get_recv(pad) ciphertext.append(b64decode(res)) print('Get Ciphertext!!!') i = 0 for c in ciphertext: print(i) if i == 0: c16 = c[48:64] M[-1] = long_to_bytes(get_message_last(c16) ^ c[47]) c16 = c[32:48] M[i] = long_to_bytes(get_message_last(c16) ^ c[31]) i += 1 m = b''.join(M) print('Get Message!!!') io.recv() io.send(b'3') print(io.recv()) io.send(b64encode(m)) print(io.recv()) print(io.recv())