import random import string from Crypto.Util.number import * from secret import flag ext_len = 9*23 - len(flag) flag += ''.join(random.choice(string.printable) for _ inrange(ext_len)) defmy_rsa_encrypt(): p = getPrime(512) q = getPrime(512) n = p * q data = [] for i inrange(9): data.append(bytes_to_long(flag[23*i:23*(i+1)].encode())) M = Matrix(Zmod(n), [data[i:i+3] for i inrange(0, len(data), 3)]) e = 65537 C = M**e print("p =", p >> 100) print("n =", n) return C C = my_rsa_encrypt() print("C =", C)
from line_profiler import LineProfiler from secret import get_key from license import RicKV import os
flag = os.getenv('DASFLAG') smoke_key = get_key() # the key just printable, this function is to make all users key different
deflogin(password): iflen(password) != len(smoke_key): returnFalse for i inrange(len(password)): if password[i] != smoke_key[i]: returnFalse returnTrue
defcheck_password(user_input,pro=False): profiler = LineProfiler() profiler.add_function(login) profiler.enable_by_count() is_valid = login(user_input) profiler.disable_by_count() x = profiler.get_stats().timings hacker,hacker_pro = [],[] for i in x: for j in x[i]: hacker.append((j[0],j[-1])) hacker_pro.append(j) print(hacker) return is_valid, hacker_pro if pro else hacker
您可以使用 CTF 的一把梭工具,或者给我一支锐克。 Maybe you noob ctfer can go to xianyu or ask friend for help. ざっこの方は、xianyu に行くか、友達に助けを求めるといいかもしれません。ざっこ!ざっこ!🤭🤭🤭 མདོག་འདོད་འདི་ CTF གནོད་པའི་ལག་ཆོད་ལས་ ཧིན་ཨིའུ་ཡིན་ལུང་ འོག་ལུ་ལོངས་སྐད་ཁུངས་ལུ་འཛུལ་བ་འདི་འདོད་མི་འབད་ཡོད་མི་འདུག་。
""" license_key = input("🔑 > ").strip() license = input("📜 > ").strip() rick = RicKV(license_key) if rick.check(license): pro = True else: print("👵🏻👵🏻🤰👶")
defadd_round(self, s, k): for i inrange(4): for j inrange(4): s[i*4+j] ^= k[i]
defsub(self,s): for i inrange(16): index = self.S2[i] temp = s[index] s[i] = self.S1[temp]
defmix_1(self,s,r): for i inrange(16): s[i] = s[i] ^ self.subkeys[i][r]
defmix_2(self,s,x): for i inrange(0,16,4): x[i//4] = Xor(s[i:i + 4])
defflip(self, plaintext): assertlen(plaintext) == 8 S = [int(_, 16) for _ inlist(plaintext.hex())] X = [0for _ inrange(4)] for r inrange(self.round): self.mix_1(S,r) self.sub(S) self.mix_2(S,X) self.add_round(S,X)
S = [S[i] ^ self.subkeys[self.round][i] for i inrange(16)] returnbytes.fromhex("".join("{:x}".format(_) for _ in S))
defcheck(self,liscense): liscense= base64.b64decode(liscense) assertlen(liscense) % 8 == 0 l = b"\x00" * 8 for i inrange(0,len(liscense),8): l = bytes(d^j for d,j inzip(l,liscense[i:i+8])) l = self.flip(l) l = bytes(d^j for d,j inzip(l,liscense[i:i+8])) print(l) returnnotany(l)
#这里之前有爆过长度,节省时间从22开始爆,每次连接的smoke_key长度的不固定的 length=22 out=send1('1'*length) if'12'in out:#如果执行了if len(password) != len(smoke_key):后面的return False for i inrange(1,30): out=send1('1'*(length+i)) if'12'notin out: length=length+i break print(length)
key='' st=string.printable[:-5] for j inrange(length): print(j) for i in st: out=send1(r''+key+i+'0'*(length-1-j)) left=out.find('[') right=out.find(']') if left!=-1and right!=-1: l1=eval(out[left:right+1]) iflen(l1)>2: if l1[1][1]>j+1: print(l1) print('success') key+=i print(key) break else: print('over') print(out)