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