BUUCTF RE [SUCTF2019] SignIn
好 今日我们来刷ctf

查看文件发现是64位的文件 无壳 用ida64位打开它

发现gmpz_init_set_str,gmpz_powm这类函数
去搜一搜资料发现是GNU 高精度算法库 gmp文档资料
GMP(The GNU Multiple Precision Arithmetic Library)又叫GNU多精度算术库,是一个提供了很多操作高精度的大整数,浮点数的运算的算术库,几乎没有什么精度方面的限制,功能丰富。我刚接触到这个东西的时候是在学习PHP的过程中。GMP的主要目标应用领域是密码学的应用和研究、 互联网安全应用、 代数系统、 计算代数研究等。
一般用来搞密码学,比如像RSA之类的
int mpz_init_set_str (mpz t rop, const char *str, int base)
//rop = str(转为base进制数)
void mpz_powm (mpz t rop, const mpz t base, const mpz t exp, const mpz t [Function] mod)
//rop = base^exp%mod
mpz_powm像极了RSA
公钥加密”
密文 = 明文的e次幂模上n
公式:c = m^e mod n
那这题就是
v6 = v6^v5 % v4
密文v6 要等于 v7
v7 = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35
v5 = 65537
v4 = 103461035900816914121390101299049044413950405173712170434161686539878160984549
接就是
c = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35
e = 65537
n = 103461035900816914121390101299049044413950405173712170434161686539878160984549
RSA相关学习资料
RSA学习例子
c 密文
m 明文
e 公钥
d 私钥
q,p 俩质数
解密公式
m = c ^ d mod n
那就需要先求私钥d
ed = 1 mod φ(n)
φ(n) = (p - 1)(q - 1)
n = p * q
利用yafu 或者 利用网址 RSA n分解
这里利用yafu
.\yafu-x64.exe "factor(103461035900816914121390101299049044413950405173712170434161686539878160984549)"

p = 282164587459512124844245113950593348271
q = 366669102002966856876605669837014229419
上脚本 RSA python解密脚本学习
import binascii
import gmpy2
n = int("103461035900816914121390101299049044413950405173712170434161686539878160984549")
p = gmpy2.mpz(282164587459512124844245113950593348271)
q = gmpy2.mpz(366669102002966856876605669837014229419)
e = gmpy2.mpz(65537)
phi_n = (p - 1)*(q - 1)
d = gmpy2.invert(e,phi_n)
c = gmpy2.mpz(0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35)
m = pow(c, d, n)
m_hex = hex(m)[2:]
print(binascii.a2b_hex(m_hex).decode(encoding="utf8"))
#suctf{Pwn_@_hundred_years}