[WP]XCTF-SignIn
阿新 • • 發佈:2020-09-23
1、檢視基本資訊並執行程式
2、載入 IDA 中,main 函式中有許多 GMP 庫的函式
GMP是The GNU MP Bignum Library,是一個開源的數學運算庫,它可以用於任意精度的數學運算,包括有符號整數、有理數和浮點數。它本身並沒有精度限制,只取決於機器的硬體情況。(來自百度百科)
需要注意到這個實際上是大素數的 RSA 加密
RSA 演算法:
encode 函式實際上是將一個字串轉換成大數,30h~39h 對應 0~9 的 ascii 碼,61h~66h 對應 a~f 的 ascii 碼。
也就是儲存為十六進位制數
3、藉助 yafu 來分解大素數得到 p,q 的值
4、寫出 EXP,執行得到 flag
1 import gmpy2 2 p = 282164587459512124844245113950593348271 3 q = 366669102002966856876605669837014229419 4 e = 65537 5 C = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35 6 n = 103461035900816914121390101299049044413950405173712170434161686539878160984549 7 m = (p-1)*(q-1) 8 d = gmpy2.invert(e, m) 9 M = gmpy2.powmod(C, d, n) 10 print(hex(M)) 11 12 v = [] 13 while True: 14 v.append(M & 0xFF) 15 M = M >> 8 16 if M == 0: break 17 print(v) 18 19 flag = '' 20 for i in v: 21 flag = chr(i) + flag 22 23 print(flag)