1. 程式人生 > 實用技巧 >[WP]XCTF-SignIn

[WP]XCTF-SignIn

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)