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}