# Gleb RUysaewv, our lord and saviour всем привет ставьте лайки и погнали мы начинаем райтап на крипту ## Encrypccino просто брутим лол кек вот скрипт все по последниму слову техники блин!!! потоки!!!!! ``` #!/usr/bin/env python3 import argparse import hashlib import secrets from pathlib import Path import multiprocessing from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad SALT = b"ENCRYPCCINO" WARNING = "If you lose your passphrase, we cannot restore access to your data.\nMake sure you save your passphrase in a safe place." with open(Path(__file__).parent / "words.txt") as f: words = [w.strip() for w in f.readlines()] def main(): parser = argparse.ArgumentParser() group = parser.add_mutually_exclusive_group() group.add_argument( "-e", "--encrypt", action="store_true", help="encrypt with random passphrase" ) group.add_argument( "-d", "--decrypt", metavar="passphrase", help="decrypt with passphrase" ) parser.add_argument("files", nargs="+") args = parser.parse_args() if args.encrypt: encrypt_all(args.files) elif args.decrypt: passphrase = args.decrypt.strip().split(" ") decrypt_all(args.files, passphrase) else: parser.print_help() def encrypt_all(files): passphrase = generate_passphrase(2) passphrase_str = " ".join(passphrase) print(f"Your passphrase:\n{passphrase_str}\n\n{WARNING}") for file in files: with open(file, "rb") as f: data = f.read() for word in passphrase: data = encrypt(word, data) with open(f"{file}.enc", "wb") as f: f.write(data) enc_file = 1 enc_data = [] def download_data(filename): with open(f"{filename}", "rb") as f: data = f.read() return data def decrypt_all(files, passphrase): for file in files: with open(f"{file}.enc", "rb") as f: data = f.read() for word in reversed(passphrase): print([word]) print(data, '->') data = decrypt(word, data) print(data, '\n') with open(file, "wb") as f: f.write(data) def try_combination(passphrase): for word in reversed(passphrase): try: data = decrypt(word, enc_data) except: return 0 return data def bruteforce(chunk): cnt1 = 0 for i in words[min(370103 - 1, chunk*37000):min(370103, (chunk+1)*37000)]: cnt1 += 1 if cnt1 % 1000 == 0: print('[', chunk, ']',cnt1, '/ 37000') try: data = decrypt(i, enc_data) except: continue for j in words: try: data2 = decrypt(j, data) except: continue if data2[:5] == b'Lorem': print([data2, i, j]) # https://xkcd.com/936/ def generate_passphrase(strength): return [secrets.choice(words) for _ in range(strength)] def encrypt(password, plaintext): return cipher(password).encrypt(pad(plaintext, 16)) def decrypt(password, ciphertext): return unpad(cipher(password).decrypt(ciphertext), 16) def cipher(password): digest = hashlib.sha256(password.encode() + SALT).digest() key, iv = digest[:16], digest[16:] return AES.new(key, AES.MODE_CBC, iv) def init_brute(): print('Starting threads..') pool = multiprocessing.Pool() pool.map(bruteforce, range(1, 10)) pool.close() print('Done') if __name__ == "__main__": main() ``` ## I'm one yet many ЗАМЕЧАЕМ что ключ то у нас один а на конце каждой строки из readlines у нас \n вот и думайтеперь вот скрипт ``` #!/usr/bin/env python3 import os def encrypt(key, plaintext): assert len(key) >= len(plaintext) return bytes(x ^ y for x, y in zip(key, plaintext)) def main(): key = os.urandom(10 * 1024) with open("flag.txt", "rb") as f: flag = f.read() print(encrypt(key, flag)) with open("data.bin", "rb") as f: for line in f.readlines(): print(encrypt(key, line)) key = b'\x00'*2435 def modify_key(element, number): global key buff = list(key) buff[element] = number key = bytes(buff) otp = open('output.txt', 'r') results = otp.readlines() results = [i.strip('\n') for i in results] results = [bytearray.fromhex(i) for i in results] for i in results[1:]: nline = len(i) - 1 modify_key(nline, i[-1] ^ 10) print(encrypt(key, results[0])) ``` простите за говнокод))) ## Firmware находим официальный райтап таска от LIveOVERFLOW https://www.youtube.com/watch?v=EOlddNofKxo там штото про математику копируем скрипт из комментов ксорим фейковую прошивку с оригом вписываем результат в строку GOAL (в саге скрипте в комментах) запускаем вываливаются названия файлов создаем их в фейк архиве PROFIT!!! ``` import sage.all import hashlib # part1 - https://www.youtube.com/watch?v=Vgdhlh6evjI # part2 - https://www.youtube.com/watch?v=EOlddNofKxo # prepare a table of bits def bits_of(x): bits = [] for c in "{:08b}".format(x): bits += [int(c)] return bits # list of 8bit arrays/vectors # bits_table[ 0] = [0,0,0,0, 0,0,0,0] # bits_table[ 3] = [0,0,0,0, 0,0,1,1] # bits_table[86] = [0,1,0,1, 0,1,1,0] bits_8_table = [bits_of(x) for x in range(0x100)] def mk_vector(filename): bits_256 = [] # sha256 of the filename+"\0" result = hashlib.sha256(filename) # for each byte of the hash we get each bit for byte in result.digest(): # add the next 8 bits to the bits vector bits_256 += bits_8_table[byte] # return the bit vector return bits_256 GF2 = Zmod(2) vectors = [] filenames = [] # loop over some numbers for x in range(99999): # generate a 256bit vector from a possible filename filename = "{}\0".format(x) new_256_vector = mk_vector(bytes(filename, 'utf-8')) # create a matrix of all old vectors + the potential new one in GF(2) m = matrix(GF2, vectors + [new_256_vector]).transpose() # check the rank of this matrix rank = m.rank() # if rank increased, keep this file and vector because it's linear independent if rank > len(vectors): print("file '{:3}' is linear independent".format(x)) vectors += [new_256_vector] filenames += [filename] else: print("file '{:3}' is NOT linear independent".format(x)) if len(vectors)==256: break GOAL = [] # the signed hash is the "point" that we want to get to in the vector space for c in '\xd7,\x06\xda9Z\xf9\xbe\xaa:\x9ec\x99\xe4\x17\xcf\\\x95HZ2\xe6180v\x0e\x8c\x02\xa8\x9c\x8d': GOAL += bits_8_table[ord(c)] # create the whole matrix in GF(2) with all 256 bit vectors m = matrix(GF2, vectors).transpose() solved_equation = m.solve_right(vector(GOAL)) print(solved_equation) for x, s in zip(solved_equation, filenames): #print x, s if x: print(s) ```