[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)

原文地址:https://www.cnblogs.com/Tsuiyields/p/13720626.html