luckybase

之前的TSGCTF里有这样的题,构造特殊输入加密后可组成算式即可,脚本如下:

# coding=gbk
from pwn import *
table = { 
    '0.1/': '㝿㝴',
    'e00+': '{M>',
    'e01+': '{M~',
    'e04+': '{N>',
    'e05+': '{N~',
    'e08+': '{O>',
    'e09+': '{O~',
    'e10+': '{]>',
    'e11+': '{]~',
    'e013': '{Mw',
    'e14+': '{^>',
    'e15+': '{^~', 
}
p=remote('111.231.70.44',28170)
for i in range(24):
    p.recvline()
num=float(p.recvline()[:-1])
num*=1e10
payload = "0.1/e00+"*int(num//1e9)
num%=1e9
payload += "0.1/e01+"*int(num//1e8)
num%=1e8
payload += "0.1/e04+"*int(num//1e5)
num%=1e5
payload += "0.1/e05+"*int(num//1e4)
num%=1e4
payload += "0.1/e08+"*int(num//1e1)
num%=1e1
payload += "0.1/e09+"*int(num)
payload += "0.1/e013"

data = ""
for i in range(0, len(payload), 4):
    data+=table[payload[i:i+4]]
p.sendline(data)

p.interactive()

运行即可得到flag

RealSimpleAlgorithm

研究一下可以发现n可以分解为pqr和s两个近似p^2*q^3的数,于是可以用费马分解,脚本如下:

import gmpy2
def Fermat(num):
    x=gmpy2.iroot(num,2)[0]
    print(x)
    if x*x < num:
        x += 1

    while(True):
        y2 = x*x - num
        y = gmpy2.iroot(y2,2)[0]
        if y*y == y2:
            break
        x += 1;
    return [x+y, x-y];

n=1860327696858483638242873699057481731828966202667118447875641737052580086130386699140211875656172396806529285296255507067947720275440395243585744762634134799652679012162553470358069174964736556509363739963446475910312109560748248281868924751143259992526361526412522842478707375878456331299480073407103013384269410605266503677321141979835759668348700985853882555130830212759763720486540122636774648845903535938171865529805154133050800829412616729038682693821153946780697800281104805967006792129015849883196671592937966261467844851060816687462875770271718292145518180058865214410450540186749260067900135932306081369153398970407522741521060589846700952216359783498238344249142661018574950492921311429449928332676262287371865397041940360919887179193158546566012224424610467409430530106325127453143332046586173655708209678969537534025563287565527639693302344631945245138747986244061559475507576544258646980555887980114731354108434171931096517519443070749376819964946147645021191161204976124462852481795577785818301494801337374774058200235940866073908815214039049293599099685705093404680728780357919497857265534594781388417585925624298595733372720769948915810845234441908719837268441890707914500735078108685345860010727793893553096315972642187748597783212870718592296897219117942591

res=Fermat(n)
print('p='+str(res[0]))
print('q='+str(res[1]))

分解得到s,因为s是素数,phi=s-1,c=c%s,再把d求出来,直接pow(c,d,s)即可
得到flag:flag{we11_y0U_aRe_n07_AFra1d_0F_nA1VE_R5A_NOw~}

大佬们帮我看看我这个Python脚本为什么运行不了啊

最后一条提示出了才会,3的摩斯是...--,所以小写代表.,大写代表-,把python脚本里的大小写5个一组转摩斯,再转ASCII得到flag
flag{SEVen_means_8}


现在、你眼中看到了什么?