2016 ASIS CTF secuprim
by St1tch import string import sys import re from pwn import * from itertools import product, permutations from Crypto.Util.number import isPrime from gmpy2 import isqrt from multiprocessing import Process, Queue def cnt_prime(a, b, output) : if a % 2 == 0 : a += 1 cnt = 0 for i in range(a, b, 2) : if isPrime(i) == True : cnt += 1 output.put(cnt) def cul(a, b) : output1 = Queue() output2 = Queue() procs = [] start = a end = b mid = (a+b)/2 procs.append(Process(target=cnt_prime, args=(start,mid,output1))) procs.append(Process(target=cnt_prime, args=(mid,end+1,output2))) for p in procs : p.start() cnt = output1.get() + output2.get() output1.close() output2.close() for p in procs : p.join() return cnt if __name__ == '__main__' : maps = string.printable[:62] while(True) : s = remote('secuprim.asis-ctf.ir', 42738) p = log.progress('Working') p.status('Stage 1!') tmp = s.recvuntil('X: ').split('\n')[2].split('"') str_, hash_ = tmp[1], tmp[3][:-3] first = '' #for i in product(maps, repeat=4) : for i in permutations(maps, 4) : tmp = sha256sumhex(''.join(i)+str_)[:len(hash_)] if tmp == hash_ : first = ''.join(i) break s.sendline(first) s.recvuntil('---\n') for _ in range(2, 100) : p.status('Stage %s ing~'%(str(_))) try : tmp = s.recvuntil('like n such that') tmp = s.recvuntil('\n') except : tmp = s.recvall() print tmp if bool(re.search('ASIS',tmp)) : p.success('Clear !') sys.exit(1) break tmp = tmp.split(': ')[1].split() start, end = int(tmp[0]), int(tmp[4]) cnt = cul(start, end) cnt += int(isqrt(end)-isqrt(start)) s.sendline(str(cnt)) log.success('Stage %s clear!'%(str(_)))
블로그의 정보
튜기's blogg(st1tch)
St1tch