BUUCTF_RE_[SUCTF2019]SignIn

64位,无壳

查字符串的时候就发现有个65537

 

 

 

直接就想到了RSA

但是上面这两个数字代表什么意思呢

进入主函数

 

 

 

 

百度得知:

void mpz_powm (mpz_t rop, const mpz_t base, const mpz_t exp, const mpz_t mod) [Function]
Set rop to base^exp mod mod.
其实就是计算 base 的 exp 次方,并对 mod 取模,最后将结果写入 rop 中
这个运算的过程和RSA的加密过程一样。
————————————————
版权声明:本文为CSDN博主「flypwn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42016744/article/details/118516989

 

然后分析出一个大致的加密过程(我用python写的代码)

from Crypto.Util.number import long_to_bytes
e=65537
n=103461035900816914121390101299049044413950405173712170434161686539878160984549c='xxxxxxxxxx'
print(pow(long_to_bytes(c),e,n))
# 78510953323073667749065685964447569045476327122134491251061064910992472210485

大概就这么个意思

然后使用yafu分解n

 

 

 得到

p=282164587459512124844245113950593348271

q=366669102002966856876605669837014229419

然后就开始套脚本

import gmpy2 as gp
from Crypto.Util.number import long_to_bytes
import binascii
p =  gp.mpz(282164587459512124844245113950593348271)
q =  gp.mpz(366669102002966856876605669837014229419)
e =  gp.mpz(65537)
c =  gp.mpz(78510953323073667749065685964447569045476327122134491251061064910992472210485)
n = p*q
phi = (p-1) * (q-1)
d = gp.invert(e, phi)
m = pow(c, d, n)
print(long_to_bytes(m))

得到flag

suctf{Pwn_@_hundred_years}

posted @ 2022-04-28 17:26  Luccky  阅读(71)  评论(0编辑  收藏  举报